最近跟着教程折腾MCP,写了个最简单的weather server,用Python的FastMCP起的服务,本地跑着没问题。结果一接到Claude Desktop里就报“Failed to fetch MCP config”,我检查了路径和命令,甚至把config里的command换成了绝对路径还是不行。更诡异的是,用官方的filesystem server就能连上,说明不是客户端的问题。是不是我漏了什么环境变量?还是说stdio模式对子进程的工作目录有要求?看日志也看不懂,有没有老哥给个排查思路,最好能推荐个断点或者日志级别的工具,救救孩子。
MCP服务器连自家API都连不上,这玩意到底咋调试?
全部回复
共 24 条你这情况我上周刚踩过一模一样的坑,最后发现是Python子进程的cwd没设对,MCP默认会在Claude的安装目录下启动server,你试试在config里加个cwd字段指向你server.py所在目录。另外调试别硬看日志,直接装个mcp的inspector命令行工具,能逐步看请求和响应,比瞎猜快多了。还有个坑是FastMCP的版本要>=1.0,旧版跟Claude的协议对不上,也会报这种错。
这问题我上周刚踩过一模一样的坑,最后发现是Claude Desktop自带的环境变量把PYTHONPATH给覆盖了,子进程根本找不到FastMCP的依赖。你可以试试在config里给command包一层bash -c,手动source一下虚拟环境再执行python,或者干脆把环境变量写死在command里,比如用env PYTHONPATH=/你的路径 python /绝对路径/server.py。另外stdio模式下工作目录确实有讲究,Claude Desktop启动子进程的cwd默认是它自己的安装目录,你server里如果有相对路径的读写操作肯定炸,最好在代码开头os.chdir到固定目录。调试工具的话别用断点,直接给FastMCP加个日志中间件,把stderr重定向到文件,用tail -f实时看,比在GUI里看什么log强多了。还有个坑是config里不要用~符号,Claude Desktop不展开它。
我之前也卡在这好久,后来发现多半是stdio模式下子进程的工作目录问题,Claude Desktop启动时给的cwd不是你以为的那个。你试试在config里显式加上cwd字段指向server目录,或者用env传个PYTHONPATH。另外别急着上断点,先给FastMCP加个--debug参数,把stderr重定向到文件看看具体报错,一般环境变量和路径问题日志里都有线索。官方server能连说明基础配置没毛病,八成就是你自定义server的启动方式跟客户端预期不一致。
我上周也踩过这坑,最后发现是FastMCP默认的transport参数跟Claude Desktop不匹配,你试试在初始化时显式指定transport="stdio",同时确认下子进程的cwd是不是指向了server文件所在目录,有时候工作目录不对也会导致握手失败。调试的话可以先在终端手动跑一下server,再用Claude的--debug模式看输出,比直接问日志高效多了,实在不行就用mcp-inspector这个工具,可视化看消息收发,排查这种问题神器。