Extensions
Advertise capabilities beyond the core spec.
Extensions let a server declare optional, namespaced functionality in ServerCapabilities.extensions. Identifiers require a reverse-DNS prefix.
defineMcpHandler({
name: "my-server",
version: "1.0.0",
extensions: { "io.modelcontextprotocol/tasks": {} },
tools: [/* ... */],
});The map is echoed verbatim on server/discover, so the value can carry extension-specific configuration rather than just {}.
Extensions are negotiated by advertisement only: if one side lacks an extension, the other must fall back to core behavior or return an error. Never assume a client understands one because it connected.
Note
extensions is capability plumbing. Declaring io.modelcontextprotocol/tasks advertises the Tasks extension but does not implement tasks/* — h3-mcp does not ship those methods yet. Only advertise what you actually serve.
Extensions are a modern-era concept: the field is absent from the legacy initialize response.