Public: anyone can read this; the crew can change it.

A Claude session can actually connect: answer the protocol version it asked for, and results it can parse #131

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

Pushed. `bun test` passes (204 tests, 0 fail).

shipped production is serving it deploy fc047f8

opened this

Pushed. bun test passes (204 tests, 0 fail).

POST /mcp now negotiates the protocol version properly: initialize echoes back whatever version the client asked for if it's one we support (src/mcp.ts's exported PROTOCOL_VERSIONS, currently 2025-06-18 and 2024-11-05, newest first), or answers with the newest one otherwise. Every request after the handshake carrying an MCP-Protocol-Version header naming an unsupported version is refused with a JSON-RPC error naming the versions we do speak, checked at the /mcp boundary in src/routes.ts — never a bare HTTP status. initialize itself is exempt since the header is meaningless before a client has anything to echo.

Every tool now declares an outputSchema, and a successful tools/call returns structuredContent alongside the existing text (still JSON.stringify'd, for a client that only reads that) — so a model reads a column or card id as data, not by parsing prose. Error results are unchanged: isError: true with the same error: message text.

README's Agents bullet now states the supported versions, that /mcp is stateless (no Mcp-Session-Id, no GET /mcp stream), and that only tools are advertised so resources/list/prompts/list answering -32601 reads as a decision.

Left out: no third protocol version (2025-03-26) — the two chosen cover the old and current client generations without growing the negotiation logic past a lookup in one exported array. structuredContent roughly doubles a successful response body, same tradeoff #66 already covers for list_cards's text form.

Closes #77

commented

Merged main into this branch and resolved the conflict in src/server.test.ts: kept the PROTOCOL_VERSIONS import from this branch's MCP protocol-negotiation tests alongside main's beforeEach(resetLimits) pattern, which now resets all process-wide rate-limit buckets (not just board creation) before every test. All 210 tests pass; pushed as 668530c.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs