写一个MCP(模型上下文协议)服务器只是第一步。真正把它作为Claude连接器上线,意味着要闯过四道与业务逻辑无关的关卡:Anthropic的网络能否访问你的服务器、Claude能否获取OAuth客户端身份、人工审核是否通过你的工具设计、以及你的服务器是否浪费用户的上下文窗口。

以下是按实际失败顺序整理的检查清单,来自一位踩过坑的开发者经验。

打开网易新闻 查看精彩图片

第一关:Anthropic的基础设施能否访问到你?

Claude是从Anthropic的服务器发起连接,而不是从你的笔记本电脑。因此,你在本地跑通的测试几乎说明不了问题。必须从非本机网络环境执行以下检查:

  • DNS解析结果中所有返回地址必须是全球可路由的公网地址。任何10.x、172.16–31.x、192.168.x、100.64.x、回环地址或链路本地地址都会在HTTP请求发出前直接断掉连接。
  • 连接器仅支持IPv4。如果A记录查询为空而AAAA记录有结果,这就是问题所在。
  • 301/302/307/308重定向到不同主机时会剥离Authorization头(RFC 9110 §15.4)。目标服务器会返回401,Claude则报告认证失败。

检查项:DNS应答只包含公网地址;存在A记录而非仅有AAAA记录;MCP URL不发生跨主机重定向。

如果你的访问日志为空而Claude提示无法连接MCP服务器,问题基本就出在这三项之一。本地开发时,建议用隧道工具(如cloudflared或ngrok)转发到本地端口,而不是直接对抗这些网络限制。

第二关:Claude能否获取OAuth客户端ID?

对于大多数公开连接器来说,最直观的修复方案往往是错误的选择。动态客户端注册(DCR)会在每次新连接时生成全新的OAuth客户端——这意味着每个连接一行记录,而不是每个客户一行,繁忙的连接器会逐渐用垃圾客户端塞满你的身份提供商。

Claude接受三种获取身份的方式。其中CIMD(客户端标识元数据文档)模式值得特别注意,因为它会静默失败。只有当你的元数据同时声明以下两个字段时,Claude才会选择CIMD:

  • client_id_metadata_document_supported 设为 true
  • token_endpoint_auth_methods_supported 包含 "none"

漏掉第二个字段,Claude就会回退到动态注册,然后即使你的CIMD配置正确,也会报出上述错误。

检查项:如果使用CIMD,元数据必须同时声明两个字段;registration_endpoint 字段应省略而非设为 null——null 会导致模式验证失败而不是被忽略;根据预期连接量决定使用DCR还是CIMD,而不是根据先看到哪个错误信息。

第三关:目录审核会拒绝你的工具设计吗?

这一关涉及人工审核环节。审核员会检查你的工具设计是否符合规范,包括工具命名、描述清晰度、参数定义等方面。设计不当的工具描述或模糊的参数说明都可能导致审核不通过。

审核关注的核心是工具是否易于理解和使用。工具名称应直观反映功能,描述应说明用途和适用场景,参数应有明确的类型和含义。避免使用模糊表述或过度复杂的参数结构。

第四关:你的服务器是否浪费用户的上下文窗口?

MCP服务器的响应会占用Claude的上下文窗口。如果返回内容冗长、重复或包含无关信息,会直接影响对话质量。优化响应结构,只返回必要信息,是提升用户体验的关键。

建议在响应中包含精简的结果摘要、必要的状态信息和明确的下一步操作提示。避免返回完整日志、调试信息或大段原始数据。

这四道关卡环环相扣,从网络基础设施到身份认证,再到设计审核和性能优化。每一关都有其特定的失败模式和排查方法。提前了解这些坑,可以大幅缩短上线周期,避免在最后一刻才发现问题。