zeroclaw-labs/zeroclaw · error · anyhow::Error
mcp.servers[{i}].tool_timeout_secs exceeds max {MCP_MAX_TOOL
Error message
mcp.servers[{i}].tool_timeout_secs exceeds max {MCP_MAX_TOOL_TIMEOUT_SECS} What it means
Error "mcp.servers[{i}].tool_timeout_secs exceeds max {MCP_MAX_TOOL_TIMEOUT_SECS}" thrown in zeroclaw-labs/zeroclaw.
Source
Thrown at crates/zeroclaw-config/src/schema.rs:10094
RequiredFieldEmpty,
format!("mcp.servers[{i}].name"),
"mcp.servers[{i}].name must not be empty"
);
}
if !seen_names.insert(name.to_ascii_lowercase()) {
anyhow::bail!("mcp.servers contains duplicate name: {name}");
}
if let Some(timeout) = server.tool_timeout_secs {
if timeout == 0 {
validation_bail!(
InvalidNumericRange,
format!("mcp.servers[{i}].tool_timeout_secs"),
"mcp.servers[{i}].tool_timeout_secs must be greater than 0"
);
}
if timeout > MCP_MAX_TOOL_TIMEOUT_SECS {
anyhow::bail!(
"mcp.servers[{i}].tool_timeout_secs exceeds max {MCP_MAX_TOOL_TIMEOUT_SECS}"
);
}
}
// The transport -> required-leaf relationship is owned by
// `McpTransport::required_leaf`, which feeds the `x-required-by-transport`
// schema metadata. The validator matches on the `McpTransport` enum so a
// new variant is a compile error here rather than a runtime fall-through.
match server.transport {
McpTransport::Stdio => {
if server.command.trim().is_empty() {
anyhow::bail!(
"mcp.servers[{i}] with transport=stdio requires non-empty command"
);
}
}
McpTransport::Http | McpTransport::Sse => {View on GitHub (pinned to 88bb9c8533)
Solutions
- Lower tool_timeout_secs for the MCP server to a value at or below the documented maximum.
When it happens
Trigger: Thrown at crates/zeroclaw-config/src/schema.rs:10094 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/85ea3bfac7cecb0c.
Report an issue: GitHub.