MCP 连接问题排查指南

本文档将帮助您解决 iFlow CLI 中 MCP(Model Context Protocol)服务器连接失败的问题。

目录

  1. MCP 简介
  2. 常见问题与解决方案
  3. 系统化排查步骤
  4. MCP 服务器类型
  5. 高级排查技巧
  6. 常见错误信息解读

MCP 简介

MCP(Model Context Protocol)是一种允许 AI 模型与外部工具和服务交互的协议。在 iFlow CLI 中,MCP 服务器提供额外的功能,如代码分析、文档查询、UI 组件生成等。

MCP 服务器状态说明

  • :green_circle: Ready(就绪):服务器已连接并可正常使用
  • :counterclockwise_arrows_button: Starting(启动中):服务器正在初始化,首次启动可能需要较长时间
  • :red_circle: Disconnected(断开):服务器未连接或连接失败

操作系统差异说明

不同操作系统在处理 MCP 连接时可能遇到特定问题,请根据您的系统选择对应的解决方案。

系统识别

# macOS
uname -s  # 输出: Darwin

# Linux
uname -s  # 输出: Linux

# Windows
# 在 PowerShell 中运行
$env:OS  # 输出: Windows_NT

常见问题与解决方案

问题 1:提示"No MCP servers configured"

症状:运行 /mcp list 显示没有配置任何 MCP 服务器

解决方案

  1. 安装 MCP 服务器(以 context7 为例):

    iflow mcp add-json -s user 'context7' '{"command":"npx","args":["-y","@iflow-mcp/context7-mcp@1.0.0"]}'
    
  2. 验证配置文件
    检查 ~/.iflow/settings.json 文件中是否有 mcpServers 配置:

    {
      "mcpServers": {
        "context7": {
          "command": "npx",
          "args": ["-y", "@iflow-mcp/context7-mcp@1.0.0"]
        }
      }
    }
    

问题 2:MCP 服务器显示"Disconnected"(已安装但无法连接)

症状:运行 /mcp list 显示服务器状态为 :red_circle: Disconnected,即使已经成功安装

可能原因

  • MCP 服务器启动失败
  • 依赖包未正确安装
  • 服务器执行权限问题
  • 服务器代码存在错误
  • 环境变量缺失

