浏览 MCP与Skills教程与资源

MCP 404、429 与超时:区分端点、限流和结果未知

从真实请求所在层定位故障,解释 GET 测试为何可能误导、协议版本为何影响 404,以及写操作超时后为什么必须先回读状态。

第一份证据

保留最后一条失败请求,别把三次不同失败拼成一个原因

一次修改 URL 后出现 429,再加大超时后断线,是三条不同请求。需要分别记录时间、最终端点、客户端/Server 版本、传输、请求方法、状态、耗时和工具是否有副作用,不能把后一次现象拿来解释前一次。

HTTP 状态可能来自反向代理、MCP Server 或工具访问的下游。外层 200 中的工具错误也可能包含下游 429。先标清层级,再判断改路由、降并发还是等待上游恢复。下面没有虚构某次线上故障时间线。

404 分支

先辨认端点错误、协议方法错误和资源不可见

实际证据判断方向下一步
访问返回普通网站的 HTML 404请求可能进了页面站点或错误代理路由核对官方 MCP URL、末尾路径和重定向后的域名;比较服务端访问日志
浏览器 GET 失败,MCP 客户端 POST 能调用服务可能只提供对应版本所要求的 POST 端点以真实 MCP 请求判断;浏览器地址栏不是通用健康检查
2026-07-28 请求的 JSON-RPC 错误为 -32601按该版规范可能是方法不支持,不能只凭外层 404 判断 URL 不存在比对实际 method、协议版本和 Server 能力,使用兼容客户端复测
旧版有状态 HTTP 连接携带 session ID 后 404仅在 2025 系列等支持协议会话的实现中,可能是 session 已失效按该版本客户端流程重新建立会话;不能把旧 session 处理套在无协议会话的新版本上
MCP 工具内部读取某个私有对象返回 404可能真不存在,也可能提供方隐藏无权资源检查同身份对该对象的权限与完整 ID;不要因此改 MCP endpoint

Streamable HTTP 的 2026-07-28 修订移除了旧的协议级会话和 GET stream;网站地址不变不代表双方使用同一协议版本。

429 分支

先找限流的是哪个服务,再决定等待方式

等待值来自响应,不来自猜测

有 Retry-After 时按它指示等待。这个头既可能是秒数,也可能是 HTTP 日期;不要一律 parseInt 后当毫秒。还要查看提供方的速率头和错误正文。GitHub 的主限流与次级限制就不是同一个判断入口,某些限制会返回 403。

降低放大倍数

Agent 一次任务可能触发多页搜索、评论分页和自动重试,多个客户端再并行会放大流量。先停掉重复任务,限制并发,减少不必要分页;不要每个工作线程独立按相同节奏重试。多个请求同时醒来会再次撞上同一限制。

给自动重试一个明确预算

例如对无副作用的读取,最多追加两次重试,遵守服务要求并加入随机延迟;达到次数或总耗时上限就返回暂不可用。这个次数是应用策略示例,不是 MCP 规范要求。没有 Retry-After 时按提供方建议退避,不能把自己的固定间隔当成对所有服务都合适。

超时分支

总时限调大前,先找谁先停止等待

阶段可观察证据有针对性的处理
DNS / TCP / TLS连接尚未进入 Server 日志;解析、连接或证书错误核对域名、代理和证书链;工具 timeout 不是解决此层的唯一配置
Server 启动本地 stderr 显示包下载/初始化,尚未提供工具先解决依赖和启动方式,再评估启动时限
客户端等待工具客户端先报超时,Server 随后仍有处理记录检查工具时限;缩小请求并查询是否已有结果,避免重复写
Server 等待下游Server 日志明确是数据库、浏览器或 API 请求超时分析下游耗时、查询计划或服务故障;仅增加客户端等待未必有用
代理 / 流式连接流被固定时长切断或事件成批到达核对代理空闲超时与缓冲;有同一请求的前后日志才能证明所在层
最容易造成重复动作的地方

创建操作超时后,状态是未知,不是失败

只读请求

查询 Issue #42 超时

可以在授权范围不变、限流允许、次数受限的前提下重试读取。但仍可能消耗配额或产生计费;只读不代表免费。恢复后说明结果来自哪次请求。

写入请求

向 Issue #42 发布评论超时

评论可能已创建,只是返回丢失。先读取 #42 的近期评论,核对作者、内容和时间窗口,再决定是否重试。没有幂等机制且无法确认状态时,保留‘结果未知’并交给操作者,不能自动再发一遍。

JSON-RPC id 用于关联请求和响应,不是业务幂等键。即便重用同一个 id,也不能假定服务会去重评论、付款或创建记录。

恢复判断

用原请求复测,才能证明修复覆盖了原问题

修复路径后,复测原 endpoint 和同一只读动作;限流恢复后,保留等待值与新的请求频率;超时缓解后,说明请求是否被缩小以及业务结果是否完整。把 LIMIT 从 1000 改成 10 后成功,只证明小请求可用,不能宣称原全量任务已经完成。

服务端记录拿不到时,保留客户端能观察到的事实即可。例如‘代理返回 504,尚无法判断下游是否完成’,比编造上游 30 秒日志更有用。问题报告应帮助下一位维护者复现,而不是用完整表格遮住证据缺口。

依据与适用范围

本页的一手资料