-
Notifications
You must be signed in to change notification settings - Fork 161
Description
`
Description
On Claude Desktop for Windows (v2.1.22 / app 1.1.1520), the @modelcontextprotocol/server-filesystem server completes the full MCP handshake (initialize → tools/list) successfully, but subsequent tools/call messages are never sent by the client to the server. The server stays connected and healthy, but no file operations ever reach it.
This regression was introduced in Claude Desktop CCD v2.1.22. The same setup worked correctly on v2.1.20 and earlier.
Environment
Configuration (claude_desktop_config.json)
{
"mcpServers": {
"filesystem": {
"command": "node",
"args": [
"C:\\Users\\mandr\\AppData\\Roaming\\npm\\node_modules\\@modelcontextprotocol\\server-filesystem\\dist\\index.js",
"C:\\IA"
]
}
}
}Note: Using
nodedirectly instead ofnpxwas required as a workaround —npxcaused the stdio pipe to break entirely on this version of Claude Desktop. The original config used"command": "npx"with"-y"as the first arg.
Steps to Reproduce
- Install
@modelcontextprotocol/server-filesystemglobally:
npm install -g @modelcontextprotocol/server-filesystem- Configure
claude_desktop_config.jsonpointingcommandtonodeandargsto the installedindex.js+ allowed directory. - Open Claude Desktop. The server starts and the handshake completes successfully (visible in
mcp-server-filesystem.log). - Ask Claude to read or list any file/directory in the allowed path.
- Expected: A
tools/callmessage appears in the log and the server responds with file data. - Actual: No
tools/callis ever sent. The request hangs indefinitely on the client side. After ~20 minutes the server is disconnected withServer transport closed unexpectedly.
Logs
mcp-server-filesystem.log (relevant excerpt)
[filesystem] [info] Server started and connected successfully
[filesystem] [info] Message from client: {"method":"initialize",...,"id":0}
[filesystem] [info] Message from server: {"jsonrpc":"2.0","id":0,"result":{...}}
[filesystem] [info] Message from client: {"method":"notifications/initialized",...}
[filesystem] [info] Message from client: {"method":"tools/list",...,"id":1}
[filesystem] [info] Message from server: {"jsonrpc":"2.0","id":1,"result":{"tools":[...]}}
// ← Nothing after this. No tools/call ever arrives.
// ~20 min later:
[filesystem] [info] Server transport closed
[filesystem] [error] Server disconnected. Server transport closed unexpectedly, this is likely due to the process exiting early.main.log (relevant excerpt)
[info] Launching MCP Server: filesystem
[info] Checking if UtilityProcess should be used for extension filesystem
[warn] UtilityProcess Check: Extension filesystem not found in installed extensions
// ...
[info] [EventLogging] Sending event: desktop_mcp_unexpected_close | extension_name: 'filesystem'The warning
Extension filesystem not found in installed extensionsappears on every startup. This may be related — Claude Desktop may be failing to properly routetools/callmessages because it doesn't find the server registered as an extension internally.
mcp.log
Mirrors the same pattern: handshake completes, list_allowed_directories (id:2) is the only tools/call that occasionally goes through (likely due to timing — it fires within the first few seconds of connection). All subsequent calls are never dispatched.
Key Observations
- The server is healthy. Running it manually (
node index.js C:\IA) works perfectly — it responds to all commands when called directly. - Node.js has no I/O issues with the directory.
fs.readdirSync('C:\\IA')works fine from the command line. - The first tool call sometimes succeeds.
list_allowed_directorieswent through once, within ~23 seconds of connection. All subsequent calls hang. This suggests a race condition or timeout in Claude Desktop's MCP message routing after the initial handshake. - Regression in v2.1.22. The
main.loghistory shows the setup worked on CCD v2.1.20 and prior. The issue started after the automatic update to v2.1.22 on 2026-01-31. npxmakes it worse. When usingnpxas the command (default config), the stdio pipe breaks entirely and even the handshake fails. Usingnodedirectly is required but doesn't fully resolve thetools/calldispatch issue.
Expected Behavior
After a successful handshake, Claude Desktop should dispatch tools/call messages to the server for any filesystem operations requested by the user. The server should remain connected for the duration of the session.
Actual Behavior
tools/call messages are never dispatched after the handshake. The connection eventually times out and closes with an unexpected disconnect event.
Workaround
None that fully resolves the issue. Toggling the filesystem connector off/on in Claude Desktop's Connectors menu forces a reconnect, but the same timeout applies — only calls made within the first few seconds after reconnect have a chance of going through.
Additional Notes
- This issue may actually be a Claude Desktop client bug rather than a server bug. The server behaves correctly in all tests. The problem is that the client never sends the
tools/callafter handshake. - Consider also filing this against the Claude Desktop / Anthropic side, as the
UtilityProcesswarning and thedesktop_mcp_unexpected_closeevent suggest the issue is in how Claude Desktop manages MCP server lifecycle on Windows.