docs: drop jargon, make repo docs descriptive

Replace 'carve'/'headline' throughout; reframe the front-facing docs
(README, spec drafts, related-work) to describe what the repo contains
and link to it rather than narrate the process. Process framing stays in
the decision log and the intent-comment/sep-disposition planning docs.
Live SEP-1913/SEP-2061 comments updated to match.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Sam Morrow 2026-06-11 00:12:30 +02:00
commit 70ec91c5f7
No known key found for this signature in database
8 changed files with 56 additions and 56 deletions

View file

@ -38,41 +38,41 @@ See [docs/decisions.md](docs/decisions.md) for the decision record and
| Identifier | Status | What it specifies | Reference implementation(s) | | Identifier | Status | What it specifies | Reference implementation(s) |
| :--- | :--- | :--- | :--- | | :--- | :--- | :--- | :--- |
| [`io.modelcontextprotocol/trust-annotations`](specification/draft/trust-annotations.mdx) | Draft skeleton | **Headline.** A small, scheme-agnostic client-facing data-classification vocabulary (`sensitive`, `untrusted`) on result `_meta`, plus an optional `evidenceRef` pointer slot that carries richer payloads out-of-band. | Python SDK: [`kapil8811/mcp-trust-annotations`](https://github.com/kapil8811/mcp-trust-annotations) (138-test suite, healthcare demo, LLM usability study). | | [`io.modelcontextprotocol/trust-annotations`](specification/draft/trust-annotations.mdx) | Draft skeleton | **Primary extension.** A small, scheme-agnostic client-facing data-classification vocabulary (`sensitive`, `untrusted`) on result `_meta`, plus an optional `evidenceRef` pointer slot that carries richer payloads out-of-band. | Python SDK: [`kapil8811/mcp-trust-annotations`](https://github.com/kapil8811/mcp-trust-annotations) (138-test suite, healthcare demo, LLM usability study). |
| [`io.modelcontextprotocol/action-metadata`](specification/draft/action-metadata.mdx) | Draft skeleton | `inputMetadata` / `returnMetadata` / outcome classifiers (incl. `requires_review`) on `ToolAnnotations`, describing where inputs go, where outputs originate, and what real-world effects a tool can cause. | Carries forward [SEP-2061 (Action Security Metadata)](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2061) by [@rreichel3](https://github.com/rreichel3); reference impl per that proposal (`read_drafts` / `list_inbox` / `send_email`). | | [`io.modelcontextprotocol/action-metadata`](specification/draft/action-metadata.mdx) | Draft skeleton | `inputMetadata` / `returnMetadata` / outcome classifiers (incl. `requires_review`) on `ToolAnnotations`, describing where inputs go, where outputs originate, and what real-world effects a tool can cause. | Carries forward [SEP-2061 (Action Security Metadata)](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2061) by [@rreichel3](https://github.com/rreichel3); reference impl per that proposal (`read_drafts` / `list_inbox` / `send_email`). |
| [`io.modelcontextprotocol/ifc-fides`](specification/draft/ifc-fides.mdx) | Draft skeleton | A **profile** of the `trust-annotations` `evidenceRef` slot: `type: "ifc.fides.v1"` carrying an integrity + confidentiality label for deterministic information-flow control, following the FIDES paper ([arXiv:2505.23643](https://arxiv.org/abs/2505.23643)). | Emitter candidate: [`github-mcp-server`](https://github.com/github/github-mcp-server) (does not emit IFC labels today — closing that gap is the proof point). | | [`io.modelcontextprotocol/ifc-fides`](specification/draft/ifc-fides.mdx) | Draft skeleton | A **profile** of the `trust-annotations` `evidenceRef` slot: `type: "ifc.fides.v1"` carrying an integrity + confidentiality label for deterministic information-flow control, following the FIDES paper ([arXiv:2505.23643](https://arxiv.org/abs/2505.23643)). | Emitter candidate: [`github-mcp-server`](https://github.com/github/github-mcp-server) (does not emit IFC labels today — closing that gap is the proof point). |
### Why FIDES is a profile, not the headline ### Why FIDES is a profile, not a top-level extension
An earlier sketch made information-flow control the top-level extension. That Information-flow control is modelled as a profile rather than the namespace
was the wrong cut: it bakes one academic model (an integrity × confidentiality root because IFC (an integrity × confidentiality lattice) is one enforcement
lattice) into the namespace root and silently forecloses the other enforcement model among several that reviewers raised — capability tokens, caller/tool
models reviewers raised — capability tokens, caller/tool cosigning, and cosigning, and sequence-shape audit records. A top-level `ifc/` root would bake
sequence-shape audit records. As one reviewer put it, IFC "fits relatively well one academic model into the namespace and foreclose the others. As one reviewer
if you use annotations" — an endorsement of IFC *as a profile*, not as the wire put it, IFC "fits relatively well if you use annotations" — an endorsement of
root. Demoting it to a `type` value under `trust-annotations`'s open-ended IFC *as a profile*, not as the wire root. As a `type` value under
`evidenceRef` slot keeps the FIDES work first-class while leaving room for every `trust-annotations`'s open-ended `evidenceRef` slot, the FIDES work stays
other model to occupy the same slot. first-class while every other model can occupy the same slot.
## Relationship to SEP-1913 ## Relationship to SEP-1913
SEP-1913 remains the canonical place to discuss the overall problem framing. SEP-1913 remains the canonical place to discuss the overall problem framing.
This repo carves the schema-bearing parts of that proposal into independently This repository develops the schema-bearing parts of that proposal as
shippable pieces. When an extension here is ready to graduate, an Extensions independently shippable extensions. When an extension here is ready to graduate,
Track SEP can reference this repo as the prior art and the working an Extensions Track SEP can reference this repo as the prior art and the working
implementation that SEP-2133 [requires](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/2133-extensions.md#creation). implementation that SEP-2133 [requires](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/2133-extensions.md#creation).
For the full per-SEP plan — what happens to SEP-1913, SEP-2061, SEP-1862 and For the full per-SEP plan — what happens to SEP-1913, SEP-2061, SEP-1862 and
others, and the SEP-2127 refactor precedent — see others, and the SEP-2127 refactor precedent — see
[docs/sep-disposition.md](docs/sep-disposition.md). [docs/sep-disposition.md](docs/sep-disposition.md).
**Deliberately not carved here** (see [docs/open-questions.md](docs/open-questions.md)): **Out of scope for these extensions** (see [docs/open-questions.md](docs/open-questions.md)):
- **`maliciousActivityHint`** — reviewer concerns are structural (it fires at - **`maliciousActivityHint`** — reviewer concerns are structural (it fires at
`tools/resolve` before execution can produce evidence; a boolean is the wrong `tools/resolve` before execution can produce evidence; a boolean is the wrong
granularity for client UX; clients won't trust server self-attestation). If it granularity for client UX; clients won't trust server self-attestation). If it
returns, it is per-`ContentBlock` with spans, on a different clock. Parked on returns, it is per-`ContentBlock` with spans, on a different clock. It stays
the SEP-1913 umbrella as a known cut item. on the SEP-1913 umbrella rather than in an extension here.
- **Propagation rules** — sensitivity escalation across session boundaries, and - **Propagation rules** — sensitivity escalation across session boundaries, and
the sequence-shape gap (an annotation surface for "this was call N in a the sequence-shape gap (an annotation surface for "this was call N in a
flagged sequence") remain open. Likely a future extension once the taxonomy flagged sequence") remain open. Likely a future extension once the taxonomy

View file

@ -3,7 +3,7 @@
Append-only record of design decisions for the Tool Annotations IG's trust / Append-only record of design decisions for the Tool Annotations IG's trust /
privacy extension work. Newest at the bottom. privacy extension work. Newest at the bottom.
## 2026-06-10 — Carve SEP-1913 into independent extensions ## 2026-06-10 — Split SEP-1913 into independent extensions
**Decision.** Split the schema-bearing parts of SEP-1913 into separate **Decision.** Split the schema-bearing parts of SEP-1913 into separate
experimental extensions, each with its own `io.modelcontextprotocol/…` experimental extensions, each with its own `io.modelcontextprotocol/…`
@ -17,13 +17,13 @@ clock and avoid hard-to-remove schema.
## 2026-06-10 — Three initial extensions ## 2026-06-10 — Three initial extensions
**Decision.** `trust-annotations` (headline), `action-metadata`, `ifc-fides`. **Decision.** `trust-annotations` (primary), `action-metadata`, `ifc-fides`.
**Rationale.** These are the three pieces with either a reference implementation **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 or an existing SEP behind them: Kapil's SDK, SEP-2061 (Reichel), and the FIDES
model respectively. model respectively.
## 2026-06-10 — FIDES is a profile, not the headline ## 2026-06-10 — FIDES is a profile, not a top-level extension
**Decision.** Information-flow control is `type: "ifc.fides.v1"`, a profile of **Decision.** Information-flow control is `type: "ifc.fides.v1"`, a profile of
the `trust-annotations` `evidenceRef` slot — not a top-level `io.modelcontextprotocol/ifc` the `trust-annotations` `evidenceRef` slot — not a top-level `io.modelcontextprotocol/ifc`
@ -65,7 +65,7 @@ change.
## 2026-06-10 — Parked: maliciousActivityHint, propagation rules ## 2026-06-10 — Parked: maliciousActivityHint, propagation rules
**Decision.** Neither is carved into an extension now; both stay on the SEP-1913 **Decision.** Neither becomes an extension now; both stay on the SEP-1913
umbrella. umbrella.
**Rationale.** `maliciousActivityHint` has unresolved structural objections **Rationale.** `maliciousActivityHint` has unresolved structural objections

View file

@ -12,14 +12,14 @@ Kept here so it can be reviewed and stays in sync with
## For SEP-1913 ## For SEP-1913
> **Intent: split this SEP and migrate to the Extensions Track** > **Intent: split this SEP and migrate to the Extensions Track**
> > >
> A note on direction for everyone following this thread. When SEP-1913 was > A note on direction for everyone following this thread. When SEP-1913 was
> first framed, the **Extensions Track** (SEP-2133) and the `experimental-ext-*` > first framed, the **Extensions Track** (SEP-2133) and the `experimental-ext-*`
> incubation process didn't exist in their current form. They now do, and > incubation process didn't exist in their current form. They now do, and
> they're a better fit for this work than a single Standards Track SEP. > they're a better fit for this work than a single Standards Track SEP.
> > >
> Two things pushed us here: > Two things pushed us here:
> > >
> - @localden's review ask for a **narrower first cut** — the concern that a > - @localden's review ask for a **narrower first cut** — the concern that a
> broad taxonomy with array-or-scalar polymorphism is hard to remove or change > broad taxonomy with array-or-scalar polymorphism is hard to remove or change
> once it lands. > once it lands.
@ -27,26 +27,26 @@ Kept here so it can be reviewed and stays in sync with
> [May 28 decision](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2820) > [May 28 decision](https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/2820)
> to pursue trust/privacy as an **experimental extension first**, gather > to pursue trust/privacy as an **experimental extension first**, gather
> adoption evidence, then ask core maintainers to absorb anything. > adoption evidence, then ask core maintainers to absorb anything.
> > >
> So the plan is to **carve this proposal into a few small, > So the plan is to \*\*split this proposal into a few small,
> independently-shippable extensions**, each with its own > independently-shippable extensions\*\*, each with its own
> `io.modelcontextprotocol/…` identifier, reference implementation, and path to > `io.modelcontextprotocol/…` identifier, reference implementation, and path to
> an Extensions Track SEP. Incubation is in > an Extensions Track SEP. Incubation is in
> [`experimental-ext-tool-annotations`](https://github.com/modelcontextprotocol/experimental-ext-tool-annotations). > [`experimental-ext-tool-annotations`](https://github.com/modelcontextprotocol/experimental-ext-tool-annotations).
> > >
> Kicking off with a few draft extensions in the tool annotations repo — not > Kicking off with a few draft extensions in the tool annotations repo — not
> sure yet whether they'd each need separate repos eventually, or whether > sure yet whether they'd each need separate repos eventually, or whether
> grouping them in one is fine. That's part of what incubation is for. > grouping them in one is fine. That's part of what incubation is for.
> > >
> | Extension | Scope | > | Extension | Scope |
> |---|---| > |---|---|
> | `trust-annotations` | The narrow data-classification taxonomy (`sensitive`, `untrusted`) + an open-ended `evidenceRef` pointer for richer, out-of-band evidence. | > | `trust-annotations` | The narrow data-classification taxonomy (`sensitive`, `untrusted`) + an open-ended `evidenceRef` pointer for richer, out-of-band evidence. |
> | `action-metadata` | Tool I/O + outcome contract (folds in @rreichel3's SEP-2061). | > | `action-metadata` | Tool I/O + outcome contract (folds in @rreichel3's SEP-2061). |
> | `ifc-fides` | Information-flow control ([arXiv:2505.23643](https://arxiv.org/abs/2505.23643)) as **one profile** of `evidenceRef`, not a wire root — the public/private-repo confidentiality case, with github-mcp-server as an emitter example. | > | `ifc-fides` | Information-flow control ([arXiv:2505.23643](https://arxiv.org/abs/2505.23643)) as **one profile** of `evidenceRef`, not a wire root — the public/private-repo confidentiality case, with github-mcp-server as an emitter example. |
> > >
> Deliberately removed: `maliciousActivityHint` (the structural concerns raised > Deliberately removed: `maliciousActivityHint` (the structural concerns raised
> here are unresolved) and session-level propagation rules. > here are unresolved) and session-level propagation rules.
> > >
> This follows the same Standards-Track → Extensions-Track refactor pattern as > This follows the same Standards-Track → Extensions-Track refactor pattern as
> SEP-2127 (#2893). This PR will eventually pivot to the `trust-annotations` > SEP-2127 (#2893). This PR will eventually pivot to the `trust-annotations`
> piece itself, with the other schema-bearing pieces moving out into their own > piece itself, with the other schema-bearing pieces moving out into their own
@ -58,4 +58,4 @@ Kept here so it can be reviewed and stays in sync with
## For SEP-2061 (coordination note) ## For SEP-2061 (coordination note)
> @rreichel3 — carving this out into an independent extension as discussed: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1913#issuecomment-4675047154 > @rreichel3 — splitting this out into an independent extension as discussed: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1913#issuecomment-4675047154

View file

@ -36,7 +36,7 @@ Tracked here rather than in the spec drafts, so the drafts stay non-temporal.
- GitHub Enterprise `internal` repo visibility → public/private/reader-set - GitHub Enterprise `internal` repo visibility → public/private/reader-set
mapping (audience is the whole org, broader than collaborators). mapping (audience is the whole org, broader than collaborators).
## Parked (SEP-1913 umbrella, not carved) ## Parked (SEP-1913 umbrella)
- **`maliciousActivityHint`** — if it returns, it is per-`ContentBlock` with - **`maliciousActivityHint`** — if it returns, it is per-`ContentBlock` with
spans, driven by the host's own detection, not a server-attested boolean. spans, driven by the host's own detection, not a server-attested boolean.

View file

@ -5,7 +5,7 @@ annotation work. Several were surfaced in IG meetings (notably 2026-05-28).
## SEPs ## SEPs
- [SEP-1913 — Trust and Sensitivity Annotations](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1913) — the umbrella this work carves from. - [SEP-1913 — Trust and Sensitivity Annotations](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1913) — the umbrella proposal these extensions derive from.
- [SEP-2061 — Action Security Metadata](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2061) — carried forward as `action-metadata`. - [SEP-2061 — Action Security Metadata](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2061) — carried forward as `action-metadata`.
- [SEP-1862 — Tool Resolution / pre-flight checks](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1862) — core-protocol, composes with these extensions. - [SEP-1862 — Tool Resolution / pre-flight checks](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/1862) — core-protocol, composes with these extensions.
- [SEP-2133 — Extensions](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/2133-extensions.md) — the framework this repo incubates under. - [SEP-2133 — Extensions](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/seps/2133-extensions.md) — the framework this repo incubates under.

View file

@ -25,7 +25,7 @@ form. Two inputs since then point at a different shape:
adoption/evidence base, and only then ask core maintainers to absorb adoption/evidence base, and only then ask core maintainers to absorb
anything into the protocol. anything into the protocol.
The result: carve the schema-bearing parts into small, independent extensions, The result: split the schema-bearing parts into small, independent extensions,
each able to graduate on its own clock. each able to graduate on its own clock.
## The precedent: SEP-2127 (Server Cards) ## The precedent: SEP-2127 (Server Cards)
@ -50,7 +50,7 @@ We apply the same playbook below.
### SEP-1913 — Trust and Sensitivity Annotations ### SEP-1913 — Trust and Sensitivity Annotations
**Proposed:** becomes the **umbrella / problem-framing** thread. The schema- **Proposed:** becomes the **umbrella / problem-framing** thread. The schema-
bearing content is carved out into the extensions below. Options, in order of bearing content moves into the extensions below. Options, in order of
preference: preference:
- **(A, preferred)** Keep the PR open as the framing umbrella; add an intent - **(A, preferred)** Keep the PR open as the framing umbrella; add an intent
@ -62,8 +62,8 @@ preference:
- **(C)** Close 1913 outright and open three fresh Extensions Track SEPs. Loses - **(C)** Close 1913 outright and open three fresh Extensions Track SEPs. Loses
the discussion history's continuity; not preferred. the discussion history's continuity; not preferred.
**Carved out:** `trust-annotations`, `action-metadata`, `ifc-fides`. **Moved into extensions:** `trust-annotations`, `action-metadata`, `ifc-fides`.
**Parked on the umbrella (not carved):** `maliciousActivityHint`, **Parked on the umbrella:** `maliciousActivityHint`,
session-level propagation rules. See [open-questions.md](./open-questions.md). session-level propagation rules. See [open-questions.md](./open-questions.md).
### SEP-2061 — Action Security Metadata ### SEP-2061 — Action Security Metadata
@ -73,7 +73,7 @@ extension. SEP-2061 is by [@rreichel3](https://github.com/rreichel3), who is
also an IG co-facilitator and SEP-1913 co-author, so this is a fold-in, not a also an IG co-facilitator and SEP-1913 co-author, so this is a fold-in, not a
collision. Disposition mirrors 1913 option (A): keep the thread as the field- collision. Disposition mirrors 1913 option (A): keep the thread as the field-
semantics discussion, add a pointer comment linking it to the semantics discussion, add a pointer comment linking it to the
`action-metadata` carve, refactor to Extensions Track when ready. `action-metadata` extension, refactor to Extensions Track when ready.
### SEP-1862 — Tool Resolution (pre-flight checks) ### SEP-1862 — Tool Resolution (pre-flight checks)
@ -86,8 +86,8 @@ with it if it lands, but do not block on it.
### Other related SEPs (not owned here) ### Other related SEPs (not owned here)
- **SEP-1984 (Comprehensive Tool Annotations)**, **SEP-2417 (Model Preferences - **SEP-1984 (Comprehensive Tool Annotations)**, **SEP-2417 (Model Preferences
for Tools)** — tracked by the IG as discussion items; not part of this carve. for Tools)** — tracked by the IG as discussion items; not part of these
Cross-link only. extensions. Cross-link only.
- **SEP-2787 (Tool Call Attestation)** and the various attestation/evidence - **SEP-2787 (Tool Call Attestation)** and the various attestation/evidence
threads — these are natural `evidenceRef` *profile* candidates rather than threads — these are natural `evidenceRef` *profile* candidates rather than
competitors. Coordinate so the `evidenceRef.type` registry can list them. competitors. Coordinate so the `evidenceRef.type` registry can list them.
@ -96,7 +96,7 @@ with it if it lands, but do not block on it.
| SEP | Title | Proposed disposition | Extension home | | SEP | Title | Proposed disposition | Extension home |
| :-- | :-- | :-- | :-- | | :-- | :-- | :-- | :-- |
| 1913 | Trust & Sensitivity Annotations | Umbrella thread; carve schema out | `trust-annotations` (+ `ifc-fides`) | | 1913 | Trust & Sensitivity Annotations | Umbrella thread; schema moves to extensions | `trust-annotations` (+ `ifc-fides`) |
| 2061 | Action Security Metadata | Fold into extension | `action-metadata` | | 2061 | Action Security Metadata | Fold into extension | `action-metadata` |
| 1862 | Tool Resolution (pre-flight) | Stays core / Standards Track | — (composes, no dependency) | | 1862 | Tool Resolution (pre-flight) | Stays core / Standards Track | — (composes, no dependency) |
| 1984 | Comprehensive Tool Annotations | IG discussion item | — | | 1984 | Comprehensive Tool Annotations | IG discussion item | — |

View file

@ -26,17 +26,16 @@ protocol or into the `trust-annotations` wire surface.
## Why a profile ## Why a profile
An earlier sketch proposed information-flow control as a top-level extension Information-flow control is one enforcement model among several that reviewers
(`io.modelcontextprotocol/ifc`). That was the wrong cut. IFC is **one** of SEP-1913 raised — capability tokens, caller/tool cosigning, and
enforcement model among several that reviewers of SEP-1913 raised — capability sequence-shape audit records were all put forward. A top-level extension
tokens, caller/tool cosigning, and sequence-shape audit records were all put (`io.modelcontextprotocol/ifc`) would make the FIDES integrity × confidentiality
forward. Making the FIDES integrity × confidentiality lattice the namespace lattice the namespace root and silently foreclose those other models.
root would silently foreclose those.
Carrying it as a `type` value under the open-ended `evidenceRef` slot keeps the As a `type` value under the open-ended `evidenceRef` slot, the FIDES label is
FIDES work first-class while leaving the slot free for every other model. One first-class while the slot stays free for every other model. One reviewer's
reviewer's framing captured it: IFC "fits relatively well *if you use framing captured it: IFC "fits relatively well *if you use annotations*" — an
annotations*" — an endorsement of IFC as a profile, not as the wire root. endorsement of IFC as a profile, not as the wire root.
## Motivation ## Motivation

View file

@ -20,9 +20,10 @@ related:
This extension defines a small, stable, scheme-agnostic vocabulary for This extension defines a small, stable, scheme-agnostic vocabulary for
classifying **data in transit** through MCP tool results, plus an optional classifying **data in transit** through MCP tool results, plus an optional
`evidenceRef` pointer that lets a deployment attach richer, out-of-band `evidenceRef` pointer that lets a deployment attach richer, out-of-band
evidence without growing the on-wire schema. It is the headline extension of evidence without growing the on-wire schema. It is the primary
the Tool Annotations IG's trust work; other extensions (information-flow data-classification extension in the Tool Annotations IG's trust work; other
control, action metadata) compose with it rather than duplicating it. extensions (information-flow control, action metadata) compose with it rather
than duplicating it.
The design follows the [@localden](https://github.com/localden) review steer on The design follows the [@localden](https://github.com/localden) review steer on
SEP-1913 — take a *narrow first cut* of the taxonomy and avoid hard-to-remove SEP-1913 — take a *narrow first cut* of the taxonomy and avoid hard-to-remove