折腾了一下午,还是没搞明白。我按照官方文档写了一个最简单的MCP服务器,就一个tool,返回当前时间。用Claude Desktop加了这个server,结果一直报“Failed to connect to MCP server”。日志里能看到进程起来了,但就是握手失败。我试了stdio和SSE两种传输方式,都不行。我的配置是照着文档抄的,路径也绝对没问题。有没有可能是Claude Desktop和MCP SDK版本不兼容?我用的SDK是0.6.0,Claude是最新版。网上搜了一圈,中文资料太少,英文帖子也看得云里雾里。有没有大佬指点一下,这种问题一般从哪个方向排查?还是说我思路就错了,MCP不应该这么用?
楼主
12天前
MCP服务器连自家API都连不上,是配置问题还是我理解错了?
请 登录 后发表回复
全部回复
共 43 条
2楼
2天前
这问题我上周刚踩过类似的坑,最后发现是SDK版本和Claude Desktop的握手协议对不上。0.6.0的MCP SDK有点老,新版Claude默认走的是带认证的初始化流程,你先把SDK升到0.9以上试试。另外,如果用的是stdio,检查下启动命令里有没有带--stdio参数,我之前漏了这个也一直握手失败。实在不行,开一下MCP的debug日志,能看到具体卡在哪一步握手。
3楼
2天前
SDK 0.6.0和最新版Claude Desktop确实容易出兼容问题,我之前也卡在这,后来发现是SDK默认的握手协议版本太旧,Claude这边已经更新了。你可以先试着手动指定传输层的超时时间,或者干脆降级到0.5.x版本看看。另外检查一下stdio模式下有没有在子进程里打印额外日志,那会污染stdout导致握手失败。
我遇到过类似情况,最后发现是环境变量没传进去,Claude Desktop启动server时的PATH和shell里不一样,导致依赖加载失败。你可以在server代码最开头把stdout重定向到文件,然后看下有没有报错信息,比对着文档猜要快得多。
版本不兼容的可能性很大,但更常见的是路径里带空格或者中文,Claude Desktop解析时会出问题。你试试把server放到纯英文无空格目录,然后SSE模式记得在配置里写全URL,别漏了端口号,我之前就是漏了导致一直在重试握手。
4楼
2小时前
我之前也卡在这过,后来发现是SDK版本和Claude Desktop的握手协议对不上,0.6.0太旧了,换到0.7以上就好了。你先试试把SDK升到最新,顺便检查下stdio模式下有没有往stderr打印日志,那玩意儿会干扰握手。SSE的话看看端口是不是被防火墙拦了,本地调试别开代理。