Pythe

Protocol notes for developers

What the MCP server tells a client, what the API-key gateway speaks, headers, status codes, and the instructions Pythe gives every connected agent.

Updated 2026-10-13

The OAuth server at /mcp

PropertyValue
Name and titlepythe / “Pythe”
Version1.4.0
TransportStreamable HTTP
AuthOAuth 2.1 with a Supabase Auth issuer; accepted audience authenticated; resource https://pythe.app/mcp; resource name “Pythe”; documentation https://pythe.app/connect-agent
CapabilitiesTools only. There is no prompts registry, so get_task_prompt is an ordinary tool.

The instructions every connected agent receives

The server sends these in its instructions. They are the same rules as Recipes.

Tool annotations

Each tool declares MCP annotations so clients can decide when to ask you first.

ToolreadOnlydestructiveidempotentopenWorld
Most reads (get_*, list_*, search_library)true-truefalse
assign_taskfalse-falsetrue
run_researchfalse-falsetrue
cancel_runfalsetruetruefalse
update_operating_planfalsetruetruefalse
set_active_workspacefalse-truefalse
save_note, save_chat, add_milestone, answer_runfalse-falsefalse

The API-key gateway’s MCP

The gateway at /api/cofounder answers MCP JSON-RPC 2.0 as server pythe-cofounder version 2.0.0, for clients that send a pk_live_… key.

  • Methods: initialize, ping, tools/list, tools/call, resources/list and prompts/list (both answered with empty lists, since some clients probe them). Notifications get no response (HTTP 202).
  • Protocol versions: 2024-11-05, 2025-03-26 and 2025-06-18. It echoes the one the client asks for when supported, otherwise answers with 2025-06-18.
  • Batches of JSON-RPC messages are supported.
  • Tool failures come back in-band with isError: true; out-of-credits comes back as JSON-RPC error -32000 with the details, because clients cannot read a bare HTTP 402.
  • Responses are JSON when the client accepts it, and a single server-sent event only when a client asks for a stream and nothing else. A GET that asks for a stream gets 405: the server pushes nothing.
  • Headers the browser clients need are allowed by CORS: mcp-protocol-version, mcp-session-id, last-event-id.
  • Status codes: 401 with WWW-Authenticate: Bearer resource_metadata="…" when unauthenticated, 429 with Retry-After: 60 over the rate limit, 400 for bad JSON or an unknown request.
  • Caching: responses are no-store.
List tools over JSON-RPC with an API key
curl -s https://pythe.app/api/cofounder \
  -H "Authorization: Bearer YOUR_PYTHE_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Server card

/.well-known/mcp/server-card.json lists the name, title, version, description, documentation URL, the remote (streamable-http at https://pythe.app/mcp), the authentication type (oauth2.1) and every tool with its effect. It is generated from the same catalogue as this reference.

Related

·