Skip to content

[BUG] macOS: Claude Desktop never dispatches tools/call to the first-party Filesystem extension (tools/list succeeds, no tools/call in any log) #80002

Description

@evanhourigan

Preflight Checklist

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

What's Wrong?

On Claude Desktop for macOS (app 1.24012.1), the first-party Filesystem
connector (extension id `ant.dir.ant.anthropic.filesystem`) completes the
full MCP handshake (initialize -> notifications/initialized -> tools/list)
successfully, but tools/call messages are never dispatched to the server.

Every tool call fails instantly in the UI with "Failed to call tool
<name>". No tools/call entry ever appears in ~/Library/Logs/Claude/mcp.log,
mcp-server-Filesystem.log, or main.log. The request never becomes a message
on the transport. The server sits idle and healthy.

This is distinct from #22299 in one way that may matter: that report's
leading theory was the main.log warning "Extension filesystem not found in
installed extensions", i.e. Desktop failing to route calls for a server it
does not recognise as an installed extension. My case uses the first-party
Directory-installed extension, which IS registered, and reproduces the same
symptom. So the failure is not limited to manually configured stdio servers
in claude_desktop_config.json.

Began 2026-07-21 with no configuration change on my side. Allowed
directories and per-tool permissions are byte-identical to when it worked.

Related: #22299, #22319, #66726.

What Should Happen?

After a successful handshake, Claude Desktop should dispatch tools/call to
the Filesystem extension. If dispatch cannot be delivered, it should fail
with a distinct, logged error rather than a generic "Failed to call tool"
with zero trace on either side.

Error Messages/Logs

UI error:
    Failed to call tool "list_allowed_directories".
    Failed to call tool "list_directory".

    mcp.log — full lifecycle, healthy, and nothing after tools/list:

    [Filesystem] Initializing server...
    [Filesystem] Using built-in Node.js for MCP server: Filesystem
    [Filesystem] Server started and connected successfully
    [Filesystem] Message from client: method="initialize" id=0 params
    [Filesystem] Message from server: id=0 result
    [Filesystem] Message from client: method="notifications/initialized"
    [Filesystem] Message from client: method="tools/list" id=1 params
    [Filesystem] Message from server: id=1 result
    // <- nothing further. No tools/call ever arrives, despite repeated calls.

    main.log — app side also reports a clean, healthy connection:

    [info] MCP Server connection requested for: Filesystem
    [info] Launching MCP Server: Filesystem
    [info] Checking if UtilityProcess should be used for extension Filesystem
    [info] Using UtilityProcess for extension Filesystem: appConfig.isUsingBuiltInNodeForMcp is true and built-in node is compatible
    [info] [LocalMcpServerManager] Connected to Filesystem (14 tools)
    [info] [localMcpBridge] announcing Filesystem: 14 tool(s)
    [info] [UtilityProcess stderr] Secure MCP Filesystem Server running on stdio
    [info] [UtilityProcess stderr] Client does not support MCP Roots, using allowed directories set from server args: [ '/Users/evan/code', '/Users/evan/.claude' ]

    A grep of main.log for tool call errors returns nothing at all. There is no
    exception, no rejection, no dispatch attempt logged anywhere.

    Note: the extension reinstall bumped v2026.7.4 -> v2026.7.10. Both fail
    identically.

    Post-wipe, on the fresh install, the server is demonstrably healthy across
    repeated reconnects while calls continue to fail:

    2026-07-22T01:46:36.995Z [Filesystem] Initializing server...
    2026-07-22T01:46:37.018Z [Filesystem] Server started and connected successfully
    2026-07-22T01:46:37.302Z [Filesystem] Message from client: method="tools/list" id=1 params
    2026-07-22T01:47:23.159Z [Filesystem] Initializing server...
    2026-07-22T01:47:23.170Z [Filesystem] Server started and connected successfully
    2026-07-22T01:47:23.583Z [Filesystem] Message from client: method="tools/list" id=1 params
    2026-07-22T01:49:12.019Z [Filesystem] Initializing server...
    2026-07-22T01:49:12.023Z [Filesystem] Server started and connected successfully
    2026-07-22T01:49:12.317Z [Filesystem] Message from client: method="tools/list" id=1 params

    Server startup is consistently under 25ms and tools/list is answered in
    roughly 300ms. There is no tools/call anywhere in the file.

