Repository navigation
Conversation
…ation Gives MCP extensions a place on each remote to publish information a client needs before connecting (e.g. webhook signing keys for SEP-3415 Events). Entries are not a declaration of extension support; support is negotiated via server/discover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BzSw9zenmbDjJXgmtp94Pv
poita
marked this pull request as ready for review
October 26, 2026 10:49
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
ext-server-card | 76c9875 | Oct 26 2026, 10:46 AM |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds an optional
extensionsmap toRemote, giving MCP extensions a place to publish server-level information in the Server Card — data a client needs before any session exists.Keys are extension identifiers following the
_metakey naming rules (e.g.io.modelcontextprotocol/events); values are objects whose contents are defined by each extension. The map shape matchesServerCapabilities.extensions, andJSONValue/JSONObject/JSONArrayare inlined verbatim from the core schema alongside the existing inlinedMetaObjectandIcon.This is not a declaration of extension support. The presence or absence of an entry says nothing about whether the server supports that extension, and an entry need not match
capabilities.extensions. Support is negotiated viaserver/discover, which may vary per user.docs/discovery.mdstates this normatively (clients MUST NOT infer support from the card).Motivation
From the
tasks-events-wgdiscussion of SEP-3415 (Events): webhook receivers need the server's ed25519 signing keys (a JWK set) and, optionally, egress IP ranges from an origin they already trust. The agreed home is:This PR only adds the generic container; the contents of each entry are defined by the extension itself (SEP-3415 for events).
Changes
schema.ts:Remote.extensions?: { [key: string]: JSONObject }, plus inlined JSON types;schema.jsonregenerated.docs/discovery.md: clarify thatextensionscarries extension-defined information, not support, and that clients MUST NOT infer support from it.README.md: mention server-level extension information in the remote-endpoint bullet.valid/remote-extensions.json(illustrative events/webhooks entry) andinvalid/non-object-extension-info.json(entries must be objects).Compatibility
Additive and optional; existing cards remain valid.
Note: the generated
JSONValue(string | integer | boolean, nonull) is identical to the coreschema/draft/schema.jsonoutput fromtypescript-json-schemawith--defaultNumberType integer; kept identical to core rather than diverging here.Verification
npm run check— schema.json in sync,tscpassesnpm run validate— all 9 examples pass; the new invalid example was confirmed to be (wrongly) accepted before the schema changenpm run format:check🤖 Generated with Claude Code
https://claude.ai/code/session_01BzSw9zenmbDjJXgmtp94Pv