当前位置: 首页 > news >正文

【Bug已解决】Claude Code MCP server connection timeout — Claude Code MCP 连接超时解决方案

【Bug已解决】Claude Code MCP server connection timeout / ECONNREFUSED — Claude Code MCP Server 连接超时解决方案

1. 问题描述

Claude Code 启动后无法连接已配置的 MCP Server,报出连接超时或拒绝连接错误:

# 启动 Claude Code,MCP Server 连接超时 $ claude > 使用 filesystem 工具读取文件 Error: MCP server "filesystem" connection timeout Failed to connect to MCP server within 5000ms at MCPClient.connect (~/.claude/mcp/client.js:45:11) at async Promise.all (index 0) # 或连接被拒绝 $ claude Error: MCP server "github" connection failed ECONNREFUSED 127.0.0.1:3000 Is the MCP server running? # 或 stdio 模式下子进程启动失败 $ claude Error: MCP server "sqlite" failed to start spawn npx ENOENT Command: npx -y @modelcontextprotocol/server-sqlite # 或 MCP Server 启动后立即退出 $ claude Warning: MCP server "postgres" exited with code 1 Error output: Error: Cannot find module 'pg' at require (internal/modules/cjs/loader.js:885) # 或 MCP 工具列表为空 $ claude > 列出所有可用的 MCP 工具 Available MCP tools: (none) # MCP Server 已配置但未提供任何工具

有时表现为:

  • MCP Server 进程启动后立即崩溃
  • stdio 通信管道断裂
  • MCP Server 响应过慢被 Claude Code 判定为超时
  • 配置文件中 server 路径错误
  • MCP Server 依赖缺失导致启动失败
  • 多个 MCP Server 同时连接时部分失败

这个问题在以下场景中特别常见:

  • MCP Server 配置路径错误或不存在
  • MCP Server 依赖的 npm 包未安装
  • stdio 模式下命令执行环境不一致
  • MCP Server 启动时间超过 5 秒超时限制
  • 端口被其他进程占用
  • Node.js 版本不满足 MCP Server 要求

2. 原因分析

核心原理拆解

Claude Code 启动 → 读取 mcp config → 连接每个 MCP Server ↓ stdio 模式: spawn 子进程, 通过 stdin/stdout 通信 sse 模式: HTTP 连接到指定 URL ↓ 子进程启动失败 / 端口未监听 / 超时 / 依赖缺失 ↓ MCP Server 连接失败,相关工具不可用

MCP 通信模式对比

stdio 模式: Claude Code → spawn 子进程 (npx/node/python) → stdin/stdout JSON-RPC 适用于: 本地工具 (filesystem, sqlite, github) 常见问题: 命令找不到、依赖缺失、子进程崩溃 SSE 模式: Claude Code → HTTP GET (事件流) + POST (请求) → 远程 MCP Server 适用于: 远程服务、Web API 集成 常见问题: 端口未监听、CORS、超时

原因分类表

原因分类具体表现占比
命令/路径错误spawn ENOENT, 找不到命令约 30%
依赖缺失Cannot find module, 包未安装约 25%
启动超时超过 5 秒未就绪约 15%
端口冲突EADDRINUSE, 端口被占约 12%
配置错误JSON 格式/字段名错误约 10%
子进程崩溃exit code 1, 运行时错误约 8%

3. 解决方案

方案一:验证 MCP Server 命令可执行(最推荐)

# 步骤 1:查看 MCP 配置 cat ~/.claude/mcp.json # 或项目级配置 cat .claude/mcp.json # 步骤 2:手动执行 MCP Server 命令验证 # 以 filesystem server 为例 npx -y @modelcontextprotocol/server-filesystem /tmp # 如果能正常启动并等待输入,说明命令可用 # 步骤 3:检查 npx 是否可用 which npx which node node --version # MCP Server 通常需要 Node.js 18+ # 步骤 4:如果 npx 找不到 npm install -g npx # 或确保 Node.js 安装正确 nvm install 22 nvm use 22 # 步骤 5:预先安装 MCP Server 包避免每次 npx 下载 npm install -g @modelcontextprotocol/server-filesystem # 配置中使用全局安装的命令

方案二:修复 MCP 配置文件

# 步骤 1:检查配置文件语法 python3 -m json.tool ~/.claude/mcp.json # 确保无语法错误 # 步骤 2:标准配置格式 cat > ~/.claude/mcp.json << 'EOF' { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/zhubo/projects"], "env": { "NODE_PATH": "/usr/local/lib/node_modules" } }, "sqlite": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/tmp/data.db"] } } } EOF # 步骤 3:使用绝对路径避免 PATH 问题 # 查找 npx 绝对路径 which npx # /Users/zhubo/.nvm/versions/node/v22.0.0/bin/npx cat > ~/.claude/mcp.json << 'EOF' { "mcpServers": { "filesystem": { "command": "/Users/zhubo/.nvm/versions/node/v22.0.0/bin/npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] } } } EOF # 步骤 4:验证配置加载 claude --debug 2>&1 | grep -i "mcp" # 应显示 MCP servers loaded: filesystem, sqlite

方案三:增加连接超时时间

# 步骤 1:在 mcp.json 中设置超时 cat > ~/.claude/mcp.json << 'EOF' { "mcpServers": { "postgres": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres"], "timeout": 15000 } }, "defaults": { "connectionTimeout": 15000, "requestTimeout": 30000 } } EOF # 步骤 2:或通过环境变量设置 export CLAUDE_MCP_TIMEOUT=15000 export CLAUDE_MCP_REQUEST_TIMEOUT=30000 # 步骤 3:永久设置 cat >> ~/.zshrc << 'EOF' export CLAUDE_MCP_TIMEOUT=15000 EOF source ~/.zshrc # 步骤 4:对于启动慢的 MCP Server(如需要下载依赖) # 预先安装依赖 npm install -g @modelcontextprotocol/server-postgres npm install -g pg # 步骤 5:重启 Claude Code claude

方案四:修复 SSE 模式端口冲突

# 步骤 1:检查端口是否被占用 lsof -i :3000 # 如果有其他进程占用,更换端口 # 步骤 2:在 mcp.json 中配置 SSE 模式 cat > ~/.claude/mcp.json << 'EOF' { "mcpServers": { "remote-api": { "transport": "sse", "url": "http://127.0.0.1:3100/sse" } } } EOF # 步骤 3:确保 MCP Server 正在监听 # 先启动 MCP Server npx -y @modelcontextprotocol/server-filesystem --port 3100 # 然后启动 Claude Code claude # 步骤 4:测试连通性 curl http://127.0.0.1:3100/sse --max-time 5 # 应返回 SSE 事件流 # 步骤 5:如果端口被占用,杀掉旧进程 kill $(lsof -t -i :3100) claude

方案五:安装缺失依赖

# 步骤 1:手动运行 MCP Server 查看报错 npx -y @modelcontextprotocol/server-sqlite --db-path /tmp/test.db # 如果报 Cannot find module,安装对应依赖 # 步骤 2:常见 MCP Server 依赖 npm install -g @modelcontextprotocol/server-filesystem npm install -g @modelcontextprotocol/server-sqlite npm install -g @modelcontextprotocol/server-postgres npm install -g @modelcontextprotocol/server-github # 步骤 3:Python MCP Server 依赖 pip install mcp pip install psycopg2-binary # postgres # 步骤 4:检查 Node.js 版本兼容性 node -e "console.log(process.version)" # 某些 MCP Server 需要 Node.js 20+ # 步骤 5:验证 MCP Server 能独立运行 echo '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' | \ npx -y @modelcontextprotocol/server-filesystem /tmp # 应返回 JSON-RPC 响应

方案六:调试 MCP Server 启动

# 步骤 1:启用 MCP 调试日志 export CLAUDE_MCP_DEBUG=true claude --debug 2>&1 | grep -i "mcp" # 步骤 2:查看 MCP Server stderr 输出 # stdio 模式下 stderr 会被 Claude Code 捕获 claude --debug 2>&1 | tee /tmp/claude-debug.log grep -i "mcp\|spawn\|exit" /tmp/claude-debug.log # 步骤 3:手动测试 stdio 通信 echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}' | \ npx -y @modelcontextprotocol/server-filesystem /tmp 2>/tmp/mcp-stderr.log cat /tmp/mcp-stderr.log # 查看 stderr 中的错误信息 # 步骤 4:检查 MCP Server 版本 npx -y @modelcontextprotocol/server-filesystem --version # 确保版本与 Claude Code 兼容 # 步骤 5:清理 npx 缓存重试 rm -rf ~/.npm/_npx npx -y @modelcontextprotocol/server-filesystem /tmp

4. 各方案对比总结

方案适用场景推荐指数难度
方案一:验证命令spawn ENOENT⭐⭐⭐⭐⭐
方案二:修复配置配置错误⭐⭐⭐⭐⭐
方案三:增加超时启动慢⭐⭐⭐⭐
方案四:修复端口SSE 模式⭐⭐⭐⭐
方案五:安装依赖模块缺失⭐⭐⭐⭐⭐
方案六:调试日志复杂问题⭐⭐⭐⭐