Steps to Reproduce

1. Claude Desktop for macOS, app 1.24012.1.
2. Install the first-party Filesystem connector from the Directory.
3. Configure two allowed directories, save. Confirm in mcp.log that the
   server initializes and answers tools/list.
4. Ask Claude to list a directory inside an allowed path, or simply
   re-enable the connector and let the app's own post-enable health probe
   of list_directory run.
5. Observe: instant "Failed to call tool". No tools/call in mcp.log,
   mcp-server-Filesystem.log, or main.log.

Note step 4: the app's OWN health probe of list_directory also fails on
re-enable, so this reproduces independent of any model-issued tool call.

Attempted and did NOT resolve it:
- Re-saving allowed directories
- Cycling per-tool permissions (all were already Always Allow)
- Toggling the connector off and on (clean re-init in the log each time)
- Uninstalling and reinstalling the extension (v2026.7.4 -> v2026.7.10)
- Full app restart
- Signing out of Claude Desktop and back in
- Closing all claude.ai browser tabs, then signing out of claude.ai
- Full wipe: Application Support/Claude, Logs/Claude,
  Caches/com.anthropic.claudefordesktop(+.ShipIt),
  Preferences/com.anthropic.claudefordesktop.plist,
  HTTPStorages/com.anthropic.claudefordesktop, then reinstall from
  claude.ai/download

Control: a non-Filesystem connector call in the same session dispatched and
returned a valid result, so the session itself was able to execute tools.

Claude Model

Opus

Is this a regression?

Yes, this worked in a previous version

Last Working Version

Last working: app 1.22209.3     Broken: app 1.24012.1      Version history from main.log:     1.20186.0 -> 1.20186.9 -> 1.21459.0 -> 1.21459.3 -> 1.22209.3 -> 1.24012.1      The break began 2026-07-21 with no configuration change on my side, and     1.24012.1 is the build in place when it started. Claude Desktop     auto-updates on quit and restart, so the update was not a deliberate     action on my part and there is no supported way to roll back.

Claude Code Version

Not applicable — this is Claude Desktop's MCP client, not Claude Code.     Claude Desktop app 1.24012.1, Electron 42.7.0.     (Claude Code CLI on the same machine is healthy and unaffected.)

Platform

Other

Operating System

macOS

Terminal/Shell

iTerm2

Additional Information

Key observations:

1. The server is healthy at every stage: starts, loads both allowed
   directories, answers tools/list in single-digit milliseconds.
2. The failure is instant, not a timeout. This is not the ~4-minute hang
   described in #66726.
3. Zero diagnostic signal. No tools/call on the server side, and no error,
   rejection or dispatch attempt on the app side. The generic UI string is
   the only evidence the call happened at all.
4. The app's own post-enable health probe fails the same way, so this is
   not specific to model-issued calls.
5. Unlike #22299, this is a first-party Directory-installed extension, so
   "not found in installed extensions" does not explain it.
6. Survives a complete wipe and reinstall of the app and all of its
   local state, which suggests state outside the app bundle and
   Application Support, or a server-side extension registration.
7. Post-wipe, on a completely fresh install with a newly installed
   extension, a list_allowed_directories call issued inside the ~23-second
   window described in #22299 ALSO failed, twice consecutively. So the
   narrow post-handshake window is not a workaround in this case, and the
   failure is not a race against a warm-up period.

Impact: the connector is the primary path for a working file-editing
workflow. Losing dispatch with no error surface makes it undiagnosable from
the user side.

main.log
cowork_vm_node.log
cowork_vm_swift.log
claude.ai-web.log
coworkd.log
swift.log
mcp.log
mcp-server-Filesystem.log
vzgvisor.log
unknown-window.log
ssh.log
chrome-native-host.log
main1.log

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions