浏览 AI 知识库
MCP 出现 404、429、超时和断线,怎样检查端点、限流与网络
404、429、超时和断线分别指向端点、限流与网络状态。保留每次请求的地址、时间和响应,再决定改配置、等待还是停止重试。
先 404、再 429、最后超时,不能都解释成“配置坏了”
一次 MCP 调用先 404、改 URL 后 429、继续重试又超时。用户把三种响应都归因于“本地配置坏了”,不断重装。
- 每个状态使用对应证据入口
- 重试有限并遵守服务提示
- 上游故障未误归因本地
MCP 429 超时,先从“404”这一类现象查起
404
- 原因
- Server URL、base path、版本、资源或代理路由不匹配。
- 怎么改
- 从健康或能力端点开始核对最终 URL,检查代理实际转发路径和资源存在性。
429
- 原因
- 客户端、Server、上游或账号在某个时间窗限流。
- 怎么改
- 读取响应头和官方限制,降低并发并按退避重试;写操作先确认幂等。
超时
- 原因
- 连接、Server 处理、外部依赖或客户端总时限先触发。
- 怎么改
- 记录各阶段耗时和超时配置,缩小请求,避免只把时限调大。
断线
- 原因
- 进程退出、休眠、代理空闲、网络切换或服务重启。
- 怎么改
- 关联重连与 Server 生命周期,确认是否能安全恢复未完成调用。
复测前,固定原始现象、环境和目标
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | 请求时间线含端点、状态、Retry-After、耗时和 requestId;远程服务有状态页与日志。 |
| 不能越过的边界 | 404 查端点/资源,429 查限流和重试,超时查网络与上游耗时;遵守 Retry-After;设置有限重试。 |
| 要交付的结果 | 请求时间线与重试决定 |
先收齐同一请求的 URL、时间、响应头与三层日志
| 输入证据 | 脱敏后的实际值 | 能回答的问题 |
|---|---|---|
| 最终 URL | `https://mcp.example.test/mcp`;POST;Client v1.4 | 是否请求了正确协议、路径和版本 |
| 时间与请求 ID | 2026-09-22T10:02:31+08:00;a17 | 能否把 Client、Server 和上游记录对齐 |
| 状态与响应头 | 429;`Retry-After: 30`;`X-Request-Id: a17` | 限流发生后应等待多久,哪一层返回 |
| Client 日志 | 第 1 次调用 30 秒后失败;随后立即重试 2 次 | 是否存在过快重试或客户端总超时 |
| Server 日志 | 能力发现成功;工具调用转发上游;未执行写操作 | 排除基础 404,并判断重试是否会产生副作用 |
| 网络条件 | 公司代理开启;同一只读请求直连测试一次 | 代理路径是否改变连接或超时 |
域名和请求 ID 为安全示例。真实排错要保留脱敏后的原始时间戳、完整响应头和对应日志,不粘贴 Token、Cookie 或业务数据。
同一条调用跨过 Client、Server 和上游三层
| 时间 | 层级 | 结果 | 下一步 |
|---|---|---|---|
| 10:02:01 | Client | 向 `/mcp` 发起请求,请求 ID a17 | 保留最终 URL 和超时设置 |
| 10:02:01 | Server | 能力发现成功,工具调用开始 | 排除基础 404 |
| 10:02:31 | 上游 | 无响应,Server 30 秒超时 | 测上游耗时,不只调大 Client 超时 |
| 10:03:10 | 重试 | 原调用是否成功未知 | 写操作停止自动重放,只读请求按上限退避 |
URL、时间和请求 ID 是演示值。真实排错必须使用脱敏后的实际日志和响应头。
先确认副作用,再决定是否自动重试
| 调用类型 | 状态未知时 | 可否自动重试 | 条件 |
|---|---|---|---|
| 只读查询 | 可能未返回 | 通常可以 | 有次数上限、退避和请求 ID |
| 幂等更新 | 可能已生效 | 有条件 | 服务明确支持幂等键并可回读 |
| 创建/发送/付款 | 可能已改变外部状态 | 不可以 | 先查询实际状态并人工确认 |
MCP 429 超时:按原条件复测的结果
原始现象
不同失败被压成一条“连接不上”,每次同时改 URL、Token 和重试参数。
请求时间线与重试决定
404 由旧端点修正;429 按 Retry-After 等待且不并发重试;随后超时在服务状态页确认上游故障,停止本地修改。时间线清楚标出三段因果。
