answer.cloud CMS

answer.cloud MCP: Overview, Connection & Authentication

What the answer.cloud MCP server is, how to connect a coding agent, and how Bearer authentication, protocol negotiation, rate limits, and errors work.

The answer.cloud MCP server lets a coding agent (Claude Code, Codex, or any MCP client) create sites, deploy static artifacts, manage GitHub push-to-deploy, and author CMS content on answer.cloud — without leaving the terminal. This page covers what the server is, how to connect, and how authentication, protocol negotiation, rate limits, and errors work. The individual tools are documented in the companion pages for site & deploy tools, GitHub tools, and CMS tools.

What the MCP server is

answer.cloud exposes a single Model Context Protocol endpoint that speaks JSON-RPC 2.0 over Streamable HTTP. Every call is a self-contained HTTP POST — there is no SSE stream and no long-lived session to manage. You send one JSON-RPC request, you get one JSON-RPC response.

The server groups its tools into three families:

Endpoint and transport

Authentication

Every request must carry a hosting API key as a Bearer token:

Authorization: Bearer aeo_host_YOUR_KEY

Hosting API keys start with the aeo_host_ prefix and are minted in the answer.cloud dashboard under Settings → API & MCP. A key is shown in full exactly once at creation time — copy it immediately; if you lose it, revoke it and issue a new one.

Keys are organization-scoped: one key can act on every site in the organization that owns it. The server resolves the organization directly from the token, so no organization parameter is ever required. Only a salted digest of the key is stored, never the key itself.

If a call returns Unauthorized: provide a valid hosting API key as a Bearer token., the key is missing, malformed, revoked, or belongs to a different environment than the endpoint you are calling.

Protocol version

Send the negotiated protocol version on every request:

MCP-Protocol-Version: 2025-11-25

The server currently accepts 2025-11-25 (current), 2025-06-18, and 2025-03-26. An unrecognized version is rejected before the call runs.

Rate limits and quotas

Because polling get_deploy counts against the request rate, poll on the cadence the response suggests (retry_after_seconds) rather than in a tight loop.

How results and errors are shaped

A successful tools/call returns the tool's data as JSON in both content[0].text (a pretty-printed string) and structuredContent (the same object, parsed). Prefer structuredContent.

Tool-level failures come back as a result with isError: true and a body of { "error": "<code>", "message": "<human-readable next step>" }. The error code is stable and machine-readable; the message tells you what to do next. Common codes include:

Malformed JSON-RPC (bad method, unknown tool, batch array) returns a standard JSON-RPC error object instead, with codes such as -32600 and -32602.

Minimal request example

curl -sS -X POST https://answer.cloud/mcp \
  -H "Authorization: Bearer aeo_host_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "list_sites", "arguments": {} }
  }'

Connecting from a coding agent

Most users never call the endpoint by hand — they register it once with their agent.

Claude Code:

claude mcp add --transport http answercloud https://answer.cloud/mcp \
  --header "Authorization: Bearer aeo_host_YOUR_KEY"

Codex — add to ~/.codex/config.toml:

[mcp_servers.answercloud]
url = "https://answer.cloud/mcp"
bearer_token_env_var = "AEOPRESS_API_KEY"

Then export the key so the session picks it up:

export AEOPRESS_API_KEY=aeo_host_YOUR_KEY

Frequently asked questions

Do I need to pass my organization ID?

No. The key encodes which organization it belongs to, and the server derives the organization from the token. You only ever pass a site_slug to target a specific site.

Why did my key work against one URL but not another?

Keys are tied to the environment that issued them. A key created in production only authenticates against the production endpoint; a local or staging key will not.

How do I recover from card_required?

Add a card on file in the dashboard and finish signup. Site creation and deploys are gated on a valid payment method even on free usage tiers.