[BUG] Claude Desktop (Windows): tools/call never dispatched to filesystem MCP server after successful handshake — persists across all transports, server versions, and full reinstall

Status Closed — duplicate
Maintainer reply None cached
Activity 4 comments · opened Jul 22, 2026 · closed Aug 15, 2026

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?

On Claude Desktop for Windows (MSIX build 1.24012.1.0, installed at C:\Program Files\WindowsApps\Claude_1.24012.1.0_x64__pzs8sxrjxfjjc), the @modelcontextprotocol/server-filesystem MCP server completes the full handshake (initializetools/list) successfully, but tools/call messages are never dispatched by the client. The UI immediately shows Failed to call tool "...", and the failed calls leave no trace whatsoever in the server logs — the server never receives them.

This setup worked flawlessly on 2026-07-18/19 (20+ successful tools/call round-trips confirmed in mcp-server-files.log). It broke by 2026-07-22 with no configuration change on my side, which matches the auto-update window of the Desktop app.

Meanwhile, two other MCP servers configured in the same claude_desktop_config.json (Obsidian Local REST API, connected via npx mcp-remote over localhost HTTP) continue to work perfectly in the same chat sessions. Only the filesystem server is affected.

What Should Happen?

After a successful handshake, tools/call should be dispatched to the server, as it was until 2026-07-19.

Error Messages/Logs

**`mcp-server-files.log`** — identical pattern on every session since 07-22:
 

2026-07-22T13:09:26.233Z [files] [info] Server started and connected successfully
2026-07-22T13:09:26.692Z [files] [info] Message from client: method="initialize" id=0
2026-07-22T13:09:26.704Z [files] [info] Message from server: id=0 result
2026-07-22T13:09:26.978Z [files] [info] Message from client: method="notifications/initialized"
2026-07-22T13:09:26.979Z [files] [info] Message from client: method="tools/list" id=1
2026-07-22T13:09:26.983Z [files] [info] Message from server: id=1 result
// ← NOTHING after this. tools/call requested repeatedly from chat; none ever arrive.

 
For comparison, the same log on **2026-07-18** shows `tools/call` id=2 through id=20+ all succeeding within milliseconds, over more than an hour of use — ruling out any "first N seconds only" window at that time.
 
**`main.log`** — on every startup, for **all** servers (including the two that work):
 

[warn] UtilityProcess Check: Extension files not found in installed extensions
[warn] UtilityProcess Check: Extension obsidian not found in installed extensions
[warn] UtilityProcess Check: Extension obsidian-data not found in installed extensions

 
Since this warning also appears for the working servers, it is likely not the discriminating factor by itself, but it may be relevant to how `tools/call` routing decisions are made.

Steps to Reproduce

  1. Windows, Claude Desktop MSIX build 1.24012.1.0.
  2. npm install -g @modelcontextprotocol/server-filesystem (any version; 2026.1.14 and 2026.7.10 both reproduce).
  3. claude_desktop_config.json:
{
  "mcpServers": {
    "metisfs": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": [
        "C:\\Users\\USER\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js",
        "C:\\Users\\USER\\SOME_DIRECTORY"
      ]
    }
  }
}
  1. Restart Claude Desktop completely. Confirm handshake success in mcp-server-files.log (initialize → tools/list OK; tools are visible to the model).
  2. In any chat (new or existing), ask Claude to list the allowed directories or list files.
  3. Observe: instant Failed to call tool in the UI; no tools/call entry ever appears in the server log.

Claude Model

Other

Is this a regression?

Yes, this worked in a previous version

Last Working Version

Claude Desktop build prior to the 2026-07-20~22 auto-update (exact version unknown; current broken build is MSIX 1.24012.1.0). Server-side: @modelcontextprotocol/server-filesystem 2026.1.14 worked on 2026-07-18.

Claude Code Version

Not applicable — this is a Claude Desktop bug (app 1.24012.1.0)

Platform

Other

Operating System

Windows

Terminal/Shell

PowerShell

Additional Information

  • The failure is selective: two HTTP-remote MCP servers work in the same sessions while the filesystem server fails under every launch method including the identical HTTP-remote transport (test 7). This suggests the routing decision that drops tools/call is made per-server based on something other than transport, name, or server version — possibly interaction with the app's newer built-in file-access features (Cowork), e.g. tool-name or capability-level interception.
  • Happy to provide full logs (main.log, mcp-server-files.log, supergateway console output) on request.

