# Satelo

> Websites promote each other: Quality Score checks, partner discovery and article placement.

- name: io.satelo/satelo
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 74/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.satelo%2Fsatelo
- tools: https://api.protogrid.dev/v1/servers/io.satelo%2Fsatelo/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "satelo": {
      "type": "http",
      "url": "https://satelo.io/mcp",
      "headers": {
        "Authorization": "Bearer ${SATELO_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${SATELO_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 98
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-95% +updated-11d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 74/100 (needs work)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-06-18; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 11 of 11 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: satelo_about (destructiveHint, idempotentHint); satelo_check_site (destructiveHint, idempotentHint); satelo_signup (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 1,827 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 50 (weight 15)

- pass `stability.changes`: 4 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 11, about 1,827 tokens to load them all
- tool set hash: 7e4cd27e87eb15b100b952025638f94b
- tools last changed: 2026-10-19T17:44:12.451Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.satelo/satelo.svg)](https://protogrid.dev/servers/io.satelo/satelo)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-19 `satelo_add_site` changed (description, inputSchema) **meaning changed**
  - before: Requires API key. Adds a website to the account and returns the connection key and steps (WordPress plugin, or API feed for any site). The site joins the exchange once ownership is verified; its first article (about Satelo) earns satellites.
  - after: Requires API key. Adds a website to the account. Methods: "wp" = WordPress plugin (returns the connection key and steps); "ghost" = Ghost, no plugin: pass the owner's Ghost Admin API URL and Admin API key (Ghost Admin → Settings → Integrations → custom integration), Satelo verifies them and the site is active at once; "api" = any other site renders the Satelo feed (static site generators such as Hugo, Astro, Jekyll, Eleventy or Next.js use this). Drupal 10/11 and Joomla 4.4/5 sites use "wp" with platform "drupal" or "joomla": the owner installs the Satelo module (https://satelo.io/downloads/satelo-drupal.zip) or system plugin (https://satelo.io/downloads/satelo-joomla.zip) and pastes the same connection key; both are first releases. The site joins the exchange once ownership is verified; its first article (about Satelo) earns satellites.
- 2026-10-17 `satelo_place_article` changed (description)
  - before: Requires API key. Orders publication of an article about my site on a host from satelo_find_hosts (or the best match if host is omitted). The agent writes the article: original, useful to the host's readers, 1,500+ characters, 1–2 natural links to my site. Markup: blank line = paragraph, "## " = subheading, "- " = list, [text](https://url) = link. Spends satellites; refunded if not published.
  - after: Requires API key. Orders publication of an article about my site on a host from satelo_find_hosts (or the best match if host is omitted). The agent writes the article: original, useful to the host's readers, 1,500+ characters, 1–2 natural links to my site. Markup: blank line = paragraph, "## " = subheading, "- " = list, [text](https://url) = link. Spends the host's price + 10% Satelo fee in satellites; refunded automatically if not published.
- 2026-10-17 `satelo_find_hosts` changed (description)
  - before: Requires API key. Hosts that can publish an article about one of my active sites: similar Quality Score and niche first, never direct A↔B swaps. Returns price in satellites and my balance.
  - after: Requires API key. Hosts that can publish an article about one of my active sites: similar Quality Score and niche first, never direct A↔B swaps. Returns each host's price, the total I pay (price + 10% Satelo fee) in satellites, and my balance.
- 2026-10-17 `satelo_find_sites` changed (description)
  - before: Lists active sites in the Satelo network that accept partner articles, optionally filtered by niche, language and Quality Score range. Shows each site's article price in satellites.
  - after: Lists active sites in the Satelo network that accept partner articles, optionally filtered by niche, language and Quality Score range. Shows each site's article price in satellites (the host receives it in full; a buyer pays price + 10% Satelo fee).

Full history: https://api.protogrid.dev/v1/servers/io.satelo%2Fsatelo/changes

## Remotes

- https://satelo.io/mcp (streamable-http, auth none, reachable true, uptime30d 0.9512195)

## Packages

_none_

## Tools (11)

- `satelo_about`: Explains Satelo: websites promote each other with partner articles exchanged in circles (A→B→C→A), an internal currency (satellites ◉), pricing and how an AI agent can enrol a site. Call this first if unsure.
- `satelo_account`: Requires API key. Balance in satellites, sites with status/Quality Score/prices, recent incoming and outgoing articles.
- `satelo_add_site`: Requires API key. Adds a website to the account. Methods: "wp" = WordPress plugin (returns the connection key and steps); "ghost" = Ghost, no plugin: pass the owner's Ghost Admin API URL and Admin API key (Ghost Admin → Settings → Integrations → custom integration), Satelo verifies them and the site is active at once; "api" = any other site renders the Satelo feed (static site generators such as Hugo, Astro, Jekyll, Eleventy or Next.js use this). Drupal 10/11 and Joomla 4.4/5 sites use "wp" with platform "drupal" or "joomla": the owner installs the Satelo module (https://satelo.io/downloads/satelo-drupal.zip) or system plugin (https://satelo.io/downloads/satelo-joomla.zip) and pastes the same connection key; both are first releases. The site joins the exchange once ownership is verified; its first article (about Satelo) earns satellites.
- `satelo_check_site`: Free Quality Score (0–100) for any domain from open data: popularity, link graphs (Majestic, Common Crawl), domain age, content and technical health. Brand-new sites score 0.
- `satelo_find_hosts`: Requires API key. Hosts that can publish an article about one of my active sites: similar Quality Score and niche first, never direct A↔B swaps. Returns each host's price, the total I pay (price + 10% Satelo fee) in satellites, and my balance.
- `satelo_find_sites`: Lists active sites in the Satelo network that accept partner articles, optionally filtered by niche, language and Quality Score range. Shows each site's article price in satellites (the host receives it in full; a buyer pays price + 10% Satelo fee).
- `satelo_place_article`: Requires API key. Orders publication of an article about my site on a host from satelo_find_hosts (or the best match if host is omitted). The agent writes the article: original, useful to the host's readers, 1,500+ characters, 1–2 natural links to my site. Markup: blank line = paragraph, "## " = subheading, "- " = list, [text](https://url) = link. Spends the host's price + 10% Satelo fee in satellites; refunded automatically if not published.
- `satelo_review_article`: Requires API key. For sites with auto-placement off: approve or reject an article waiting for approval (ids come from satelo_account → incoming).
- `satelo_signup`: Sends a sign-in link to the site owner's email (no password). After signing in they can create an API key for this MCP server in the dashboard. Only use with the owner's own email and consent.
- `satelo_site_settings`: Requires API key. Set auto-placement (publish incoming articles automatically), whether the site accepts articles, niche, language, or the owner's own article price in satellites (null = use Satelo's recommendation).
- `satelo_verify_site`: Requires API key. Checks that the plugin / verification file is in place and activates the site in the exchange.
