[BUG] Desktop Code tab: resumed session drops claude.ai connector tool schemas, array/number arguments sent as strings (-32602)
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
- In the desktop app Code tab, start a session and call an Asana tool with an array argument (
create_taskswithtasks: [...]). It succeeds. - Leave the session idle until the app stops its process (about an hour), or let the app install a CLI update, or press Restart.
- Send a message that calls the same tool with the same shape.
- Observe
expected array, received string. ToolSearch on the tool returns{"type":"object"}with no properties. - 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)
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