跳到主内容

MCP 连不上?三步排查清单照做

2026-10-29 发布 来源:我告诉你AI导航 阅读

给 Codex 配好一个 MCP 服务,会话里却看不到工具;或者时好时坏,重启几次才连上——AI agent 的 MCP 故障大多卡在接入链路的三处:配置没被读到、服务进程没起来、认证没通过。乱试配置是排查的大忌,改十处不如按顺序查...

给 Codex 配好一个 MCP 服务,会话里却看不到工具;或者时好时坏,重启几次才连上——AI agent 的 MCP 故障大多卡在接入链路的三处:配置没被读到、服务进程没起来、认证没通过。乱试配置是排查的大忌,改十处不如按顺序查三处。这篇给一份能直接照做的三步排查清单:每一步查什么、用什么命令、结果怎么解读,再补上两个超时参数的显式配法;接入配置本身怎么写,见Codex 接 MCP一篇打底。

先分清两层:没加载与没连上

排查前先建立一个分层意识:「配置没加载」与「服务没连上」是两个层面的问题,症状都是会话里没有工具,根因却完全不同。配置没加载:条目写错了层(全局还是项目)、段名拼错、改完没重启会话,服务压根没进入加载队列。服务没连上:配置读到了,但进程启动失败、连不上端口或认证被拒。分层的判据就是第一步的输出——列表里有没有条目。没有条目,问题全在配置侧,去查写法与层级,config.toml 分层的合并规则见config.toml 分层一篇;有条目但状态异常,才进入后面的服务侧排查。

看到的信号指向哪一处下一步查什么
codex mcp list 里没有条目配置层:层级、段名、是否重启核对全局层与项目层写法,重启会话再列一次
有条目但状态异常服务进程本身把启动命令拿到终端裸跑,看能不能在前台等待输入
裸跑能通,进了 Codex 连不上子进程继承的环境变量不一致把缺的变量补进服务条目的 env 配置
时好时坏、重启几次才连上启动时长贴着默认等待显式调大 startup_timeout,不靠默认值

三步排查:条目、裸跑、环境与认证

第一步,打印条目:命令行跑 codex mcp list,确认服务在列表里、看状态列。列表为空或缺条目,回到配置层查——这是三步里返回率最高的一步,多数「连不上」其实死在这一步。

第二步,裸跑命令:把 stdio 服务的启动命令原样拿到终端里单独执行,不经过 Codex。能正常启动并在前台等待输入,说明命令本身没问题;终端报 spawn ENOENT,说明可执行文件找不到——命令拼错、依赖没装、路径不在环境里,都在这一步现形。HTTP 服务对应的做法是用 curl 或浏览器直接访问健康检查端点,服务本身通不通先单独确认。

第三步,查环境变量与认证:同一台机器、同一份配置,裸跑能通、进了 Codex 却连不上,差别通常在运行环境——Codex 启动的子进程继承的环境变量与你终端里的不一定一致,依赖某些变量才跑得起来的服务会在这里断掉,缺的变量补进服务条目的 env 配置里。HTTP 服务的认证是另一处高发点:返回 401 就是凭据问题,token 过期、scope 不对、OAuth 流程没走完都算,重新走一遍授权流程,确认凭据写在正确的字段里。

两个超时参数:别让慢服务被误判

有一类「连不上」其实是「连得慢」。MCP 服务启动要时间:拉起运行环境、加载依赖、建立连接,重的服务十几秒起步;如果启动超过默认等待时长,Codex 会把它当作启动失败处理,症状与真连不上一样。这类情况用 startup_timeout 显式把启动等待调长,先让服务能进场。进场之后还有第二道:工具调用本身的耗时——查询大表、抓取长网页的工具一跑几十秒,超过调用等待时长同样会被判失败,tool_timeout 管这一段,按最慢工具的实际耗时配置。两个参数都写进服务条目里显式声明,不要依赖默认值;参数之外,重试与超时在 agent 工具链里的整体机制,见工具重试一篇。

排查之后:把结论固化下来

查完不要只停留在「这次能用了」。三个固化动作值得做:一是把排查结论写进项目的 AGENTS.md——哪些服务依赖哪些环境变量、启动慢属于正常现象,避免下一个人重新踩一遍,AGENTS.md 的写法见AGENTS.md 写法一篇;二是固定服务版本,服务升级改了行为又「连不上」时,先怀疑版本再排查配置,pin 版本的道理见接入篇;三是给服务配好两个超时参数再交给团队用,连得上且稳得住,才算接入完成。连上之后还有一层常被忽略的事:工具全量放开并不安全,最小授权的配法见MCP 最小授权一篇。

MCP 排查速查

  • 先分层:list 没条目查配置层,有条目异常查服务侧
  • 三步顺序:打印条目 → 裸跑命令 → 查 env 与认证
  • spawn ENOENT 是命令找不到,401 是凭据问题
  • 慢服务配 startup_timeout 与 tool_timeout,别靠默认值
  • 结论固化进 AGENTS.md 与版本 pin,团队不重踩

关于 MCP 排查的常见疑问

  • 时好时坏、重启几次才连上,算哪一类?:大概率是启动时长贴着默认等待的边——机器负载高时启动变慢,超过等待时长就判失败。把 startup_timeout 显式调长即可,属于超时问题,不用动配置结构。
  • 裸跑命令能通,Codex 里就是不行,先查什么?:先查环境差异。终端里手工 export 过的变量、激活过的虚拟环境,Codex 启动的子进程都没有;把必需的变量写进服务条目的 env 配置,把命令写成可执行文件的完整路径,差异就消掉了。
  • HTTP 服务返回 401,token 明明刚刷新过?:确认三处:凭据是否写在服务条目的正确字段里而不是环境变量旧值、OAuth 流程是否完整走完而不是只拿了 code、服务端要求的 scope 与凭据实际 granted 的范围是否一致。三处都对再考虑服务端的问题。

排查时想让 AI 帮忙提速,可以把 codex mcp list 的输出和裸跑命令的报错一起丢给 Kimi,让它按三步清单定位卡在哪一层;豆包适合帮你把排查结论整理成 AGENTS.md 的条目,团队下次照着查就行。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]