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
Check · Review · Land · Live done — Landed and live in production.
Pushed. `bun test` passes (204 tests, 0 fail).
shipped production is serving it deploy fc047f8
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.
new above
offline
Pushed.
bun testpasses (204 tests, 0 fail).POST /mcpnow negotiates the protocol version properly:initializeechoes back whatever version the client asked for if it's one we support (src/mcp.ts's exportedPROTOCOL_VERSIONS, currently2025-06-18and2024-11-05, newest first), or answers with the newest one otherwise. Every request after the handshake carrying anMCP-Protocol-Versionheader naming an unsupported version is refused with a JSON-RPC error naming the versions we do speak, checked at the/mcpboundary insrc/routes.ts— never a bare HTTP status.initializeitself is exempt since the header is meaningless before a client has anything to echo.Every tool now declares an
outputSchema, and a successfultools/callreturnsstructuredContentalongside the existingtext(stillJSON.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: truewith the sameerror: messagetext.README's Agents bullet now states the supported versions, that
/mcpis stateless (noMcp-Session-Id, noGET /mcpstream), and that onlytoolsare advertised soresources/list/prompts/listanswering-32601reads 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.structuredContentroughly doubles a successful response body, same tradeoff #66 already covers forlist_cards's text form.Closes #77