MCP deferred tool loading returns empty parameter schemas, breaking parameterized tools
Resolved 💬 3 comments Opened Mar 16, 2026 by dhasson04 Closed Mar 20, 2026
Bug Description
When MCP tools are loaded via deferred tool loading (ToolSearch), the returned schemas have empty properties: {} regardless of the actual inputSchema defined by the MCP server. This causes all parameters passed to MCP tools to be stripped before reaching the server, making any tool that requires parameters unusable.
Steps to Reproduce
- Create an MCP server that registers tools with
inputSchemacontaining required parameters (e.g.task_id: { type: 'string' }) - Connect it to Claude Code via
.mcp.json - When Claude invokes the tool via deferred loading, ToolSearch returns:
``json``
{"name": "mcp__my-server__get_task", "parameters": {"properties": {}, "type": "object"}}
- Any parameters passed in the tool call are stripped — the MCP server receives an empty
paramsobject
Expected Behavior
ToolSearch should return the full inputSchema from the MCP server's tool registration, e.g.:
{
"name": "mcp__my-server__get_task",
"parameters": {
"type": "object",
"properties": {
"task_id": { "type": "string", "description": "Task UUID" }
},
"required": ["task_id"]
}
}
Actual Behavior
- ToolSearch always returns
"properties": {}for MCP tools - Parameters are silently dropped
- The MCP server receives empty params, causing downstream failures
- Tools that don't require parameters (e.g.
list_tasks) work fine, masking the issue
Impact
- All parameterized MCP tools are broken — get, update, delete, move operations all fail
- Only parameterless tools (list operations) work
- Workaround: bypass MCP tools entirely and use direct API calls via curl
Environment
- Claude Code CLI
- MCP server using
@modelcontextprotocol/sdkwith stdio transport - Tools registered via
server.tool()with standard JSON SchemainputSchema
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