Skip to content

prototype: align SDK + examples with the proposed SEP - #20

Open
helloeve wants to merge 5 commits into
modelcontextprotocol:mainfrom
helloeve:prototype
Open

helloeve wants to merge 5 commits into
modelcontextprotocol:mainfrom
helloeve:prototype

Conversation

@helloeve

Copy link
Copy Markdown
Contributor

A reference prototype for the SEP (#19)

SDK (sdk/typescript)

  • groups/list and groups/get with typed Tool/Prompt/Resource/nested-group contents; unknown groups return -32002.

Examples (examples/)

  • client/server over stdio exercising all three group shapes (toolset, knowledge bundle, instructions-led workflow);
  • an agent that discloses scoped tools cache-safely and prints a per-turn prompt-cache report;
  • a Claude Code mod that allows Claude Code to talk to an MCP server supporting groups SEP

Add the draft SEP for the io.modelcontextprotocol/groups extension
(progressive disclosure via activatable groups) and link it from the
documentation table.
Change-notification rationale now points to SEP-3371 as the reason push
notification should not extend the core subscriptions/listen filter.
- Rebuild the prototype on top of the current groups SEP (origin/sep).
- Drop the removed listChanged capability flag and the stale list_changed
  reference in the examples README.
- Return JSON-RPC -32002 (Resource not found) for unknown groups/get names,
  matching the SEP.
- Drop CacheableResult/ttlMs/cacheScope: not in the released base SDK
  (@modelcontextprotocol/sdk 1.27.x); revisit when the SDK adopts the draft
  caching attributes.
- Scrub 'activatable/activated' wording (activation is client-side).

**Relationship to SEP-2084.** This is distinct from [SEP-2084]'s primitive
grouping, which modeled group membership as static metadata for client-side
filtering. The distinguishing mechanic here is *on-demand, server-scoped

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We haven't discussed this point in the group yet. I think this is probably worth spending more time on. I see the value proposition from it, but I also find it confusing.

different client (see [Graceful Degradation](#graceful-degradation)).

**Placement.** Within a view, every tool, prompt, and resource a server offers has
exactly one placement: it is either **top-level**, listed in `tools/list`,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems incompletely specified. If group G has children tool T and group G', can T be present in G'.
I think we also need to define this recursively somehow: the base view should also be considered a group and we go from there.

every group that includes it. Guidance that applies to only one workflow belongs
in that group's instructions, not in the primitive's description.

**Instruction references.** Group instructions may name a primitive in one of two

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this should be part of the SEP. Seems overreaching on part of the protocol


#### Discovery gating is not access control

Scoping a tool controls whether it can be **discovered**, not whether it can be

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Follows directly from stateless servers right?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants