n8n连接自建FastAPI MCP本地服务器失败求助
问题描述
我正在搭建可调用自建FastAPI MCP本地服务器工具的n8n工作流,但n8n始终无法连接该MCP服务器。已完成以下排查:
- 通过MCP-Inspector和Cursor验证MCP服务器运行正常(附相关截图)
- 运行n8n的Docker命令已添加
N8N_SKIP_RESPONSE_COMPRESSION环境变量,尝试解决SSE传输的gzip问题,但未生效 - 参考过相关社区线程后仍无法解决
现附上n8n工作流、MCP Client配置截图及n8n调试信息,寻求解决方案。
可能的解决方案
1. 排查容器与本地服务的网络互通
如果n8n运行在Docker容器中,默认网络模式下无法直接用localhost访问宿主机的MCP服务:
- 将MCP服务器的监听地址改为
0.0.0.0,允许外部访问 - 在n8n的MCP Client配置中,替换
localhost为宿主机局域网IP(如192.168.x.x),或使用Docker宿主机别名host.docker.internal(仅适配Windows/macOS Docker Desktop)
2. 确认环境变量正确加载
验证N8N_SKIP_RESPONSE_COMPRESSION是否被n8n容器读取:
- 进入n8n容器执行命令:
echo $N8N_SKIP_RESPONSE_COMPRESSION,检查输出是否为true - 若未生效,修正Docker启动命令,确保环境变量配置正确,示例:
docker run -it --rm -p 5678:5678 -e N8N_SKIP_RESPONSE_COMPRESSION=true n8nio/n8n
3. 配置FastAPI的CORS规则
FastAPI默认可能限制跨域请求,导致n8n无法连接。添加CORS中间件:
from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() app.add_middleware( CORSMiddleware, allow_origins=["*"], # 生产环境建议指定n8n实际域名/IP allow_credentials=True, allow_methods=["*"], allow_headers=["*"], )
4. 启用n8n调试日志定位错误
添加调试级日志获取详细错误信息:
- 在Docker启动命令中加入
N8N_LOG_LEVEL=debug环境变量 - 查看容器日志:
docker logs <n8n-container-id>,定位具体错误(如连接超时、4xx/5xx响应码)
5. 直接测试MCP服务器的SSE端点
用curl验证MCP的SSE数据流是否正常:
curl -N http://<mcp-server-ip>:<port>/your-sse-endpoint
若curl能接收数据,问题出在n8n配置或网络层面;若curl也失败,排查MCP服务器的SSE实现逻辑。
内容的提问来源于stack exchange,提问作者Hedgineering
相关产品推荐
相关产品推荐

