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/sdk then applies DEFAULT_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_000 in packages/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.:
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
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 astransportFailure.Observed error from the MCP SDK path (v1.6.8):
Live example: three parallel
snowflake.org.blushift.run_snowflake_querycalls through/mcp/toolkits/akkiodied 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):connection.client.callTool({ name, arguments })with no timeout@modelcontextprotocol/sdkthen appliesDEFAULT_REQUEST_TIMEOUT_MSEC = 60000mainafter UsefulSoftwareCo#1956 (unreleased):MCP_SDK_TIMEOUT_BACKSTOP_MS = 2_147_483_647MCP_ACTIVE_WORK_TIMEOUT_MS = 60_000inpackages/plugins/mcp/src/sdk/invoke.tsAbort message on
mainwould be:MCP tool invocation exceeded its active-work deadline. Same 60s wall.What does not control this
EXECUTOR_SANDBOX_TIMEOUT_MSquery_timeoutWhat 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)EXECUTOR_MCP_TOOL_TIMEOUT_MSso Code Mode /executedoes not have to pass options on every warehouse callDefault 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 raiseEXECUTOR_SANDBOX_TIMEOUT_MSexpecting it to help.Related
InvokeOptions