Skip to content

MCP 连接失败 ​

「连接失败」可能发生在服务进程启动之前,也可能是握手、工具发现或调用时失败。先保存原始错误和发生阶段,再选检查。给启动路径错误增加网络重试,不会让不存在的文件出现。

无外部账号的最小练习 ​

下载 本地 MCP 练习 v1.0.0,解压进入 mcp/,阅读 README,使用 Node 22+ 运行:

sh
node probe.mjs

包内 server.mjs 是本方编写的 stdio 教学服务,只提供只读 greet 工具;probe.mjs 是本方协议探针。没有 npm 依赖、API Key 或外部网络服务。本站在 macOS、Node v22.23.3 实际执行,完整消息见 原始记录。

探针首先指向不存在的 missing-server.mjs。Node 退出 1 并报 MODULE_NOT_FOUND;客户端虽然已写出 initialize 请求,却没有收到响应。因此故障位于服务启动阶段,不能把它写成「握手成功后工具失效」。

随后探针只改变入口路径,使用存在的 server.mjs。服务返回初始化结果,探针发送 notifications/initialized,然后列出并调用工具:

阶段修复后实际观察
initialize返回协议 2025-11-25 与服务名称
tools/list得到 greet 及 name 参数结构
tools/call传入 name 为 reader,返回 Hello, reader

脚本同时断言预期失败与成功,最后自身退出 0。成功依据是收到并核对响应,不能只凭进程存在或发出了请求。练习为每个请求设置三秒超时,以便故障时停止等待;这只是探针的界限,不是所有生产 MCP 服务应使用的统一超时值。保留最后一条成功响应比单独记录「超时」更有助于定位阶段。

沿失败阶段排查 ​

最后成功的阶段区分性检查对应处理与复测
尚未启动检查命令可解析、脚本路径存在、stderr 错误修正准确路径,重新启动原命令
进程启动检查 initialize 响应与协议版本按客户端和服务支持范围核对握手
握手完成检查 tools/list 的实际结果与过滤配置核对工具声明,再刷新客户端发现结果
已列出工具检查 tools/call 参数与完整错误按输入结构修正,使用相同输入复测

后三行是诊断方向,本站没有为每种故障制造一次实测。stdio 的 stdout 必须用于协议消息,调试日志应写 stderr,避免普通打印破坏消息解析;依据见 MCP 传输规范。初始化顺序见 生命周期规范,均于 2026-10-18 复核。

接入自己的客户端之前 ​

OpenAI MCP 文档 给出 CLI 注册方法。完成离线探针后,若你决定修改自己的 MCP 配置,可将下面路径替换为实际绝对路径:

sh
codex mcp add codexcase-lab -- node /绝对路径/server.mjs
codex mcp get codexcase-lab

这一步会改客户端配置;本站探针不需要执行它。读取配置只能确认登记内容,接入后还应在实际客户端发现和调用 greet。本站没有把离线探针成功写成所有 Codex 客户端已连接。

本练习是 MCP 的最小教学子集,不覆盖 HTTP、OAuth、代理、远端权限或生产服务可靠性。先按 PATH 页 排除命令启动问题,再用 问题报告模板 记录最后成功阶段与最小消息,避免泄露完整配置。