Surface docs

Protocol

For building your own client — the endpoint, headers, methods and status codes.

Clients like Claude Code handle all of this. Read on if you're calling the server directly.

JSON-RPC over POST https://mcp.surface-ai.io/mcp/, JSON responses only, no sessions. Each request sends Mcp-Method and MCP-Protocol-Version headers that must match the body, and a _meta with the protocol version and client capabilities.

tools/list
curl -s https://mcp.surface-ai.io/mcp/ \
  -H "Authorization: Bearer $SURFACE_MANAGEMENT_KEY" \
  -H 'Content-Type: application/json' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/list' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{"_meta":{
        "io.modelcontextprotocol/protocolVersion":"2026-07-28",
        "io.modelcontextprotocol/clientCapabilities":{}}}}'

Methods

MethodPurpose
server/discoverSupported versions, capabilities and server identity.
tools/listThe ten tools with their input schemas. Cacheable for an hour.
tools/callRun a tool: params { name, arguments }.
resources/listAlways empty — surfaces are reached by template.
resources/templates/listsurface://{surface_id}
resources/readRead surface://<id> as JSON.
prompts/listsetup_surface — in Claude Code, /mcp__surface__setup_surface.
prompts/getThe setup workflow, with an optional page argument.

HTTP status codes

StatusWhen
200Success — including a tool that failed, which returns isError: true.
400Bad JSON, a header that disagrees with the body, or an unsupported protocol version (the error lists 2026-07-28).
401Missing, unknown or revoked key.
403An Origin header from a host we don't serve.
404A method the server doesn't implement, such as initialize.
405GET or DELETE on /mcp/.

On this page