解决方案

  1. 首先尝试刷新连接

    /mcp refresh
    

    等待 10-15 秒后再次检查状态。

  2. 手动测试服务器启动(根据系统选择):

    macOS/Linux

    npx -y @iflow-mcp/context7-mcp@1.0.0
    

    Windows (PowerShell)

    npx -y "@iflow-mcp/context7-mcp@1.0.0"
    

    Windows (CMD)

    npx -y @iflow-mcp/context7-mcp@1.0.0
    

    正常输出应该类似

    Content-Length: xxx
    
    {"jsonrpc":"2.0","method":"initialize"...}
    

    如果看到错误信息,记录下来用于排查。

  3. 检查 npm 包是否正确安装

    macOS/Linux

    # 清理 npx 缓存
    rm -rf ~/.npm/_npx/
    
    # 重新安装并测试
    npx --yes @iflow-mcp/context7-mcp@1.0.0
    

    Windows (PowerShell)

    # 清理 npx 缓存
    Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache\_npx"
    
    # 重新安装并测试
    npx --yes "@iflow-mcp/context7-mcp@1.0.0"
    
  4. 检查日志文件

    macOS/Linux

    ls -la ~/.iflow/logs/
    ls -la /tmp/*mcp*
    

    Windows

    dir "$env:USERPROFILE\.iflow\logs"
    dir "$env:TEMP\*mcp*"
    
  5. 验证运行环境

    macOS/Linux

    # Python 服务器需要 Python
    python --version
    python3 --version
    
    # 环境变量
    echo $PATH
    echo $NODE_PATH
    

    Windows

    # Python 服务器需要 Python
    python --version
    
    # 环境变量
    echo $env:PATH
    echo $env:NODE_PATH
    
  6. 尝试重新安装 MCP 服务器

    # 先删除
    iflow mcp remove context7
    
    # 重新添加
    iflow mcp add-json -s user 'context7' '{"command":"npx","args":["-y","@iflow-mcp/context7-mcp@1.0.0"]}'
    
    # 刷新
    /mcp refresh
    
  7. 检查服务器兼容性
    某些 MCP 服务器可能不兼容您的系统:

    • 检查服务器文档了解系统要求
    • 确认 Node.js 版本符合要求(通常需要 v20+)
    • 在 Windows 上某些 Unix 特定的服务器可能无法工作

问题 3:MCP 服务器一直显示"Starting…"

症状:运行 /mcp list 后服务器长时间处于 :counterclockwise_arrows_button: Starting 状态

解决方案

  1. 检查 Node.js 和 npx 是否安装

    macOS/Linux

    node --version  # 应显示 v20.0.0 或更高版本
    npx --version   # 应显示版本号
    

    Windows (PowerShell)

    node --version
    npx --version
    

    如果未安装 Node.js

    macOS

    # 使用 Homebrew
    brew install node
    
    # 或使用 nvm
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
    nvm install 20
    nvm use 20
    

    Linux (Ubuntu/Debian)

    # 使用 apt
    curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
    sudo apt-get install -y nodejs
    
    # 或使用 nvm
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
    nvm install 20
    

    Windows

    # 使用 winget
    winget install OpenJS.NodeJS.LTS
    
    # 或从官网下载
    # https://nodejs.org/zh-cn/download/
    
  2. 手动测试 MCP 服务器是否能启动

    npx -y @iflow-mcp/context7-mcp@1.0.0
    

    如果能正常启动,应该看到类似输出:

    MCP server started on stdio
    

    按 Ctrl+C 退出测试。

  3. 检查网络连接

    macOS/Linux

    ping -c 4 registry.npmjs.org
    curl -I https://registry.npmjs.org
    

    Windows

    ping -n 4 registry.npmjs.org
    curl.exe -I https://registry.npmjs.org
    

    配置代理(如果需要):

    所有系统

    npm config set proxy http://your-proxy:port
    npm config set https-proxy http://your-proxy:port
    
    # 查看当前代理设置
    npm config get proxy
    npm config get https-proxy
    
    # 清除代理设置
    npm config delete proxy
    npm config delete https-proxy
    
  4. 清理 npm 缓存

    macOS/Linux

    npm cache clean --force
    rm -rf ~/.npm/_cacache
    

    Windows

    npm cache clean --force
    Remove-Item -Recurse -Force "$env:LOCALAPPDATA\npm-cache"
    
  5. 刷新 MCP 服务器列表
    在 iFlow CLI 中运行:

    /mcp refresh
    

问题 4:OAuth 认证失败

症状:某些 MCP 服务器显示"OAuth not authenticated"或"OAuth token expired"

解决方案

  1. 执行认证命令

    /mcp auth <服务器名称>
    

    例如:/mcp auth github

  2. 检查浏览器是否正常打开
    OAuth 认证需要在浏览器中完成,确保:

    • 默认浏览器能正常打开
    • 防火墙未阻止本地回调端口(通常是 3000-4000 范围)
  3. 手动清理过期 token
    删除 ~/.iflow/mcp-tokens.json 文件,然后重新认证

问题 4:权限问题

症状:显示"Permission denied"、"EACCES"或类似错误

解决方案

macOS/Linux

  1. 检查文件权限

    ls -la ~/.iflow/
    chmod 700 ~/.iflow
    chmod 600 ~/.iflow/settings.json
    
    # 如果需要,更改所有者
    sudo chown -R $(whoami) ~/.iflow
    
  2. macOS 特定问题
    如果遇到"Operation not permitted"错误:

    • 打开"系统偏好设置" → “安全性与隐私” → “隐私”
    • 选择"完全磁盘访问"
    • 点击锁图标解锁
    • 添加您的终端应用(Terminal.app 或 iTerm2)
    • 重启终端
  3. Linux 特定问题

    # SELinux 可能阻止访问
    sudo setenforce 0  # 临时禁用 SELinux
    
    # 或永久配置
    sudo vi /etc/selinux/config
    # 设置 SELINUX=permissive
    

Windows

  1. 检查文件权限

    # 查看权限
    Get-Acl "$env:USERPROFILE\.iflow"
    
    # 获取所有权
    takeown /f "$env:USERPROFILE\.iflow" /r
    
    # 授予完全控制权限
    icacls "$env:USERPROFILE\.iflow" /grant "${env:USERNAME}:F" /t
    
  2. 以管理员身份运行

    • 右键点击终端(PowerShell/CMD)
    • 选择"以管理员身份运行"
  3. Windows Defender 问题

    • 打开 Windows 安全中心
    • 病毒和威胁防护 → 管理设置
    • 添加排除项 → 文件夹
    • 添加 %USERPROFILE%\.iflow

系统化排查步骤

第 1 步:检查基础环境

macOS/Linux

# 检查 Node.js 版本
node --version  # 需要 v20.0.0 或更高

# 检查 npm 和 npx
npm --version
npx --version

# 检查 iFlow CLI 版本
iflow --version

# 检查系统信息
uname -a

Windows

# 检查 Node.js 版本
node --version  # 需要 v20.0.0 或更高

# 检查 npm 和 npx
npm --version
npx --version

# 检查 iFlow CLI 版本
iflow --version

# 检查系统信息
systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

第 2 步:查看当前 MCP 状态

在 iFlow CLI 中运行:

/mcp list

记录每个服务器的状态(:green_circle:/:counterclockwise_arrows_button:/:red_circle:)。

第 3 步:检查配置文件

macOS/Linux

cat ~/.iflow/settings.json | grep -A 10 mcpServers

# 验证 JSON 格式
python -m json.tool ~/.iflow/settings.json > /dev/null && echo "JSON格式正确" || echo "JSON格式错误"

Windows

# 查看配置
Get-Content "$env:USERPROFILE\.iflow\settings.json" | Select-String "mcpServers" -Context 0,10

# 验证 JSON 格式
try { 
    Get-Content "$env:USERPROFILE\.iflow\settings.json" | ConvertFrom-Json | Out-Null
    Write-Host "JSON格式正确" -ForegroundColor Green
} catch { 
    Write-Host "JSON格式错误: $_" -ForegroundColor Red
}

确保 JSON 格式正确,没有语法错误。

第 4 步:测试单个 MCP 服务器

选择一个有问题的服务器,手动运行其命令。例如,对于 context7:

# 从配置中获取命令
npx -y @iflow-mcp/context7-mcp@1.0.0

观察输出是否有错误信息。

第 5 步:刷新并重试

  1. 在 iFlow CLI 中刷新:

    /mcp refresh
    
  2. 等待 10-30 秒让服务器完成初始化

  3. 再次检查状态:

    /mcp list
    

MCP 服务器类型

1. iFlow MCP 市场提供的服务器

这些是经过验证的官方 MCP 服务器,通过以下命令安装:

# 示例:安装 context7(文档查询)
iflow mcp add-json -s user 'context7' '{"command":"npx","args":["-y","@iflow-mcp/context7-mcp@1.0.0"]}'

# 示例:安装 sequential-thinking(逻辑推理)
iflow mcp add-json -s user 'sequential-thinking' '{"command":"npx","args":["-y","@modelcontextprotocol/server-sequential-thinking"]}'

查看可用的官方 MCP 服务器:

/mcp online

2. 用户自定义 MCP 服务器

您也可以添加自己找到的或开发的 MCP 服务器:

# 添加本地 MCP 服务器
iflow mcp add-json -s user 'my-server' '{"command":"node","args":["path/to/my-server.js"]}'

# 添加 Python MCP 服务器
iflow mcp add-json -s user 'python-server' '{"command":"python","args":["path/to/server.py"]}'

高级排查技巧

1. 启用调试模式

DEBUG=* iflow

这将显示详细的调试信息,包括 MCP 服务器的启动过程。

2. 检查端口占用

某些 MCP 服务器可能需要特定端口:

macOS

lsof -i :3000-4000
# 或查看特定端口
sudo lsof -i :3000

# 终止占用端口的进程
kill -9 <PID>

Linux

ss -tulpn | grep -E ':(3000|3001|3002|3003|4000)'
# 或使用 netstat
netstat -tulpn | grep -E ':(3000|3001|3002|3003|4000)'

# 查看进程详情
ps aux | grep <PID>

Windows

# 查看端口占用
netstat -ano | findstr :3000

# 查看进程名称
tasklist | findstr <PID>

# 终止进程
taskkill /PID <PID> /F

3. 手动编辑配置文件

如果通过命令无法添加,可以直接编辑 ~/.iflow/settings.json

{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "@package-name"],
      "env": {
        "CUSTOM_VAR": "value"
      }
    }
  }
}

保存后运行 /mcp refresh 刷新配置。

4. 隔离测试

创建一个最小配置进行测试:

  1. 备份当前配置:

    cp ~/.iflow/settings.json ~/.iflow/settings.json.backup
    
  2. 创建最小配置:

    echo '{"mcpServers":{"test":{"command":"echo","args":["MCP Test"]}}}' > ~/.iflow/settings.json
    
  3. 测试是否能识别:

    /mcp list
    
  4. 恢复原配置:

    mv ~/.iflow/settings.json.backup ~/.iflow/settings.json
    

常见错误信息解读

“EACCES: permission denied”

  • 原因:权限不足
  • 解决:检查文件和目录权限,确保当前用户有读写权限

“ENOENT: no such file or directory”

  • 原因:找不到指定的命令或文件
  • 解决:确保 Node.js、npm 已正确安装,路径正确

“ECONNREFUSED”

  • 原因:连接被拒绝,通常是端口问题
  • 解决:检查防火墙设置,确保所需端口未被占用

“MODULE_NOT_FOUND”

  • 原因:找不到所需的 npm 包
  • 解决:清理 npm 缓存后重试:npm cache clean --force

“Invalid JSON in settings”

  • 原因:配置文件 JSON 格式错误
  • 解决:使用 JSON 验证工具检查 ~/.iflow/settings.json

“Server disconnected unexpectedly”

  • 原因:MCP 服务器进程意外退出
  • 解决
    1. 手动运行服务器命令查看具体错误
    2. 检查系统资源(内存、CPU)是否充足
    3. 查看是否有杀毒软件阻止进程

“Timeout waiting for server response”

  • 原因:服务器响应超时
  • 解决
    1. 首次启动可能需要下载依赖,请耐心等待
    2. 检查网络连接稳定性
    3. 尝试增加超时时间配置

获取帮助

如果以上方法都无法解决问题:

  1. 收集诊断信息

    macOS/Linux

    # 系统信息
    uname -a
    
    # Node.js 信息
    node --version
    npm --version
    npm config list
    
    # iFlow 配置
    cat ~/.iflow/settings.json
    
    # 错误日志
    DEBUG=* iflow 2>&1 | tee iflow-debug.log
    

    Windows

    # 系统信息
    systeminfo
    
    # Node.js 信息
    node --version
    npm --version
    npm config list
    
    # iFlow 配置
    Get-Content "$env:USERPROFILE\.iflow\settings.json"
    
    # 错误日志(在 PowerShell 中)
    $env:DEBUG="*"
    iflow 2>&1 | Tee-Object -FilePath iflow-debug.log
    
  2. 查看官方文档

  3. 联系支持

    • 在 iFlow CLI 中运行 /bug 报告问题
    • 访问 GitHub Issues 提交问题

快速检查清单

  • Node.js 版本 ≥ 20.0.0
  • npx 命令可用
  • 网络连接正常(能访问 registry.npmjs.org
  • ~/.iflow 目录有读写权限
  • settings.json 格式正确
  • 防火墙未阻止必要端口
  • 手动运行 MCP 命令无错误
  • 已尝试 /mcp refresh 刷新连接
  • 检查服务器状态(:green_circle:/:counterclockwise_arrows_button:/:red_circle:
  • 如显示 Disconnected,手动测试服务器启动

按照这个清单逐项检查,大部分 MCP 连接问题都能得到解决。

特别提醒:关于"已安装但显示 Disconnected"

这是最常见的问题之一。安装成功不代表能正常连接。MCP 服务器显示 Disconnected(:red_circle:)通常意味着:

  1. 服务器进程无法启动 - 最常见原因
  2. 缺少运行时依赖 - 如 Python 服务器需要 Python 环境
  3. 权限问题 - 服务器文件无执行权限
  4. 版本不兼容 - Node.js 版本过低或过高
  5. 系统特定问题 - Windows 防火墙、macOS 安全限制、Linux SELinux

快速诊断方法

macOS/Linux

# 1. 查看配置中的命令
cat ~/.iflow/settings.json | grep -A 5 "服务器名称"

# 2. 手动运行该命令
# 例如:npx -y @iflow-mcp/context7-mcp@1.0.0

# 3. 观察错误信息并对症下药

Windows

# 1. 查看配置中的命令
Get-Content "$env:USERPROFILE\.iflow\settings.json" | Select-String "服务器名称" -Context 0,5

# 2. 手动运行该命令
# 例如:npx -y "@iflow-mcp/context7-mcp@1.0.0"

# 3. 观察错误信息并对症下药

如果手动运行正常但 iFlow 中仍显示 Disconnected,尝试:

  1. 完全退出 iFlow CLI(/quit
  2. 重新启动 iFlow
  3. 等待 30 秒让服务器完成初始化
  4. 运行 /mcp list 查看状态

1 个赞

补充一个MCP Disconnected(断开):服务器未连接或连接失败无法建联的场景。

MCP Oauth refresh_token失效或不存在

排查方式:

npx mcp-remote <YOUR_MCP_SERVER_ADDRESS>

修复方式,参考https://www.npmjs.com/package/mcp-remote,清理MCP auth缓存

rm -rf ~/.mcp-auth
1 个赞