Decision log

June 16, 2026 · View on GitHub

Append-only record of design decisions for the Tool Annotations IG's trust / privacy extension work. Newest at the bottom.

2026-06-10 — Split SEP-1913 into independent extensions

Decision. Split the schema-bearing parts of SEP-1913 into separate experimental extensions, each with its own io.modelcontextprotocol/… identifier and reference implementation, rather than pursuing one broad Standards Track SEP.

Rationale. @localden's review asked for a narrower first cut; the IG aligned 2026-05-28 on an extension-first strategy. Independent extensions can graduate on their own clock and avoid hard-to-remove schema.

2026-06-10 — Three initial extensions

Decision. trust-annotations (primary), action-metadata, ifc-fides.

Rationale. These are the three pieces with either a reference implementation or an existing SEP behind them: Kapil's SDK, SEP-2061 (Reichel), and the FIDES model respectively.

2026-06-10 — FIDES is a profile, not a top-level extension

Decision. Information-flow control is type: "ifc.fides.v1", a profile of the trust-annotations evidenceRef slot — not a top-level io.modelcontextprotocol/ifc extension.

Rationale. IFC is one enforcement model among several raised in review (capability tokens — pshkv; cosigning — viftode4; sequence shape — marras0914). A top-level ifc/ root would foreclose those. Reviewer endorsement was for IFC "if you use annotations" — i.e. as a profile.

2026-06-10 — evidenceRef.type is an open string

Decision. type MUST remain an open string with a non-binding registry of well-known values; never a closed enum. Required fields are digest and canonicalization; schema recommended; ref optional.

Rationale. Adapted from the vaaraio / Rul1an convergence in the SEP-1913 thread. An open type is what lets IFC, data-class, sequence-shape, and attestation profiles share one slot.

2026-06-10 — requiresReview moves to action-metadata

Decision. requiresReview is an action-metadata field, not a trust-annotations field.

Rationale. It is a workflow/consent signal, not a data-classification property. Keeping it out of the trust taxonomy avoids reproducing SEP-1913's "several concerns in one schema" problem at smaller scale.

2026-06-10 — DataClass demoted to a profile

Decision. The wire taxonomy keeps only the coarse sensitive boolean. The four-level classification + regulatory scope becomes an evidenceRef profile type: "data-class.v1".

Rationale. Coarse binary is universally client-actionable and cheap on the wire; the richer taxonomy can evolve behind a profile without a breaking schema change.

2026-06-10 — Parked: maliciousActivityHint, propagation rules

Decision. Neither becomes an extension now; both stay on the SEP-1913 umbrella.

Rationale. maliciousActivityHint has unresolved structural objections (fires pre-execution at tools/resolve; boolean granularity wrong for UX; clients won't trust server self-attestation). Propagation/sequence-shape needs the taxonomy and evidenceRef stable first.

2026-06-10 — Citations: public sources only

Decision. Reference implementations and motivating examples cite public artifacts — github-mcp-server, kapil8811/mcp-trust-annotations, arXiv:2505.23643 — and index on the public SEP-1913 review record (esp. @localden). Private/internal implementations are not named or linked.

2026-06-10 — Pre-flight (SEP-1862) stays core

Decision. These extensions are response-level and do not depend on Tool Resolution. SEP-1862 remains a core/Standards-Track protocol change.

Rationale. The 2026-05-28 IG meeting concluded pre-flight is inherently a protocol-level change, not an extension.

2026-06-16 — FIDES is a scheme, not a sibling extension

Decision. Refines the 2026-06-10 "FIDES is a profile" decision. The IFC/FIDES work moves out of specification/draft/ (where it sat next to the two extensions) into a schemes/ folder. There are two extensions (trust-annotations, action-metadata); FIDES is one data-labelling scheme (ifc.fides.v1) that fills the trust-annotations evidenceRef slot.

Rationale. FIDES is one model the extension could use, not a peer of the extensions, and must not be presented as a sibling. The original SEP cites it alongside ShardGuard and "Design Patterns for Securing LLM Agents," and the SEP-1913 thread adds capability tokens, cosigning, sequence-shape, and attestation models — so schemes/ is a folder for interchangeable approaches, with FIDES as the first worked one. This shows the range the open evidenceRef slot is meant to carry rather than implying IFC is the privileged model.

2026-06-16 — Three pull requests, stacked

Decision. The work ships as three PRs: trust-annotations (the base, carrying shared repo scaffolding), action-metadata (stacked on the base), and the FIDES scheme in schemes/ (stacked on the base). The two extensions are independent; the FIDES scheme depends on trust-annotations because it fills that extension's evidenceRef slot.

Rationale. Separate PRs let each piece be reviewed and graduate on its own clock. FIDES stacks on trust-annotations because a scheme has no meaning without the slot it fills.

2026-06-16 — Schemes carry data labels; host architectures do not

Decision. schemes/ holds data-labelling approaches a server attaches to a result (FIDES, Permissive IFC, AirGapAgent, data-class, attestation envelopes). Host architectures — control-flow designs the client/host runs (CaMeL, the "Design Patterns for Securing LLM Agents" catalogue, Dual-LLM) — are prior art in related-work.md, not candidate schemes.

Rationale. A scheme produces a label; an architecture decides what to do with one. Conflating them would invite a schemes/camel.md that has no per-result payload to define. A capability token such an architecture issues can still be referenced through evidenceRef, but the architecture itself is not a scheme.

2026-06-16 — Early SEP-1913 feedback recorded as cited open questions

Decision. The substantive concerns from the original issue (#711) and SEP (#1913) review — the set-theoretic critique of linear sensitivity, org-defined vocabularies, the class+regulatory pairing, taint persistence across storage, per-block byte ranges, sequence-shape, and the false-security risk — are captured with reviewer attributions in open-questions.md rather than silently dropped by the narrower cut.

Rationale. The narrow first cut (sensitive: boolean) deliberately omits a lot of debated design. Recording why, with links to the people who raised each point, keeps the history visible and gives each parked item a home to graduate from (a scheme, an action-metadata field, or a future extension) instead of being re-litigated from scratch.

2026-06-16 — sensitive is a lowest-common-denominator floor; emit both

Decision. The coarse sensitive boolean is intentionally a lowest-common-denominator signal — a universal, always-actionable floor that supports a basic "better than nothing" egress/consent policy even against a barely-known server. It is the basic, general scheme every participant understands, not a competitor to richer schemes. Servers SHOULD emit both the boolean and a richer evidenceRef scheme (e.g. data-class.v1, ifc.fides.v1) where they can; sensitive MUST NOT be dropped merely because a scheme is present.

Rationale. Clarifies the original purpose of the boolean (raised by Sam): the point of keeping it on the wire was never to replace richer classification but to guarantee a floor any client can act on. Richer schemes are strictly more capable but are not universally implemented, so they cannot be the floor — layering the two gives universal actionability without capping what advanced hosts can do. This also answers the "boolean vs. richer taxonomy" tension from SEP-1913 review: it is not either/or, it is both, at different layers.