View original on GitHub ↗

3 Comments

caelum29 · 1 month ago

Likely the same root cause as #79933: on Desktop 1.24012.x, any tool whose declared outputSchema contains the $schema meta-key is rejected client-side before dispatch — no tools/call ever reaches the server, no log trace on either side. Bisected there with a minimal probe server: adding "$schema":"http://json-schema.org/draft-07/schema#" to an otherwise-identical tool is alone sufficient to reproduce.

@modelcontextprotocol/server-filesystem declares outputSchema on its tools, and the MCP TypeScript SDK (via zod-to-json-schema) always emits the $schema key — while your working Obsidian servers evidently don't declare output schemas. That would explain exactly your split, and the timing matches the same auto-update window.

Quick check: run tools/list against the filesystem server directly — its tools carry "$schema" inside outputSchema. Servers you control can work around it by stripping that key from tools/list responses (verified fix in #79933).

paclw-cory · 1 month ago

Corroborating this on a second, independent Windows 11 machine — same signature, and I have some extra isolation evidence that points at the same per-surface routing theory.

Same core symptom: filesystem MCP server completes initialize → tools/list cleanly, then tools/call is never dispatched. UI shows an instant Tool execution failed; nothing appears in the server log after the successful tools/list. Confirmed against @modelcontextprotocol/server-filesystem launched via cmd /c npx -y.

Same timeline: worked reliably on 2026-07-18/19 (dozens of successful tools/call round-trips in the logs), broke by 2026-07-21/22 with no config change on my end — consistent with the Desktop auto-update window.

Additional data point — it's surface-specific, not server-specific. The exact same filesystem servers, same claude_desktop_config.json, work perfectly in Cowork and Claude Code in the same time period. Only chat fails to dispatch tools/call. So within one Desktop install, the identical server is reachable from the native-file-access surfaces but not from chat. That lines up with the OP's suspicion that the drop is a per-surface/capability-level routing decision introduced alongside the built-in file-access features (Cowork), rather than anything about the server, transport, or version.

Ruled out on my side (in case it saves anyone the afternoon it cost me):

Re-installing the app didn't help.

Not the npx cache. Not the server. Hand-launching the exact server at the terminal (npx -y @modelcontextprotocol/server-filesystem <path>) prints Secure MCP Filesystem Server running on stdio and runs fine.

Not Node/PATH. Single active toolchain, node -v/npm -v clean, server binary resolves and executes.

Not config. Multiple uniquely-keyed filesystem servers; handshake succeeds for all; all fail tools/call identically in chat while succeeding in Cowork/Code.

Happy to provide full main.log / per-server logs from this machine if a second set is useful. The key confirmation: two independent Windows machines, same handshake-then-silent-drop, and on both, Cowork/Code against the same servers are unaffected.

nancomicd · 1 month ago

@caelum29 Thank you — your root-cause analysis was exactly right for my case.

Confirmed on Windows 11, Desktop MSIX 1.24012.1.0: stripping $schema from outputSchema fully restores operation.

I inserted a minimal stdio wrapper between the client and @modelcontextprotocol/server-filesystem (2026.1.14) that deletes only the $schema key from each tool's outputSchema in outgoing tools/list results. Immediately after restart, tools/call is dispatched and completes normally — first successful calls since the 07-20~22 auto-update. No other changes (same server version, same config key, plain node.exe stdio launch, no supergateway).

One nuance vs. the Windows report in #79933 where stripping was NOT sufficient: my failure profile was different — tools were always surfaced to the model (visible in chat, each call failing instantly with "Failed to call tool"), whereas that report describes tools never surfacing at all. So on Windows 1.24012.x there appear to be (at least) two distinct failure modes: the $schema pre-dispatch rejection (fixable server-side, as on macOS) and a deeper "tools never surface" fault that stripping doesn't reach.

Hope this helps narrow the client-side fix. Happy to share the wrapper script or logs if useful.

(@paclw-cory's per-surface observation matches my setup too — only the chat surface was affected; the fix above restores chat specifically.)

Showing cached comments. Read the full discussion on GitHub ↗