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.