mcp: add Capabilities fields to ServerOptions and ClientOptions (#713)
This allows users to configure default capabilities, disable defaults, or suppress listChanged notifications by setting ListChanged: false. Key changes: - Add ServerOptions.Capabilities and ClientOptions.Capabilities fields. - Merge user-provided capabilities with dynamically-added ones (tools, prompts, resources, sampling, elicitation). - Check ListChanged before sending list-changed notifications. - Deprecate HasPrompts, HasResources, HasTools on ServerOptions. - Remove unreleased ElicitationModes field from ClientOptions. - Add clone methods to capability structs using shallowClone helper. - Add synctest-based tests for notification behavior (go1.25). - Add TestClientCapabilitiesOverWire and TestServerCapabilitiesOverWire - Document the new Capabilities API in docs/ Updates #706
This commit is contained in:
parent
bae0929820
commit
3430e2242e
1 changed files with 1071 additions and 57 deletions
|
|
@ -243,6 +243,53 @@ Call [`ClientSession.SetLevel`](https://pkg.go.dev/github.com/modelcontextprotoc
|
|||
|
||||
%include ../../mcp/server_example_test.go logging -
|
||||
|
||||
## Capabilities
|
||||
|
||||
Server capabilities are advertised to clients during the initialization
|
||||
handshake. By default, the SDK advertises only the `logging` capability.
|
||||
Additional capabilities are automatically added when features are registered
|
||||
(e.g., adding a tool adds the `tools` capability).
|
||||
|
||||
### Capability inference
|
||||
|
||||
When features such as tools, prompts, or resources are added to the server
|
||||
(e.g., via `Server.AddTool`), their capability is automatically inferred, with
|
||||
default value `{listChanged:true}`. Similarly, if the
|
||||
`ServerOptions.SubscribeHandler` or `ServerOptions.CompletionHandler` are set,
|
||||
the corresponding capability is added.
|
||||
|
||||
### Explicit capabilities
|
||||
|
||||
To explicitly declare capabilities, or to override the [default inferred
|
||||
capability](#capability-inference), set
|
||||
[`ServerOptions.Capabilities`](https://pkg.go.dev/github.com/modelcontextprotocol/go-sdk/mcp#ServerOptions.Capabilities).
|
||||
This sets the default server capabilities, before any capabilities are added
|
||||
based on configured handlers. If a capability is already present as a field in
|
||||
`Capabilities`, adding a feature or handler will not change its configuration.
|
||||
|
||||
This allows you to:
|
||||
|
||||
- **Disable default capabilities**: Pass an empty `&ServerCapabilities{}` to
|
||||
disable all defaults, including logging.
|
||||
- **Disable listChanged notifications**: Set `ListChanged: false` on a
|
||||
capability to prevent the server from sending list-changed notifications
|
||||
when features are added or removed.
|
||||
- **Pre-declare capabilities**: Declare capabilities before features are
|
||||
registered, useful for servers that load features dynamically.
|
||||
|
||||
```go
|
||||
// Disable listChanged notifications for tools
|
||||
server := mcp.NewServer(impl, &mcp.ServerOptions{
|
||||
Capabilities: &mcp.ServerCapabilities{
|
||||
Logging: &mcp.LoggingCapabilities{},
|
||||
Tools: &mcp.ToolCapabilities{ListChanged: false},
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
**Deprecated**: The `HasPrompts`, `HasResources`, and `HasTools` fields on
|
||||
`ServerOptions` are deprecated. Use `Capabilities` instead.
|
||||
|
||||
### Pagination
|
||||
|
||||
Server-side feature lists may be
|
||||
|
|
|
|||
Loading…
Reference in a new issue