cd /news/ai-tools/i-set-a-500ms-timeout-and-got-28-hou… · home topics ai-tools article
[ARTICLE · art-127373] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↓ negative

I Set a 500ms Timeout and Got 28 Hours

A developer documented a Claude Code MCP configuration pitfall in which a `timeout: 500` value (milliseconds) is silently ignored because values below 1000 fall through to the MCP_TOOL_TIMEOUT default of roughly 28 hours, rather than the one-second floor used before v2.1.162. The writeup also covers two related traps: entries with a `url` but no `type` are treated as stdio servers and skipped as configuration errors, and project-level MCP server approvals in `.mcp.json` are ignored in untrusted folders. The developer released an open-source configuration checker, ccheck, plus an MIT-licensed multi-persona Claude Code workflow.

by read3 min views3 publishedSep 12, 2026

I had an MCP server that occasionally hung, so I gave it a short leash:

{ "mcpServers": { "flaky": { "type": "http", "url": "...", "timeout": 500 } } }

timeout is in milliseconds, so that reads as half a second.

Values below 1000 are ignored. The call falls through to

MCP_TOOL_TIMEOUT, and if that is unset, to its default — about 28 hours.

I had written the tightest limit I could and produced the loosest one available.

Before v2.1.162 a value under 1000 was floored to one second, which is the

behaviour I had in my head. It changed, and nothing in my configuration changed with it.

Three related things I only learned by reading the whole section:

timeout is a url with no type is read as a stdio server

{ "mcpServers": { "example": { "url": "https://mcp.example.com/mcp" } } }

There is no defaulting to http. An entry with no type is a stdio server,

stdio requires command, and so the server is skipped as a configuration error:

MCP server "example" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry

That message exists from v2.1.202. Before it, the same mistake reported

command: expected string, received undefinedyou wrote a url and were told about a command, which is a long way from the cause.

Under --output-format stream-json it also appears in the system/init event's

mcp_server_errors, so a script can detect that a server never loaded. That is

the only machine-readable path I have found for it.

This one cost me the most time, because it looks like a permissions bug.

Servers from .mcp.json need approval. You can commit

enableAllProjectMcpServers or enabledMcpjsonServers to the project's

.claude/settings.json — and in an untrusted folder they are ignored. The

server sits at ⏸ Pending approval, never connected, never health-checked.

Which is correct, and obvious once stated: a repository that could approve its own MCP servers would be a way to run code on anyone who clones it.

Three sources of approval still apply in an untrusted folder: your own

~/.claude/settings.json, managed settings, and settings passed with

--settings.

Every one of them is a configuration that loads. No error, no warning you

would notice, and a running system that is doing something other than what the

file says.

timeout: 500 is the sharpest example: the file says half a second, the system

says a day and change, and both are working as designed.

What I want from a configuration checker, having been on the wrong end of these,

is not more rules. It is that the ones it does have never fire on something

correct — because the reason I stopped reading startup output in the first place

was that nothing there had ever mattered, and by the time something did, I had

already trained myself past it.

npx @quintetkit/ccheck
error .mcp.json:3
      Server "example" has a `url` but no `type`. Add `"type": "http"` (or "sse" / "ws").
warn  .mcp.json:9
      Server "flaky": `timeout: 500` is in milliseconds; values below 1000 are ignored.

The full set, including the required field per transport:

https://quintetkit.github.io/en/reference/claude-code-mcp-json.html

I publish the configuration for splitting Claude Code into separate personas —

Architect, Coder, Reviewer, Conflict Resolver — under MIT. Copy it, run

./setup.sh, and it works. It does not depend on your tech stack.

https://github.com/quintetkit/quartet

I built one real tool using nothing but this workflow. Every Issue, PR, review

and merge is still there. The parts that went wrong were not deleted.

https://github.com/quintetkit/mdlinkcheck

The version that adds a UI Designer persona, review criteria, a per-Issue

parallel execution script and a 11-chapter guide is on the

product page.

The full kit — five personas, the scripts and the complete guide — is available here.

── more in #ai-tools 4 stories · sorted by recency
── more on @claude code 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-set-a-500ms-timeou…] indexed:0 read:3min 2026-09-12 ·