{
  "markdown": "# agenthost MCP server\n\n[agenthost](https://agenthost.eu) is agent-first web hosting, driven entirely\nthrough an MCP server. This repository holds the [MCP Registry](https://registry.modelcontextprotocol.io)\nlisting for it — [`server.json`](./server.json) — and the workflow that publishes\nthat listing.\n\nagenthost is a **remote** MCP server: it is hosted by agenthost and reachable over\n[Streamable HTTP](https://modelcontextprotocol.io/specification/basic/transports)\nat **`https://agenthost.eu/mcp`**. There is nothing to install locally.\n\n- **Registry name:** `eu.agenthost/agenthost`\n- **Endpoint:** `https://agenthost.eu/mcp` (Streamable HTTP)\n- **Website:** <https://agenthost.eu>\n\nThe server code itself lives in agenthost's private control-panel repository; this\nrepository only carries the public registry metadata.\n\n## Connecting\n\nPoint any MCP client that speaks Streamable HTTP at `https://agenthost.eu/mcp`.\nAuthentication is handled by the client's OAuth flow — you sign in (or sign up) at\nagenthost in your browser, so there is no token to paste. For unattended clients\nthat cannot open a browser, agenthost can mint a long-lived API token to send as a\n`Bearer` header.\n\nExample client configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"agenthost\": {\n      \"type\": \"streamable-http\",\n      \"url\": \"https://agenthost.eu/mcp\"\n    }\n  }\n}\n```\n\n## Publishing\n\nPublishing is automated with GitHub Actions ([`.github/workflows/publish-mcp.yml`](./.github/workflows/publish-mcp.yml)).\nThe registry entry is namespaced under `eu.agenthost` — the reverse-DNS form of\n`agenthost.eu` — and ownership is proven with **DNS authentication**: a TXT record\non the apex of `agenthost.eu` holds the public half of an Ed25519 signing key, and\nthe workflow signs with the private half stored in the `MCP_PRIVATE_KEY` secret.\n\n- Every push and pull request **validates** `server.json` against the official\n  schema (`mcp-publisher validate`) — no secret required.\n- Pushing a **`v*` tag** (or running the workflow manually) **publishes** to the\n  registry. On a tag, the published version is taken from the tag, so the git tag\n  is the single source of truth for the registry version.\n\nTo cut a release:\n\n```bash\ngit tag v0.1.0\ngit push origin v0.1.0\n```\n\nVerify afterwards:\n\n```bash\ncurl \"https://registry.modelcontextprotocol.io/v0.1/servers?search=eu.agenthost/agenthost\"\n```\n\n### One-time DNS auth setup\n\nGenerate the signing key on a trusted machine (needs OpenSSL 3+), so the private\nkey never leaves your control:\n\n```bash\n# 1. Generate an Ed25519 key pair\nopenssl genpkey -algorithm Ed25519 -out key.pem\n\n# 2. Build the DNS TXT record (public key)\nPUBLIC_KEY=\"$(openssl pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)\"\necho \"agenthost.eu. IN TXT \\\"v=MCPv1; k=ed25519; p=${PUBLIC_KEY}\\\"\"\n\n# 3. Extract the private key for the GitHub secret\nopenssl pkey -in key.pem -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\\n'; echo\n```\n\nThen:\n\n1. **Add the TXT record** from step 2 on the **apex** of `agenthost.eu`\n   (`agenthost.eu`, not a `_mcp-auth` subdomain). Wait for it to propagate.\n2. **Add the private key** from step 3 as a repository secret named\n   `MCP_PRIVATE_KEY` (Settings → Secrets and variables → Actions). For stronger\n   protection, store it instead on a GitHub Environment named `mcp-registry-publish`\n   and restrict that environment to the default branch and release tags — the\n   workflow already references that environment.\n3. Delete `key.pem` once the secret is stored.\n\nIf you rotate the key, remove the old TXT record from the apex — a stale record is\ntried first and will fail verification.\n\n## Editing `server.json`\n\n`server.json` follows the MCP Registry\n[`server.schema.json`](https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json)\n(the `$schema` field pins the exact version). Keep the `remotes[].url` in sync with\nthe production endpoint, and keep `description` within the schema's 100-character\nlimit. CI validates every change, so a malformed edit fails in review.\n",
  "bytes": 4039,
  "sha": "254e4a70853b1f343ba60010e7a77e0733e37392652c049dd94f1494314ca29d",
  "repo_slug": "agenthosteu/agenthost-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_eu_agenthost_agenthost_3ed6b4bc/readme"
}