解决 Claude Desktop 无法连接 n8n MCP 服务器问题:从排查到完美解决

Claude Desktop 连 n8n MCP 服务器问题解决

问题背景

n8n升级到1.93.0版本后,在使用 Claude Desktop 集成 n8n 的 MCP (Model Context Protocol) 服务器时,遇到了一个令人困惑的问题:

  • Cursor 编辑器:能够正常连接和使用 n8n MCP 服务器
  • Claude Desktop:无法连接,连接后立即断开
  • 其他 MCP 服务器:在 Claude Desktop 中工作正常

这个问题暴露了不同 MCP 客户端实现之间的兼容性差异,以及 n8n MCP 服务器独特的通信机制。

环境信息

  • Claude Desktop: Claude Sonnet 4
  • n8n: n8n Cloud 实例
  • MCP 协议: 2024-11-05 vs 2025-03-26 版本
  • 传输方式: SSE (Server-Sent Events)
  • 代理工具: supergateway

问题现象

原始配置(不工作)

{
  "mcpServers": {
    "n8n exa ai": {
      "command": "npx",
      "args": [
        "-y",
        "supergateway",
        "--sse",
        "https://xxxapp.app.n8n.cloud/mcp/461a5dfc-c300-4b3c-915e-a752558b3905/sse"
      ]
    }
  }
}

错误日志分析

[supergateway] SSE connected
[supergateway] Response: {
  "protocolVersion": "2025-03-26",
  "capabilities": {"tools": {}},
  "serverInfo": {"name": "n8n-mcp-server", "version": "0.1.0"}
}
Client transport closed
Server transport closed unexpectedly
Server disconnected

关键发现:连接能够建立,初始化握手成功,但随后立即断开。

深度排查过程

第一步:环境验证

首先验证基础环境是否正常:

# 检查 Node.js 环境
node --version  # v20.12.2
npm --version   # 10.5.0
npx --version   # 正常

# 测试基本 MCP 功能
{
  "mcpServers": {
    "test-filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "C:\\Users\\Administrator\\Desktop"]
    }
  }
}

结果:基本 MCP 功能完全正常,问题特定于 n8n。

第二步:网络连接测试

创建直接连接测试脚本:

const https = require('https');

function testN8nEndpoint(url) {
    const req = https.get(url, {
        headers: {
            'Accept': 'text/event-stream',
            'Cache-Control': 'no-cache',
            'Connection': 'keep-alive'
        }
    }, (res) => {
        console.log(`Status: ${res.statusCode}`);
        res.on('data', (chunk) => {
            console.log('Received:', chunk.toString());
        });
    });
}

testN8nEndpoint('https://xxxapp.app.n8n.cloud/mcp/461a5dfc-c300-4b3c-915e-a752558b3905/sse');

关键发现

✅ Connected in 2237ms
Status: 200
📦 Received: event: endpoint
data: /mcp/461a5dfc-c300-4b3c-915e-a752558b3905/messages?sessionId=ed647f60-e670-4863-ac4f-53238db0cfbd

第三步:协议差异分析

通过详细分析日志和网络请求,发现了根本问题:

n8n MCP 服务器使用混合通信模式

  • 📥 SSE 端点/sse - 仅用于接收消息和会话信息
  • 📤 HTTP 端点/messages?sessionId=xxx - 用于发送消息

supergateway 假设纯 SSE 双向通信,试图通过 SSE 发送消息,导致不兼容。

解决方案:自定义双向通信代理

核心思路

创建一个理解 n8n 通信协议的代理服务器:

  1. SSE 连接:监听来自 n8n 的消息和会话信息
  2. HTTP POST:向动态消息端点发送请求
  3. 协议转换:在 Claude MCP 客户端和 n8n 服务器之间转换通信协议

最终解决方案:流式数据处理代理

经过深入分析,我们发现关键问题在于 n8n 通过 SSE 流式传输大型响应数据,JSON 被分成多个块传输,导致解析错误。最终的解决方案是创建一个能正确处理流式数据的代理:

#!/usr/bin/env node

const https = require('https');
const { EventEmitter } = require('events');

class N8nStreamingMCPProxy extends EventEmitter {
    constructor(baseUrl, pathPrefix) {
        super();
        this.baseUrl = base
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoldenSpider.AI

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值