[Bug]: compatibility problem between the mongo-mcp server implementation and the MCP SDK's
Closed this issue · 1 comments
Version
1.9.4
App
- Cursor
- Windsurf
- VSCode
- VSCode Insiders
- Claude Desktop
- Other
Affected Models (if applicable)
- Claude 3.5 Sonnet
- Claude 3.7 Sonnet
- GPT-4a
- o4-mini
- Other
Bug Description
Summary
The mongo-mcp server returns tool responses in a format that is incompatible with the MCP SDK's expected CallToolResult schema, causing a Pydantic validation error when trying to use the server with standard MCP clients.
Environment
- MCP SDK Version: Latest (as of June 2024)
- mongo-mcp Version: Latest from npx
- Python Version: 3.x
- Platform: Windows/Linux/MacOS
Steps to Reproduce
- Set up a MongoDB connection (local or Atlas)
- Create an MCP client configuration:
{
"mcpServers": {
"mongodb": {
"command": "npx",
"args": [
"mongo-mcp",
"mongodb+srv://user:pass@cluster.mongodb.net/database"
]
}
}
}- Use any MCP SDK-based client to connect and call a tool:
from mcp import ClientSession
# ... setup code ...
result = await session.call_tool("listCollections", {})Expected Behavior
The tool call should return a valid CallToolResult object that the MCP SDK can process.
Actual Behavior
The call fails with a Pydantic validation error:
pydantic_core._pydantic_core.ValidationError: 1 validation error for CallToolResult
content
Field required [type=missing, input_value={'toolResult': {'content'...]'}], 'isError': False}}, input_type=dict]
Root Cause Analysis
The mongo-mcp server returns responses in this format:
{
"result": {
"toolResult": {
"content": "actual content here"
},
"isError": false
}
}But the MCP SDK expects this format:
{
"content": [
{
"type": "text",
"text": "actual content here"
}
]
}Debug Logs
From client debug output:
2025-06-24 00:02:52,339 - __main__ - ERROR - Error calling tool find: 1 validation error for CallToolResult
content
Field required [type=missing, input_value={'toolResult': {'content'...]'}], 'isError': False}}, input_type=dict]
Workaround
Currently, the only workaround is to create a patched client session that intercepts and transforms the response:
class PatchedClientSession(ClientSession):
async def call_tool(self, name: str, arguments: Dict[str, Any] = {}) -> CallToolResult:
request = CallToolRequest(
method="tools/call",
params={"name": name, "arguments": arguments}
)
response = await self._send_request(request)
# Transform mongo-mcp response to MCP SDK format
if isinstance(response, dict) and 'result' in response:
result_data = response['result']
if 'toolResult' in result_data:
content = result_data['toolResult'].get('content', '')
return CallToolResult(content=[{"type": "text", "text": content}])
# Fallback
return CallToolResult(content=[{"type": "text", "text": str(response)}])Proposed Solutions
- Update mongo-mcp server to return responses in the MCP SDK's expected format
- Add compatibility layer in the MCP SDK to handle different response formats
- Document the expected response format clearly in the MCP specification
Impact
This issue prevents any MCP SDK-based client from working with the mongo-mcp server, affecting all users trying to integrate MongoDB with MCP-compatible applications.
Additional Context
- The issue affects all tool calls (listCollections, find, insertOne, etc.)
- Other MCP servers (like
mongodb-mcp-server) may use the correct format - This appears to be a protocol mismatch rather than a bug in either component
Hi @ShivamSingh110 ,
We do not maintain mongo-mcp, it's a different server from the community. How to configure the mongodb-mcp-server is here: https://github.com/mongodb-js/mongodb-mcp-server?tab=readme-ov-file#option-1-connection-string-args
I'll close the ticket, please open an issue in mongo-mcp to get their help: https://github.com/QuantGeekDev/mongo-mcp