5. 常见问题 FAQ

5.1 MCP Server 的 stdio 和 SSE 模式有什么区别

  • stdio:Claude Code 启动子进程,通过标准输入/输出通信。适用于本地工具,无需端口
  • SSE:Claude Code 通过 HTTP 连接远程 MCP Server。适用于远程服务,需要端口
  • 两种模式的配置字段不同:stdio 用command+args,SSE 用url

5.2 为什么 npx 每次都很慢

# npx 首次运行时会下载包,可能超过 5 秒超时 # 解决方案:预先全局安装 npm install -g @modelcontextprotocol/server-filesystem # 配置中使用 node 直接运行全局安装的包 which @modelcontextprotocol/server-filesystem # 或查找实际入口 ls $(npm root -g)/@modelcontextprotocol/server-filesystem/dist/index.js

5.3 如何查看哪些 MCP Server 配置了但未连接

# 启动时查看 MCP 连接状态 claude --debug 2>&1 | grep -E "mcp|MCP" # 输出示例: # [DEBUG] MCP server "filesystem": connected ✓ # [DEBUG] MCP server "github": connection failed ✗ (timeout) # [DEBUG] MCP server "sqlite": connected ✓ # 在 Claude Code 中查看可用工具 claude > /mcp # 列出所有 MCP Server 状态

5.4 MCP Server 启动后立即退出怎么办

# 手动运行查看退出原因 npx -y @modelcontextprotocol/server-sqlite --db-path /tmp/test.db 2>&1 # 常见原因: # 1. 依赖缺失 → npm install -g <package> # 2. 参数错误 → 检查 args 配置 # 3. 权限不足 → chmod 修复文件权限 # 4. 数据库文件不存在 → 创建文件

5.5 多个 MCP Server 部分失败怎么办

# Claude Code 会并行连接所有 MCP Server # 一个失败不影响其他 Server # 查看每个 Server 的状态 claude --debug 2>&1 | grep "MCP" # 禁用失败的 Server 临时使用 cat > ~/.claude/mcp.json << 'EOF' { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "disabled": true } } } EOF

5.6 MCP Server 需要环境变量怎么配置

{ "mcpServers": { "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx", "NODE_PATH": "/usr/local/lib/node_modules" } } } }

5.7 如何测试 MCP Server 是否正常工作

# 发送 initialize 请求 echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}' | \ npx -y @modelcontextprotocol/server-filesystem /tmp # 应返回类似: # {"jsonrpc":"2.0","result":{"protocolVersion":"2024-11-05",...},"id":1} # 发送 tools/list 请求 echo '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}' | \ npx -y @modelcontextprotocol/server-filesystem /tmp

5.8 Docker 中 MCP Server 连不上

# Docker 中需要确保 MCP Server 也在容器内运行 # 或通过 host.docker.internal 连接宿主机的 MCP Server # 方案 1:容器内运行 MCP Server docker run -v $(pwd):/workspace node:22 sh -c " npm install -g @modelcontextprotocol/server-filesystem && claude " # 方案 2:连接宿主机 SSE Server # mcp.json 中使用 host.docker.internal { "mcpServers": { "remote": { "transport": "sse", "url": "http://host.docker.internal:3100/sse" } } }

5.9 MCP Server 版本不兼容怎么办

# 查看 MCP 协议版本 echo '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' | \ npx -y @modelcontextprotocol/server-filesystem /tmp | jq .result.protocolVersion # 如果版本不兼容,安装指定版本 npm install -g @modelcontextprotocol/server-filesystem@0.4.0 # 或更新 Claude Code 到最新版 npm update -g @anthropic-ai/claude-code

5.10 排查清单速查表

□ 1. cat ~/.claude/mcp.json 检查配置语法 □ 2. which npx/node 确认命令可用 □ 3. 手动运行 MCP Server 命令验证 □ 4. npm install -g 安装缺失的 MCP 包 □ 5. timeout 设为 15000 增加超时 □ 6. 使用绝对路径代替 npx □ 7. lsof -i 检查 SSE 端口是否占用 □ 8. --debug 查看 MCP 连接日志 □ 9. echo JSON-RPC 测试 stdio 通信 □ 10. disabled: true 临时禁用失败的 Server

