最近在折腾MCP,想给Claude Code接一个本地文件系统的MCP服务器(用的官方filesystem模板)。照着文档配了claude_desktop_config.json,路径、命令、参数都核对了,但每次启动Claude Code时,连接MCP服务器总会卡在“connecting”状态,然后直接报超时。
MCP服务器连Claude Code总超时,是配置问题还是工具链太新?
全部回复
共 121 条八成是Node版本问题,我换到20 LTS后就没再超时过,可以试试。
配置看着没问题的话,试试把超时时间调大点,新工具链默认值确实太保守了。
我也遇到过一模一样的情况,尤其是官方filesystem模板,配完以后卡connecting简直成了日常。后来我仔细查了下,发现大概率不是配置问题,而是Claude Code启动时对MCP server的握手超时设置特别短,而本地文件系统模板初始化的时候会扫描目录,如果路径下文件多或者有网络挂载盘,一下就超了。你可以试试把MCP server的启动命令改成带日志输出的形式,先手动跑一遍看它到底卡在哪一步,我那次就是发现它卡在读取某个隐藏文件夹的权限上。另外,工具链太新这点也成立,Claude Code的MCP客户端实现还在频繁改,很多server的协议版本对不上就会静默失败,你换个更早的SDK版本反而能通。还有个歪招,把超时时间调大,虽然官方文档没直接写,但环境变量里能设,我之前调到60秒就再没出过这问题了。你要是试了这些还不行,建议看下Claude Code的debug日志,里面会明确告诉你server是没起来还是连接被拒,比瞎猜配置强多了。
我之前也遇到过一模一样的情况,官方filesystem模板按理说最稳,结果连超时搞得人想砸电脑。后来发现是Claude Code对本地路径的权限校验特别严格,得在配置里显式加上--allow-root或者把工作目录指到实际有读写权限的文件夹才行。另外你检查下node版本没?太新的Node 20+有时候跟MCP的stdio通信会有兼容坑,降级到18或者用nvm切一下试试,说不定就好了。
我之前也踩过一模一样的坑,后来发现大概率不是配置问题,而是Claude Code那个MCP客户端对stdio协议的处理方式有点特殊。官方filesystem模板默认走的是stdio,但如果你本地Node版本跟它要求的LTS不一致,很容易出现进程起来了但握手迟迟没完成的情况,表现出来就是connecting卡死。可以先试试用npx直接跑一下那个server命令,看看单独启动时有没有报错,或者能不能正常响应JSON-RPC的initialize请求。另外那个claude_desktop_config.json其实只对桌面版生效,如果你用的CLI,得检查下~/.claude.json或者项目里的.mcp.json,很多人把这两个搞混。还有个小技巧,超时时间别用默认值,手动改成30秒甚至更长,有时候是机器性能问题导致首次扫描文件系统太慢,尤其是接整个home目录时。我最后是换成了rust写的mcp-server-fs才稳定下来,工具链太新确实容易有兼容性暗坑,但多试几个实现总有一个能用。
我之前也踩过这个坑,后来发现大部分时候不是配置写错了,而是MCP server启动本身太慢,Claude Code那边的超时阈值又卡得很死。官方那个filesystem模板虽然简单,但node进程拉起来加上依赖初始化,确实容易超过默认的几秒等待。你可以试试在配置里手动加长超时参数,或者先单独在终端跑一下那个命令,看看它到底多久能返回ready,如果这里就慢,那基本就是工具链的锅了。另外,版本问题也很常见,Claude Code跟MCP的协议更新特别快,有时候官方文档跟实际发布的npm包对不上,你检查下是不是用了最新的@modelcontextprotocol/sdk,老版本跟新客户端握手时会话建立就有问题。我最后是换成了用stdio模式直接连,绕开了那个desktop配置的坑,虽然丑但稳定。你那边方便贴下完整的启动日志吗?可能报错信息比超时本身更有线索。
我之前也踩过这个坑,后来发现是node版本太老导致MCP的stdio握手一直失败,换了LTS版本就秒连了。你可以先试试在终端手动跑一下那个启动命令,看有没有报错输出,比干等超时强。另外Claude Code对config里args的解析挺严格的,路径带空格或者引号没转义也会卡住。工具链确实迭代太快,官方文档有时候都没跟上,多翻翻GitHub issues比看README管用。
我最近也踩过类似的坑,而且大概率不是配置写错的问题。官方那个filesystem模板本身其实挺稳的,但MCP这块迭代太快了,Claude Code的客户端版本和server端协议版本稍微对不上就会卡在握手阶段,超时只是表象。
你可以先试试把日志级别调到debug,看它到底卡在哪个环节,是stdio通道没起来还是握手响应没回来。我之前就是卡在server启动时依赖的Node版本和系统默认的不一致,最后是用nvm切到项目要求的版本才解决的。
另外有个容易忽略的点,claude_desktop_config.json里那个args数组如果包含相对路径,而Claude Code的工作目录不是server所在的目录,也会导致进程起不来但进程管理器还傻等着。建议把所有路径都改成绝对路径,别用~。
工具链太新这个说法我同意一半,MCP的规范文档自己都还在改,社区里的示例经常是几天前还能用,今天升级后就废了。你可以试试把Claude Code和MCP SDK都降到稳定版,或者反过来全升到最新beta,有时候旧版本反而兼容性更好。
还有个偏方,如果你用的是本地文件系统这种简单需求,不如先绕开MCP,直接写个shell命令给Claude Code调用,等MCP生态稳定了再迁回来,省得浪费一晚上调试。
我上周也踩过这个坑,后来发现是Node版本太低,MCP的SDK要求Node 18+,换了LTS版本立马就好了。你可以先跑一下node -v看看,顺便确认下npx缓存是不是旧的,有时候清了重装反而省事。另外官方那个filesystem模板对路径处理有点怪,试试绝对路径+反斜杠转义,我这么改完就没再超时过。
我之前也踩过这个坑,后来发现是npx版本对不上,Claude Code调MCP时用的Node路径跟本地默认的不一致。你可以试试在config里把命令改成绝对路径,或者先手动跑一下npx @modelcontextprotocol/server-filesystem看看能不能正常起来。另外超时时间默认太短也是个原因,官方模板现在对stdio的握手要求更严格了,稍微慢点就断。
我之前也卡在这过,后来发现是Claude Code读取的配置文件跟desktop版不是同一个,它默认找的是~/.claude.json那个路径,你确认下改对地方没。另外官方filesystem模板对node版本要求挺高的,我换到20+才稳,你可以试试在终端手动跑一下server命令看有没有报错,能排除是不是环境变量的问题。超时也可能是首次握手要编译TS文件,多等十几秒有时候就过了,实在不行把日志级别调成debug看看卡在哪个环节。
我之前也遇到过一模一样的情况,后来发现是本地代理没走对,Claude Code去连localhost的时候被系统代理拦了。你检查下有没有开VPN或者代理工具,把localhost加进白名单试试。另外官方filesystem模板有时候初始化会静默失败,可以先手动跑一下npx @modelcontextprotocol/server-filesystem看能不能正常起来,能起来再排查配置,别一上来就怀疑超时是网络问题。
我之前也遇到过一模一样的情况,后来发现八成不是配置写错了,而是本地起服务那一下太慢,Claude Code那边连接超时设得又短。官方那个filesystem模板默认要编译或者拉依赖,第一次跑冷启动能慢到十几秒,而客户端可能几秒就放弃等待了。你可以试试先手动在终端把那个MCP server跑起来,确认它真的能在几秒内就绪,再用工具连一次,这样能区分是服务本身起不来还是握手阶段的问题。另外注意下那个配置文件里环境变量继承的问题,有时候你shell里设了代理或者NODE_OPTIONS,会影响到子进程的启动速度。如果手动启动没问题,那大概率是工具链太新跟Claude Code的握手协议有兼容瑕疵,可以看看官方GitHub的issue区,最近不少人反馈这个,有人通过降级Claude Code版本或者换用stdio传输方式解决了。还有个偏方,把超时时间在配置里显式调大,虽然文档没写这个字段,但实测有些版本认这个参数。
我也遇到过一模一样的状况,当时差点把电脑砸了。后来发现大概率不是配置写错,而是MCP那套握手逻辑对本地路径解析特别敏感,尤其是Windows下如果路径里带了反斜杠或者空格,Claude Code内部转义会直接出问题,建议你试试把路径换成正斜杠并且用引号整体包住。另外官方那个filesystem模板其实依赖Node版本挺新的,我原来用16死活连不上,升到20以后就稳了,你可以先跑一下node --version看看。还有个坑是它默认会去读用户目录下的.mcp.json,如果之前试过别的服务器残留了配置,可能会跟全局配置冲突导致超时,把那个文件临时改名再试一次。如果还不行,开debug模式看日志,超时前有没有报ECONNREFUSED或者握手协议版本不匹配,那基本就是工具链太新跟Claude Code当前版本有兼容性问题,只能等两边更新了。
八成是MCP服务器启动时等握手等太久了,Claude Code那边超时设得短,先试试手动起服务再连,或者把超时调大点。
大概率是stdio传输模式下启动日志没排干净,卡在初始化了,我上次换npx路径带空格也这样,改绝对路径立马好。
我前两天也踩过这个坑,官方模板按理说最稳,但反而问题最多。后来发现是Node版本太新,MCP那个SDK对某些API的兼容性有点迷,降回18版本就正常了,你可以先试试这个。另外你确认下是不是用了localhost,有时候系统代理会拦截本机回环流量,超时就是这么来的,把代理关掉或者给Claude Code加个NO_PROXY环境变量试试。还有个容易忽略的点,就是MCP服务器启动后有没有日志输出,如果没有,八成是进程压根没起来,而不是连接问题,你直接手动跑一下那个命令看报错更直观。说实话现在MCP工具链迭代太快,文档都追不上代码,很多配置项示例是旧的,建议直接看GitHub上最新的issue,比官方文档有用多了。
八成是stdio路径没配对,Windows下尤其容易踩坑,试试用绝对路径加node前缀。
超时多半是node版本太新跟MCP的IPC握手有兼容问题,锁到20 LTS看看。
八成是Node版本和MCP SDK不兼容,上次我锁到20.x就好了,你试试看?
八成是stdio路径没配对,Windows下记得用绝对路径而且别漏了npx那层引号。
我也踩过这个坑,后来发现是Claude Code启动时会先做一次握手探测,如果MCP服务器首次响应太慢就直接判超时了。你试试手动在终端跑一下那个filesystem server的命令,看能不能正常输出,有时候是npx拉包卡住了。还有个可能是配置里command写的是相对路径,Claude Code的工作目录跟你想象的不一样,换成绝对路径再试。
我之前也踩过这个坑,卡在connecting不一定是配置写错了,先把Claude Code的日志开到debug级别,看它到底有没有把stdio的握手发出去。官方filesystem模板现在推荐用npx启动,你如果本地Node版本太老,或者路径里带空格没转义,握手就会直接挂掉。还有个容易忽略的点是MCP服务器不能往stdout打任何多余日志,一打就污染协议,表现就是一直连不上然后超时。建议先拿一个最小echo服务器验证链路,再换filesystem模板,能省不少时间。