MCP Unrecognized field \"tools\

used cursor add mcp,

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.

Steps to Reproduce
bom version:1.0.0-M6

Run the example Spring AI MCP WebFlux server here: spring-ai-examples/model-context-protocol/weather/starter-webflux-server at main · spring-projects/spring-ai-examples · GitHub
Launch it
Add the server url under mcpServers (type: sse)
Launch the Cursor MCP Server
Log :
event:endpoint
data:/mcp/message

event:message
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”])”}}


You can compare it with something as simple as npx -y @modelcontextprotocol/server-memory which works

Thanks for bringing this up

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.

hello,Have you solved this problem? I have the same issue using spring to build the mcp service.However, I can call it normally on MCP Inspector.