mcp-use-hang-repro
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Repro: widget tool result is dropped when the handler loses a race with the iframe load
In mcp-use dev, a tools/call that renders a widget can hang in the inspector: the server
finishes the call, but the result never reaches the client, which spins until its request
timeout (-32001). Whether it hangs depends on how long the tool handler takes — it's a
probabilistic race, not a fixed timeout.
Measured on the stock scaffold by sweeping the handler delay (DELAY_MS):
| worked |
0 | always |
100 | always |
150 | ~6 / 8 |
200 | ~50% |
250 | ~2 / 6 |
300 | never |
1000 | never |
2000 | never |
The probability of hanging climbs smoothly from ~150ms to ~300ms — a transition band, not a cliff. Reading: the tool result is racing the widget iframe finishing its load/connect (itself a variable ~150–300ms). If the handler returns before the iframe is done, the result is delivered; if it returns after, the result is dropped.
This is why it looks intermittent in a real server: a handler that hits an API/DB has jittery latency that lands in the transition band, so it hangs only some fraction of the time.
Only in
mcp-use dev. A production build / deployed connector does not hang.This project is the unmodified
create-mcp-use-app --template mcp-appsscaffold; the only change is making the stocksearch-tools2s delay configurable viaDELAY_MS.
Environment
mcp-use: 1.33.0 (also seen on 1.30.0). macOS, Chrome.
Related MCP server: opencode-webmcp
Getting Started
npm install
npm run devSteps
DELAY_MS=2000 npm run dev # http://localhost:3000, opens the inspectorOpen the inspector, call
search-tools(args can be empty{}) → spins forever, eventually-32001. (At 2000ms it hangs every time.)Restart with
DELAY_MS=0 npm run dev, call again → delivers instantly, every time.To see the race, sweep
DELAY_MS=150 / 200 / 250(restart each time) and call the tool several times — it hangs a growing fraction of the time as the delay rises.
On hanging runs the widget iframe renders its skeleton (it received the tool input) but never the output (props).
Negative controls — Node clients do NOT reproduce it (so it's browser-specific)
These are MCP clients, so the dev server must already be running in another terminal.
DELAY_MS is a server setting (it controls the handler) — set it on npm run dev, not
on the script. Two terminals:
# terminal 1 — start the server at the hang-inducing delay, leave it running
DELAY_MS=2000 npm run dev
# terminal 2 — run a client against it
node repro.mjs # SDK client: pre-read widget, then tools/call + resources/read CONCURRENTLY
node repro-flood.mjs # SDK client: tools/call + a burst of widget asset fetches, concurrently(If you see ECONNREFUSED ::1:3000, the dev server isn't running — start terminal 1 first.)
Both deliver the tool result fine even at DELAY_MS=2000 (the browser hangs every time at
that delay). A headless mcp-use client screenshot --tool search-tools also works. These
never load the widget iframe in a browser, so there's nothing for the result to race —
consistent with the race reading above.
Why (unconfirmed)
Browser-only + dev-only, probabilistic in a ~150–300ms band → looks like the result racing
something that completes when the widget iframe loads/connects, rather than a fixed timer or
plain connection contention. In mcp-use dev the iframe's assets are served from the same
origin (localhost:3000) by Vite; a deployed build serves prebuilt assets from a separate
CDN origin and doesn't hang. Exact mechanism unconfirmed.
This server cannot be deployed
Maintenance
Related MCP Connectors
Concurrent two-client overlap probe proving MCP servers do not cross-deliver tool results.
Known MCP tool-call failures and workarounds verified by reproduction.
Benchmark MCP tool selection with metadata-only routing, collision, abstention, and holdout checks.
Toolbox dynamically routes to all MCPs in the Smithery registry based on your agent's need. When a…
Related MCP Servers
- AlicenseAqualityCmaintenanceProxies to all of a user's MCPs and allows them to expose dynamic toolsets of tools from those servers to improve context and tool-usage.8723 npm155TypeScriptMIT
- AlicenseNot gradedqualityCmaintenanceBridges OpenCode to Chromium's WebMCP API, exposing WebMCP tools from a webpage as standard MCP tools for any MCP client.18 npm1MIT
- AlicenseNot gradedqualityDmaintenanceDrop-in replacement for Playwright MCP that adds WebMCP support, exposing page-defined tools as gated webmcp:* tools with provenance tracking, schema-change warnings, and mandatory confirmation.2Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables stateless, handle-based tool interaction over the 2026-07-28 MCP protocol, supporting multi-round-trip requests, cacheable results, and an audited execution trail.1MIT