Skip to the content.

Architecture Decision Records

Why this SDK is shaped the way it is. One decision per file, newest last.

# Decision Status
0001 stdio is the only transport Superseded in scope by 0006
0002 Target MCP 2026-07-28 exclusively — no initialize, no legacy era Accepted
0003 Conformance asserted against the vendored official schema Accepted
0004 One jq invocation per message on the parse path Accepted
0005 Tool failures are isError results, not JSON-RPC errors Accepted
0006 Add Streamable HTTP as a local endpoint — statelessness made it cheap Accepted
0007 Portability is verified in containers, not asserted — never put unbounded data on argv Accepted

Decisions are evidence-backed where evidence was cheap to get: see docs/spikes/ for the runnable experiments the numbers come from.