There is indeed a ‘tools’ field under ‘capabilities’.
However, according to the MCP specification on Capabilities negociation , the client should not have a ‘tools’ field as ‘capabilities’, since it is up to the server to set them.
However the McpSchema.ClientCapabilities class is compliant with the MCP spec and doesn’t include a “tools” field. The issue appears to be that Cursor is sending non-compliant JSON with extra fields not in the specification.
The error:
data:{"jsonrpc":"2.0","id":0,"error":{"code":-32603,"message":"Unrecognized field "tools" (class io.modelcontextprotocol.spec.McpSchema$ClientCapabilities), not marked as ignorable (3 known properties: "experimental", "roots", "sampling"])\n at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: io.modelcontextprotocol.spec.McpSchema$InitializeRequest["capabilities"]->io.modelcontextprotocol.spec.McpSchema$ClientCapabilities["tools"])"}}
occurs because Cursor is sending a tools field in the capabilities object that is not compliant with the spec and the receiving system doesn’t recognize.
The core issue is with Cursor’s client implementation, not our client-side code.
Is that error from your server or from Cursors client?
I would strongly guess that tools are the most supported capabilities, not much else for now. I read that Cursor is working on resources and perhaps more.