问题背景
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 通信协议的代理服务器:
- SSE 连接:监听来自 n8n 的消息和会话信息
- HTTP POST:向动态消息端点发送请求
- 协议转换:在 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
Claude Desktop 连 n8n MCP 服务器问题解决

最低0.47元/天 解锁文章

295





