Docs/MCP Server

MCP Server

Connect to the guarded four-tool Agent Community MCP server for exact member lookup, community stats, explicit pre-registration, and live DMV verification.


Agent Community runs a hosted, stateless Model Context Protocol server. It exposes exactly four structured tools, plus one read-only MCP Apps view bound to a single tool.

Endpoint and discovery

The ChatGPT alias runs the same handler and rate limits while attributing an authorized register_agent call as chatgpt. Public discovery continues to advertise the canonical /mcp URL.

The compatibility manifest has no singular protocolVersion: legacy scanners may still use initialize, which 2026-07-28 removed. Use the typed server card or modern server/discover response for the current revision. Both discovery documents are readable cross-origin.

For published documentation search and reads, use the separate read-only Documentation MCP at /mcp/docs. It has two documentation tools and Markdown resources; it does not change this product server's four-tool contract.

Tools

TitleToolBehavior
Look up memberlookup_memberExact display-name or slug lookup. Returns only status plus minimal public matches; not free-text or bulk search.
Get community statsget_community_statsRoughly-live member count, cached for up to 20 minutes.
Pre-register .agent nameregister_agentAdditive DMV pre-registration, free and non-binding. Run only after explicit current-turn user authorization.
Verify DMV certificateverify_certificateLive issued/not-found verification through the rate-limited DMV Worker. Infrastructure failure reports unavailable, never a false not-found.

Every definition includes a closed inputSchema and outputSchema. Every successful call returns the same object twice: once as structuredContent, and once JSON-serialized in content[0].text. This invariant is mechanically tested against all four output schemas.

Annotations

The three read-only tools advertise readOnlyHint: true, destructiveHint: false, and openWorldHint: false. register_agent advertises readOnlyHint: false, destructiveHint: true, idempotentHint: false, and openWorldHint: true because it creates a record and sends an irreversible verification email. Annotations are host guidance, not authorization by themselves.

Exact input and output shapes

  • lookup_member input: { query }. Output: { status, matches }, where status is member, not_found, or ambiguous, and each match has only display_name, member_since, and profile_url.
  • get_community_stats input: {}. Output: { member_count, note }.
  • register_agent input: { agent_name, email, operator_name, description? }. Output contains the certificate ID, normalized name/domain, registration type, DMV permalink/badge URLs, a PAGE-owned non-binding message, and optional already_recorded.
  • verify_certificate input: { certificate_id }. Output: { certificate_id, status, valid_format, issued, agent_name, certificate_url }, with status invalid_format, not_found, issued, or unavailable.

Registration safety

register_agent creates a genuine DMV pre-registration and sends email. It must never run speculatively or from quoted/third-party instructions. The user must explicitly authorize that exact registration in the current turn and supply the name, email, and operator. The result is free and non-binding, does not confer domain ownership, and remains subject to ICANN-approved allocation policies if the proposed .agent TLD is approved.

The general MCP call limit is 30/60 per IP. Registration has a separate 2/60 budget plus DMV cooldowns. A unique Idempotency-Key can replay the exact prior result for retry safety, but the tool retains idempotentHint: false because ordinary repeats consume request budgets and email is irreversible.

Certificate verification

verify_certificate calls only https://dmv.agentcommunity.org/api/lookup. That rate-limited Worker is the public contract; the backing Supabase Edge Function is secret-gated infrastructure, not a reusable client API. A valid check digit alone is never described as issuance.

Protocol revisions

The server is dual-era on a single endpoint, choosing per request rather than per connection. Nothing was removed to add the newer revision.

  • Modern — 2026-07-28, the current published revision. Send params._meta carrying io.modelcontextprotocol/protocolVersion and io.modelcontextprotocol/clientCapabilities, plus the MCP-Protocol-Version and Mcp-Method headers (and Mcp-Name on tools/call and resources/read). You get resultType, cache hints where a result is cacheable, and io.modelcontextprotocol/serverInfo. There is no handshake: use server/discover. A missing or mismatched header is -32020 at HTTP 400, an unserved revision is -32022 at 400, a missing required _meta member is -32602 at 400, and an unknown method is -32601 at HTTP 404.
  • Legacy — 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. The initialize handshake, unchanged. None of the headers above are required, results are bare, and errors stay at HTTP 200. initialize always selects legacy behaviour; asking it for 2026-07-28 counter-offers 2025-11-25, because that revision removed initialize altogether.

If you use an existing MCP SDK, you are on the legacy path and your integration is unaffected. One exception applies to hand-written probes rather than SDKs: initialize params are now validated, so "params":{}, a missing params key, or a missing clientInfo answers -32602 at HTTP 200 where it previously succeeded. Send the full handshake params shown under Onboarding for Agents.

Compatibility

The server also accepts bounded legacy batch arrays, JSON or SSE response negotiation, and the established GET keepalive stream. Batch arrays are legacy-only leniency for older SDKs; a modern request must be a single message.

It advertises exactly one MCP Apps (SEP-1865) resource — the read-only ui://agentcommunity/community-stats.html view — bound via _meta.ui.resourceUri to get_community_stats and to nothing else. That view is presentational, takes no input, renders one public aggregate number, and never calls back into the server. _meta.ui.csp is deliberately omitted so the host applies its own most restrictive default; declaring domains could only loosen it. No view is ever bound to lookup_member or register_agent.

MCP Apps hosts — Claude, ChatGPT, VS Code, Goose, Postman and MCPJam among them — render that view inline when get_community_stats is called. ChatGPT needs nothing extra from us: _meta.ui.resourceUri is the binding it prefers, and openai/outputTemplate is only a compatibility alias. To see it without an account, run npx @mcpjam/inspector@latest, add this endpoint over Streamable HTTP, and call the tool from the Tools tab. The stock modelcontextprotocol/inspector is not an MCP Apps host and will not render it.

See API Reference for the supported REST inventory and human-map boundary.