[BUG] Desktop Code tab: resumed session drops claude.ai connector tool schemas, array/number arguments sent as strings (-32602)

Status Open
Reported on v2.1.258
Maintainer reply None cached
Activity 2 comments · opened Sep 2, 2026

What's wrong

The Claude desktop app (Code tab) kills a session's CLI process when the session idles for roughly an hour and whenever it installs a new CLI build, then relaunches it with --resume=<session id> on the next message. The Restart button does the same. In the resumed process, the claude.ai connector tools come back with an empty parameter schema (ToolSearch shows {"type":"object"} with no properties). With no type information the client stringifies every argument, so any tool with an array or number parameter fails server-side validation:

MCP error -32602: Input validation error: Invalid arguments for tool create_tasks: [
  { "expected": "array", "code": "invalid_type", "path": ["tasks"], "message": "Invalid input: expected array, received string" } ]

Tools with only string parameters keep working, which hides the fault. Gmail and Calendar calls in the first minutes after a resume also return Tool execution failed. You can try again. (anthropic_error_code: mcp_unclassified). A session created fresh gets full schemas and works first time.

This is the same client-side rule confirmed in #82652 (empty parameter schema leads to a stringified argument) and described for deferred tools in Cowork in a comment on #32524. The new information here is the trigger: the resume path in the desktop app delivers the connector tools without schemas for the whole process lifetime.

Evidence (JSONL transcripts on disk, times UTC, 2026-09-02)

| Session | Good call | Break between | First bad call |
| --- | --- | --- | --- |
| A | 9 create_tasks/update_tasks calls with real arrays succeeded 17:29 to 17:47 | idle 18:10 to 18:59; SessionStart:resume hook fired 18:59:07 | 19:00:00 tasks sent as a string, fails; Restart at 19:05 (another resume) still failing 19:06 |
| B | ToolSearch at 14:59 on CLI 2.1.255 | process replaced by CLI 2.1.258 (installed 15:28) | 16:03 tasks as string, fails; stayed broken 45 min; a restart at 16:48 happened to come back clean |
| C | get_my_tasks with limit: 60 at 11:37 on 2.1.246 | resumed 18:00 on 2.1.258 | 18:02 limit: "70" fails; Gmail search_threads "Tool execution failed" twice at 18:09, works at 18:40 |
| D (2026-08-31) | arrays OK on 2026-08-28 | three-day gap, resume on 2.1.247 | 11:41 update_tasks string, fails |

Six sessions created fresh on 2026-09-02 wrote arrays correctly on the first attempt. Earliest occurrence in this account's transcripts: 2026-08-09 on CLI 2.1.222 (get_my_tasks with limit: "60").

Live processes confirm the model: the two affected sessions run as claude ... --resume=<id>; the unaffected one has no --resume flag.

Environment

  • Claude desktop app 1.44121.1, macOS 26.6 (Darwin 25.6.0)
  • Bundled CLI 2.1.255 and 2.1.258 (also seen on 2.1.222 and 2.1.247)
  • Connectors: Asana, Gmail, Google Calendar via claude.ai connectors, surfaced as mcp__<uuid>__<tool>
  • Model: Opus 5 (also Fable 5.1)

Steps to reproduce

  1. In the desktop app Code tab, start a session and call an Asana tool with an array argument (create_tasks with tasks: [...]). It succeeds.
  2. Leave the session idle until the app stops its process (about an hour), or let the app install a CLI update, or press Restart.
  3. Send a message that calls the same tool with the same shape.
  4. Observe expected array, received string. ToolSearch on the tool returns {"type":"object"} with no properties.
  5. Create a new session and repeat step 1. It succeeds.

Expected

A resumed process should receive the same tool definitions, including inputSchema, as a fresh one, or the client should refuse to dispatch a call for a tool whose schema has not loaded rather than stringifying the arguments.

Related

  • #82652 MCP tool arguments are stringified when the parameter's schema is empty (open, reproduced)
  • #32524 type: number parameters sent as strings (closed stale; comment of 2026-05-31 describes the deferred-tool first-call variant in Cowork)
  • #84189 deferred tool schemas not restored after context compaction (open)
  • #78237 Cowork/Desktop strips schema nodes and stringifies arguments, regression pinned to a desktop build (open)
  • #18260 $ref parameters serialised as strings (open since January)

View original on GitHub ↗

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