Repository navigation
MCP tool calls hard-cap at 60s; warehouse queries abort #1
Description
Summary
Executor MCP tool invocations abort at 60 seconds. There is no env, compose, or toolkit knob to raise that ceiling. Typical warehouse/db queries (Snowflake run_snowflake_query, Postgres via dbhub) often need longer and fail as transportFailure.
Observed error from the MCP SDK path (v1.6.8):
Error: MCP tool failed: The operation was aborted due to timeout
Live example: three parallel snowflake.org.blushift.run_snowflake_query calls through /mcp/toolkits/akkio died at ~60.3s and ~61.9s.
Where the 60s lives
v1.6.8 (ghcr.io/usefulsoftwareco/executor-selfhost:1.6.8, latest published tag 2026-09-05):
- MCP plugin does
connection.client.callTool({ name, arguments })with no timeout @modelcontextprotocol/sdkthen appliesDEFAULT_REQUEST_TIMEOUT_MSEC = 60000
main after UsefulSoftwareCo#1956 (unreleased):
- SDK timer is set to
MCP_SDK_TIMEOUT_BACKSTOP_MS = 2_147_483_647 - real ceiling is still hardcoded
MCP_ACTIVE_WORK_TIMEOUT_MS = 60_000inpackages/plugins/mcp/src/sdk/invoke.ts - that timer pauses only for elicitation, not for a long SQL statement
Abort message on main would be: MCP tool invocation exceeded its active-work deadline. Same 60s wall.
What does not control this
| Knob | What it actually bounds |
|---|---|
EXECUTOR_SANDBOX_TIMEOUT_MS |
QuickJS sandbox (default 5 min). Inner MCP still dies at 60s. |
| GraphQL plugin timeout | 110s in the same binary; MCP is separate |
dbhub query_timeout |
tighter Postgres ceiling (e.g. 30s), not the MCP client |
| Pi / Flue / Slack client timeouts | outer HTTP; Executor already aborted the inner tool |
What we need
A caller- or host-configurable MCP invoke timeout, e.g.:
InvokeOptions.timeoutMs/maxTotalTimeoutMs/resetTimeoutOnProgress(mcp: expose request options through InvokeOptions UsefulSoftwareCo/executor#1988 — open, unreviewed, merge-dirty against currentmain)- and/or a self-host env such as
EXECUTOR_MCP_TOOL_TIMEOUT_MSso Code Mode /executedoes not have to pass options on every warehouse call
Default 60s can stay. Warehouse toolkits need a way to wait minutes, not one minute.
Workaround until then
Small bounded reads (LIMIT, short window, one query at a time). Do not raise EXECUTOR_SANDBOX_TIMEOUT_MS expecting it to help.
Related
- mcp: expose request options through InvokeOptions UsefulSoftwareCo/executor#1988 — expose MCP request options through
InvokeOptions - fix(mcp): pause active timeout during elicitation UsefulSoftwareCo/executor#1956 — pause active-work deadline during elicitation (does not raise the 60s cap)
Activity