
# Extensions

> Advertise capabilities beyond the core spec.

Extensions let a server declare optional, namespaced functionality in `ServerCapabilities.extensions`. Identifiers require a reverse-DNS prefix.

```ts
defineMcpHandler({
  name: "my-server",
  version: "1.0.0",
  extensions: { "io.modelcontextprotocol/tasks": {} },
  tools: [/* ... */],
});
```

The map is echoed verbatim on [`server/discover`](/guide/modern/discovery), 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](https://modelcontextprotocol.io/specification/2026-07-28) 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.
