Architecture Decision Records¶
ADRs capture point-in-time decisions about mocapi's architecture. They are immutable in spirit: a decision that no longer holds gets a new ADR with status "Supersedes ADR-NNNN", and the old ADR's status flips to "Superseded by ADR-MMMM".
Provenance¶
ADRs 0001–0018 were reconstructed retroactively on 2026-05-07 from
the project's now-retired numbered-spec corpus and from git history.
The Date: field on each ADR records when the decision landed in
the codebase (the commit that introduced the central artifact —
class, sealed type, module, or annotation — that the decision
manifests as), not when the ADR document itself was authored. Where a
decision evolved across multiple commits, the date is the introduction
of the canonical artifact. ADRs added from this point on should be
authored at decision time and dated accordingly.
Status legend¶
- Accepted — currently in effect, reflected in the code and the design docs.
- Proposed — under discussion, not yet implemented.
- Superseded — replaced by a later ADR. The replacement is linked.
- Deprecated — no longer in effect but not replaced (rare).
How to add an ADR¶
- Copy
_template.mdtoNNNN-short-title.mdusing the next free number. - Fill in Status / Context / Decision / Consequences.
- Update the relevant
../design/*.mdin the same commit so the living docs stay synchronized. - Add the ADR to the index below.
Index¶
- ADR-0001 — Module structure and starter packaging
- ADR-0002 — Protocol/transport contract (Superseded by ADR-0020)
- ADR-0003 — Streamable HTTP and stdio as peer transports
- ADR-0004 — Lazy JSON-vs-SSE response shape via state machine
- ADR-0005 — Encrypted SSE event IDs (Superseded by ADR-0020)
- ADR-0006 — Virtual-thread-per-call with context propagation
- ADR-0007 — Substrate as the storage SPI and pluggable session store (Superseded by ADR-0020)
- ADR-0008 — Substrate Mailbox for elicitation/sampling rendezvous (Superseded by ADR-0021)
- ADR-0009 —
McpContextResultsealed type for transport-portable validation (Superseded by ADR-0020) - ADR-0010 — Annotation-driven handler discovery and naming
- ADR-0011 — Customizer SPI, interceptor strata, and handler descriptors
- ADR-0012 — Guard SPI: visibility ≡ invocation
- ADR-0013 — OAuth2 module and reference Guard implementation
- ADR-0014 —
mocapi-modeltranslated 1:1 from MCPschema.ts - ADR-0015 — Constrained elicitation schema builder
- ADR-0016 — Tool schema generation via victools
- ADR-0017 — Observability stack: Micrometer + audit + actuator
- ADR-0018 — MCP spec features deliberately not implemented (Superseded by ADR-0022)
- ADR-0019 — Adopt MCP 2026-07-28 as the sole protocol (clean break)
- ADR-0020 — Stateless request model; sessions removed
- ADR-0021 — MRTR elicitation via replay
- ADR-0022 — MCP 2026-07-28 features deliberately not implemented
- ADR-0023 — Guard denial moves to
-32010; spec claims-32003/-32004 - ADR-0024 —
McpElicitor: elicitation from prompt and resource handlers - ADR-0025 — Typed progress emitters and the
MrtrContextsuper-interface - ADR-0026 — Response-
_metainjection seam;serverInfoSHOULD adherence - ADR-0027 — Remove the
DRAFT-2026-v1protocol alias on 2026-07-28 finalization - ADR-0028 — Decline SEP-2243 custom parameter headers (
x-mcp-header) - ADR-0029 — Authorization SHOULD-level challenges:
required-scopesfor resource-level step-up, decline per-tool - ADR-0030 — Align observability with the OpenTelemetry MCP semantic conventions
- ADR-0031 — Contribute declared capabilities via
ServerCapabilitiesCustomizer - ADR-0032 — Handler discovery recognizes meta-annotations
- ADR-0033 — MCP Apps module and the
io.modelcontextprotocol/uicapability - ADR-0034 — Descriptor
_metaand descriptor-customizer seams (Amended by ADR-0039) - ADR-0035 — Function-backed resource readers and a
ResourceContributorseam - ADR-0036 —
@McpUi(resource=…)serve-mode for UI bundles - ADR-0037 —
mocapi-tasks: the MCP Tasks extension and its execution model (Amended by ADR-0040) - ADR-0038 — Three generic
mocapi-serverseams for the Tasks extension (Amended by ADR-0039) - ADR-0039 — Extension-seam taxonomy and dispatch interception
- ADR-0040 — Substrate-backed TaskStore lives in mocapi as mocapi-tasks-substrate