You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have searched existing requests and this feature hasn't been requested yet
This is a single feature request (not multiple features)
Problem Statement
Claude Code's MCP client enforces a hard 60-second timeout on tool calls (DEFAULT_REQUEST_TIMEOUT_MSEC = 60000 in the TypeScript SDK) and silently ignores user-side timeout configuration in the Desktop / Cowork path. There is also no client-side support for async / background tool calls.
Combined, these three constraints make it structurally impossible to build MCP servers whose operations can legitimately exceed 60s against Cowork. The affected class of operations is broad: publisher API fetches, PDF download and parsing, model inference, bulk data pulls, long-running analyses, and anything with variable upstream latency. From the user's perspective, this surfaces as opaque "tool timed out after 60s" errors with no recovery path other than retry-and-hope.
This is not a server-side performance problem. No amount of server optimization fixes it when the ceiling is on the client. The MCP community's standardized answer to this class of problem — SEP-1686 (Tasks), accepted into the MCP spec in November 2025 — is not implemented in Claude Code's client.
Proposed Solution
Implement SEP-1686 (Tasks) in Claude Code's MCP client:
Recognize a server's declaration that a tool returns a taskId rather than a synchronous result.
Poll (or subscribe to) task status per the SEP.
Surface task progress to the agent loop in a way the agent can reason about (e.g., as a tool result that carries status: running until completion and the final payload when the task finishes).
Apply the 60s timeout to the underlying RPC call, not to the task. Tasks are expected to run beyond the RPC timeout — that's the whole point.
This is a strictly additive change to the client. Existing synchronous tools continue to work unchanged; servers opt in per-tool. It does not require changing the default synchronous tool-call timeout and is independent of whether that timeout ever becomes configurable.
Progress-notification keepalive — some MCP clients reset the request deadline on progress pings. Reports suggest this is unreliable in the TypeScript SDK path that Claude Code uses (see MCP Server Timeout Configuration Ignored in SSE Connections #3033). Even if it worked, it's a workaround layered on top of a synchronous RPC rather than a first-class async model.
Server-side start_* + get_* tool pairs — this is what server authors are doing today as a workaround. It works, but pushes the async pattern into every server's public API with no standard shape, doubling the tool surface and asking every agent to re-implement the same polling loop. SEP-1686 is the standardized version of exactly this workaround; implementing it client-side would let servers retire their ad-hoc polling tools.
SEP-1699 (SSE polling) — transport-level resumability. Orthogonal to the timeout problem; doesn't help because the 60s limit is enforced above the transport.
Priority
High - Significant impact on productivity
Feature Category
MCP server integration
Use Case Example
Building an MCP server for literature search and paper acquisition, exercising it from Cowork:
acquire_paper calls against Nature-family DOIs (publisher-hosted PDFs) reliably time out at 60s. Success depends on whether the publisher CDN happens to return the full PDF inside the 60s window, which is nondeterministic — one retry succeeded, four others timed out in the same session.
acquire_paper against arXiv abstract URLs (e.g. https://arxiv.org/abs/2604.02511) also timed out at 60s in the same session.
The failure mode the user sees is MCP server "…" tool "acquire_paper" timed out after 60s with no partial result, no progress indicator, and no way to tell whether the work was nearly complete, deeply stuck, or failed upstream.
A concrete example of how SEP-1686 would change this: acquire_paper returns a taskId in <1s, the agent continues its turn, and a follow-up poll either returns the parsed paper or an actionable error. The 60s ceiling never interacts with the operation's runtime.
This pattern generalizes directly to any MCP server that wraps a publisher API, a model inference endpoint, a long-running analysis, or a bulk data pull — i.e., a large fraction of useful MCP servers.
Additional Context
Environment:
Product: Cowork mode, Claude desktop app
MCP client: inherited from Claude Code / Claude Agent SDK (TypeScript)
Observed timeout: 60,000 ms (default DEFAULT_REQUEST_TIMEOUT_MSEC)
Timeout configuration attempts via settings had no observable effect on tool-call timeout in Cowork
Related issues (none track SEP-1686 client adoption specifically):
Feature: async/background mode for MCP tool calls #31427 — Async/background mode for MCP tool calls — closed as duplicate. Predates the SEP-1686 spec merge, so the spec-aligned fix wasn't available when it was filed. This issue is effectively the post-SEP-1686 version of that ask.
Preflight Checklist
Problem Statement
Claude Code's MCP client enforces a hard 60-second timeout on tool calls (
DEFAULT_REQUEST_TIMEOUT_MSEC = 60000in the TypeScript SDK) and silently ignores user-side timeout configuration in the Desktop / Cowork path. There is also no client-side support for async / background tool calls.Combined, these three constraints make it structurally impossible to build MCP servers whose operations can legitimately exceed 60s against Cowork. The affected class of operations is broad: publisher API fetches, PDF download and parsing, model inference, bulk data pulls, long-running analyses, and anything with variable upstream latency. From the user's perspective, this surfaces as opaque "tool timed out after 60s" errors with no recovery path other than retry-and-hope.
This is not a server-side performance problem. No amount of server optimization fixes it when the ceiling is on the client. The MCP community's standardized answer to this class of problem — SEP-1686 (Tasks), accepted into the MCP spec in November 2025 — is not implemented in Claude Code's client.
Proposed Solution
Implement SEP-1686 (Tasks) in Claude Code's MCP client:
taskIdrather than a synchronous result.status: runninguntil completion and the final payload when the task finishes).This is a strictly additive change to the client. Existing synchronous tools continue to work unchanged; servers opt in per-tool. It does not require changing the default synchronous tool-call timeout and is independent of whether that timeout ever becomes configurable.
Alternative Solutions
start_*+get_*tool pairs — this is what server authors are doing today as a workaround. It works, but pushes the async pattern into every server's public API with no standard shape, doubling the tool surface and asking every agent to re-implement the same polling loop. SEP-1686 is the standardized version of exactly this workaround; implementing it client-side would let servers retire their ad-hoc polling tools.Priority
High - Significant impact on productivity
Feature Category
MCP server integration
Use Case Example
Building an MCP server for literature search and paper acquisition, exercising it from Cowork:
acquire_papercalls against Nature-family DOIs (publisher-hosted PDFs) reliably time out at 60s. Success depends on whether the publisher CDN happens to return the full PDF inside the 60s window, which is nondeterministic — one retry succeeded, four others timed out in the same session.acquire_paperagainst arXiv abstract URLs (e.g.https://arxiv.org/abs/2604.02511) also timed out at 60s in the same session.MCP server "…" tool "acquire_paper" timed out after 60swith no partial result, no progress indicator, and no way to tell whether the work was nearly complete, deeply stuck, or failed upstream.A concrete example of how SEP-1686 would change this:
acquire_paperreturns ataskIdin <1s, the agent continues its turn, and a follow-up poll either returns the parsed paper or an actionable error. The 60s ceiling never interacts with the operation's runtime.This pattern generalizes directly to any MCP server that wraps a publisher API, a model inference endpoint, a long-running analysis, or a bulk data pull — i.e., a large fraction of useful MCP servers.
Additional Context
Environment:
DEFAULT_REQUEST_TIMEOUT_MSEC)Related issues (none track SEP-1686 client adoption specifically):
References: