[BUG] MCP server exposes API-specific 'strict' field in tool schemas, breaking Claude Desktop compatibility

Resolved 💬 2 comments Opened Nov 2, 2025 by samsoro Closed Nov 10, 2025

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Claude Code MCP Server Exposes API-Specific Fields
Six tools have "strict": true in their schemas:
Bash, Edit, Grep, Read, TodoWrite, Write
This field is NOT part of MCP spec - it's Anthropic API-specific. Claude Desktop's MCP client rejects these non-standard schemas, resulting in "No tools available."

What Should Happen?

claude mcp serve should expose MCP-compliant tool schemas by automatically stripping Anthropic API-specific fields before sending the tools/list response.

Specifically:

  1. Remove "strict": true field from all tool inputSchema definitions
  2. Strip any other API-specific fields (e.g., cacheControl)
  3. Return only standard JSON Schema fields as defined in the MCP specification

Expected result:

  • Claude Desktop successfully validates and registers all 13 tools
  • Tools become available in the UI
  • MCP server toggle can be enabled
  • Tools can be invoked normally

The MCP server should maintain internal API-specific schemas for its own use, but transform them to pure JSON Schema when exposing via the MCP protocol.

Error Messages/Logs

Steps to Reproduce

Environment:

  • OS: Windows 11 with WSL (Ubuntu)
  • Claude Code: 2.0.31 (in WSL)
  • Claude Desktop: 1.0.211 (Windows)

Steps:

  1. Install Claude Code in WSL:
   npm install -g @anthropic-ai/claude-code
  1. Configure Claude Desktop's claude_desktop_config.json:
   {
     "mcpServers": {
       "claude-code-executor": {
         "command": "wsl",
         "args": ["claude", "mcp", "serve"]
       }
     }
   }
  1. Restart Claude Desktop
  1. Open Settings → Developer → Connectors
  1. Observe the issue:
  • claude-code-executor appears in the list
  • Toggle is gray and cannot be enabled
  • Clicking the row shows "No tools available"

Verification:

Check the MCP server log at:
%APPDATA%\Claude\logs\mcp-server-claude-code-executor.log

The log shows:

  • Protocol handshake succeeds ✓
  • All 13 tools returned in tools/list response ✓
  • Tool schemas contain "strict":true field (line search confirms 6 tools affected)

Expected: Tools should be available and toggle should turn blue
Actual: "No tools available" and toggle stays gray

Root Cause: The "strict":true field causes Claude Desktop's MCP client to reject the tool schemas during validation.

Claude Model

None

Is this a regression?

I don't know

Last Working Version

_No response_

Claude Code Version

2.0.31 (Claude Code)

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

<img width="493" height="63" alt="Image" src="https://github.com/user-attachments/assets/ad7d7909-d7e8-4425-924f-e62cbd86d37e" />

<img width="508" height="118" alt="Image" src="https://github.com/user-attachments/assets/73f29792-5f2c-4eb8-9b51-a629855be745" />

// claude_desktop_config.json
{
"mcpServers": {
"claude-code-executor": {
"command": "wsl",
"args": ["claude", "mcp", "serve"]
}
}
}


**Key log excerpt** showing the `"strict":true` field:

From mcp-server-claude-code-executor.log:
{"name":"Bash","strict":true,"description":"...
{"name":"Edit","strict":true,"description":"...
{"name":"Grep","strict":true,"description":"...


**Additional context:**

All other MCP servers (filesystem, secure-dev-manager, project-state, discovery-knowledge) work correctly with blue toggles. Only claude-code-executor fails, confirming this is specific to Claude Code's MCP implementation.

The MCP server log shows successful protocol handshake and complete tools/list response (63KB), but Claude Desktop UI displays "No tools available" when the connector row is clicked.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