Feature: async/background mode for MCP tool calls
Problem
When Claude Code calls MCP tools, the call blocks the entire conversation until it returns. For long-running MCP operations (minutes to hours), this makes the session unusable — the user can't ask questions, check on other work, or issue new commands while waiting.
The Bash tool already has run_in_background which solves this for shell commands. But there's no equivalent for MCP tool calls.
Proposed Solution
Add an async or run_in_background parameter to MCP tool calls (or to tool calls generally). When set:
- The tool call returns immediately with a task ID
- Claude can continue the conversation normally
- When the MCP call completes, the result is delivered (same as background Bash tasks)
- Claude (or the user) can check status via
TaskOutputor similar
Use Cases
- Long-running MCP agent spawns: Code analysis, verification pipelines, etc. (5-30 min) block the session
- Any slow MCP tool: Database queries, API calls to external services, CI/CD triggers
- Parallel workflows: User wants to discuss results from Task A while Task B runs via MCP
Current Workaround
Write a Python/shell script that does the equivalent work, then run it via Bash with run_in_background=true. This works but defeats the purpose of having MCP integrations — you lose the structured input/output contract and have to re-implement the MCP tool's logic in a script.
Suggested API
Either as a universal parameter on any tool call:
{
"name": "mcp__some_server__some_tool",
"parameters": {
"prompt": "...",
},
"run_in_background": true
}
Or at the Claude Code orchestration level, wrapping any MCP call:
{
"async": true,
"tool": "mcp__some_server__some_tool",
"parameters": { ... }
}
Returns: { "task_id": "abc123", "status": "running" }
This would bring MCP tool calls to parity with Bash background execution.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