写一个MCP服务器只是第一步。要让它真正成为Claude的连接器,还需要通过四道与业务逻辑无关的关卡:Anthropic的网络能否访问你的服务器、Claude能否获得OAuth客户端身份、人工审核是否通过你的工具设计、以及你的服务器是否浪费用户的上下文窗口。这四道关卡的失败顺序,就是一份实用的上线前检查清单。
第一关:Anthropic的基础设施能否访问你?
Claude是从Anthropic的服务器发起连接的,不是从你的笔记本电脑。所以你在自己电脑上跑的测试几乎证明不了什么。必须从你自己的网络之外去测试。DNS解析结果里如果出现任何10.x、172.16–31.x、192.168.x、100.64.x、回环或链路本地地址,连接在HTTP请求发出之前就会被掐断。连接器只支持IPv4,如果只有AAAA记录而没有A记录,同样会出问题。另外,如果MCP URL发生跨主机重定向,Authorization头会被剥离,导致Claude报告认证失败。
检查清单包括:DNS应答只包含公网地址、存在A记录而非仅AAAA、MCP URL不跨主机重定向。如果你的访问日志是空的,而Claude提示无法到达MCP服务器,问题基本就出在这三处之一。本地开发时,用cloudflared tunnel或ngrok做隧道转发,比直接对抗这个问题更省事。
第二关:Claude能否获得OAuth客户端ID?
大多数公共连接器最容易犯的错误,是选择了错误的认证方案。动态客户端注册会在每次新连接时生成一个全新的OAuth客户端——这是按连接计行,不是按客户计行,繁忙的连接器会慢慢用垃圾客户端塞满你的身份提供商。
Claude接受三种获取身份的方式。其中CIMD模式值得特别注意,因为它会静默失败。只有当你的元数据同时声明了client_id_metadata_document_supported为true和token_endpoint_auth_methods_supported包含"none"时,Claude才会选择CIMD。漏掉第二个字段,Claude就会回退到动态注册,然后报出上面的错误——哪怕你的CIMD配置本身没问题。
检查清单包括:如果使用CIMD,元数据必须同时声明两个字段;registration_endpoint要省略而不是设为null,因为null会直接导致schema校验失败;选择DCR还是CIMD,应该基于预期的连接量,而不是看你先遇到哪个错误信息。
第三关:目录审核会拒绝你的工具设计吗?
这一关是人工审核环节。审核员会检查你的工具设计是否符合规范,包括工具命名、参数定义、描述清晰度等方面。设计不当的工具描述会浪费用户的上下文窗口,因为Claude需要把工具定义加载到上下文中才能理解如何使用。
工具描述应该简洁明确,避免冗长的说明文字。参数定义要精确,不必要的参数会增加Claude的理解成本。工具数量也要控制,过多的工具会让Claude在每次对话中都消耗大量token来浏览工具列表。
第四关:你的服务器是否浪费用户的上下文窗口?
这是最容易忽略但影响最直接的一关。每次Claude调用工具时,工具的定义、参数说明、返回结果都会占用上下文窗口。如果工具返回的数据过于冗长,或者包含大量无关字段,用户的上下文窗口会被快速消耗,导致对话能力下降。
优化方向包括:精简工具返回的数据结构,只返回必要字段;合理设置分页或限制返回条数;避免在工具描述中堆砌无关信息。这些优化不会改变业务逻辑,但能显著提升用户体验。
按失败顺序排查,效率最高
这四道关卡的失败顺序是固定的:先检查网络可达性,再检查OAuth身份获取,然后等人工审核,最后优化上下文使用。按这个顺序排查,能最快定位问题所在。每一关都有明确的检查项和常见错误模式,提前做好这些检查,能避免上线后才发现问题。
热门跟贴