6. 总结

  1. 根本原因:MCP Server 连接失败最常见原因是命令/路径错误(30%,spawn ENOENT)和依赖缺失(25%,Cannot find module)
  2. 最佳实践:预先npm install -g安装 MCP Server 包,配置中使用which npx获取的绝对路径
  3. 超时调整:启动慢的 MCP Server 在mcp.json中设置"timeout": 15000,或通过CLAUDE_MCP_TIMEOUT环境变量
  4. 调试方法:手动执行 MCP Server 命令查看 stderr,通过echo JSON-RPC | npx测试 stdio 通信
  5. 最佳实践建议:用claude --debug 2>&1 | grep mcp查看每个 Server 连接状态,失败的 Server 设置"disabled": true临时跳过,逐一修复

故障排查流程图

flowchart TD A[MCP Server 连接失败] --> B[手动运行 MCP Server 命令] B --> C{命令可执行?} C -->|否, ENOENT| D[which npx 检查路径] D --> E[使用绝对路径或安装 npx] E --> F[更新 mcp.json 配置] C -->|是| G{启动成功?} G -->|否, 依赖缺失| H[npm install -g 安装依赖] H --> I[重新运行验证] G -->|是| J{Claude Code 能连接?} J -->|否, 超时| K[增加 timeout 到 15000] K --> L[CLAUDE_MCP_TIMEOUT 环境变量] L --> M[重启 claude] J -->|否, 端口冲突| N[lsof -i 检查端口] N --> O[kill 占用端口的进程] O --> M J -->|是| P{工具列表非空?} P -->|是| Q[✅ 问题解决] P -->|否| R[发送 tools/list JSON-RPC 测试] R --> S[检查 MCP 协议版本兼容性] S --> T[更新 MCP Server 或 Claude Code] T --> M M --> U{是否稳定?} U -->|是| Q U -->|否| V[启用 --debug 调试日志] V --> W[grep mcp 查看连接详情] W --> X[逐个禁用排查] X --> Q
http://www.cnnetsun.cn/news/3251586.html

相关文章:

  • Agent 核心原理:把关键能力落到项目里
  • Caspar:基于符号编程的GPU加速非线性优化库
  • 矢量积法与微分变换法:2 种雅可比矩阵求解方案的 MATLAB 实现与对比
  • BQ25887充电管理芯片与MCU在电池平衡系统中的应用
  • Rhino 8.20 SR20安装配置全指南:兼容性、GPU加速与插件避坑
  • 一天搭建企业级电商应用:AI驱动开发实战指南
  • 双节锂电池主动均衡方案与MP2672A应用详解
  • NSGA-II 多目标遗传算法 Python 实战:SVM 超参数优化 Pareto 前沿可视化
  • Python 3.12 字典性能优化 3 要点:从 O(n) 到 O(1) 的查询实践
  • PInVerify:面向物理实体多视角验证的鲁棒性数据集
  • DeepFilterNet ONNX导出实战:实现音频降噪模型的跨平台部署
  • Android 14 刷机报错深度解析:从‘Can not load Android system’到3种数据挽救方案
  • CentOS 7 Docker CUPS 打印服务器:olbat/cupsd 镜像 3 步部署与 2 类客户端配置
  • PIC18F4515与CMT-8540S-SMT蜂鸣器的嵌入式音频方案
  • MARS流匹配:多模态指令到平滑动作轨迹的实时生成方法
  • C++图形项目中集成msdfgen库:实现高质量矢量字体与图形渲染
  • 无影云电脑部署OpenClaw+iMessage+Qwen3.6-Plus实战指南
  • 高校大数据赛ESIM文本匹配实战代码包(含复赛Notebook、训练脚本与完整说明)
  • MySQL 8.0 完整安装指南:从彻底卸载到配置验证
  • GPT Pro拼车额度均分与网页Chat集成技术方案
  • 豆包App本地知识库离线检索方案
  • ADS8665与PIC18F47Q10的高精度数据采集系统设计
  • 杰理AC632n SDK v1.0 多机连接数据接收:1个关键标志位解决多从机数据混淆
  • sklearn 1.9.0 逻辑回归实战:5步调参网格搜索,AUC提升至0.98
  • JDK环境配置全解析:从下载安装到JAVA_HOME精准设置
  • JetBrains全家桶合规初始化:命令行驱动的开发环境标准化
  • 供热管网水力热力联合仿真MATLAB工具:牛顿-拉夫逊法快速收敛求解器
  • 临时技术团队高效协作:从组队到稳定运转的实战指南
  • LSR硅胶代工的材料选择与常见坑
  • 高速应急车道违停AI识别工具包:YOLOv8轻量模型+PyQt交互界面+全工况训练数据+一键运行