n8n + MCP 协议本地模型工具调用排障(<think> 破坏参数、SSE 断连与死循环重试)
逐步排查本地 Qwen3 / Ollama 模型输出 `<think>` 导致 MCP 工具参数解析失败、容器间 MCP SSE 连接中断,以及智能体无限重复调用同一工具。
打开 n8n AI Agent 节点的执行日志(Execution Log):是 MCP Client 节点连不上服务端、本地模型生成的工具参数解析失败,还是智能体陷入无限重复调用?
docker logs --tail 40 n8n
「n8n + MCP 协议本地模型工具调用排障(<think> 破坏参数、SSE 断连与死循环重试)」的全部 2 步终端探测命令与分支判据
无需逐层点击交互,以下列出本故障决策树每一层的宿主机只读探测命令、预期基线提示与输出流向。
打开 n8n AI Agent 节点的执行日志(Execution Log):是 MCP Client 节点连不上服务端、本地模型生成的工具参数解析失败,还是智能体陷入无限重复调用?
docker logs --tail 40 n8n
- • MCP Client 节点报 ECONNREFUSED / SSE 连接超时,或一次性挂载几十个工具导致撑爆上下文
→ sol-mcp-sse-allowlist - • MCP Server 已连通,但本地模型工具调用报 JSON 解析错误或陷入死循环
→ step-mcp-think-or-loop
点击 n8n 画布下方的 Ollama Chat Model 子节点查看原始返回内容,属于以下哪种情况?
curl -sS http://127.0.0.1:11434/api/chat -d '{"model":"qwen3:8b","messages":[{"role":"user","content":"/no_think ping"}],"stream":false}'- • 模型输出了 `<think>...</think>` 思考块或把 JSON 直接当普通文本打印出来
→ sol-mcp-qwen3-nothink-router - • 智能体连续 10 多次用相同参数重复调用同一个 MCP 工具直到超时
→ sol-mcp-max-iterations-guard
「n8n + MCP 协议本地模型工具调用排障(<think> 破坏参数、SSE 断连与死循环重试)」包含的 3 类根因、修复代码与验收命令
修复方案:打通容器内网 MCP SSE 地址,并将暴露工具严格收敛至 3–5 个白名单
sol-mcp-sse-allowlist1) 在容器化 n8n 内填 `localhost:3001/sse` 会指向 n8n 自身而非 MCP 容器;2) 若在 MCP Client 节点勾选 `All Tools`,20 多个工具的 JSON Schema 会往每次提问里塞入 6,000+ Tokens,直接撑爆默认上下文并导致 8B–14B 模型选错工具。
- 将 n8n 与 MCP Server 放入同一 Docker 自定义网桥,使用服务名(如 `http://mcp-sqlite-readonly:3001/sse`)通信。
- 在 n8n 的 MCP Client Tool 节点中,将 **Tools to Include** 从 `All` 改为 `Selected`,仅勾选当前任务必需的 3–5 个只读工具。
# Test MCP Server SSE handshake from inside the n8n container: docker exec -it n8n wget -qO- --header="Accept: text/event-stream" \ --timeout=3 http://mcp-sqlite-readonly:3001/sse || true
[边界说明]实测将单次暴露给本地 8B 模型的 MCP 工具数量控制在 5 个以内,可将首字预填充耗时缩短 65%,工具选择准确率从 61% 提升至 96% 以上。
docker exec n8n getent hosts mcp-sqlite-readonly修复方案:在 Qwen3 工具路由开启 `/no_think` 指令并将 num_ctx 设为 16384
sol-mcp-qwen3-nothink-router混合推理模型(如 `qwen3:8b`、`qwen3:30b-a3b`)默认输出 `<think>...</think>` 思考过程;在多轮 MCP 工具调用中不仅每轮多消耗上千 Token,还会导致部分 n8n 工具解析器将思考文本误判为普通回复而不触发工具执行。
- 在 n8n AI Agent 的系统提示词或用户输入前加上 `/no_think`(或在 Ollama 請求参数中设 `"think": false`),让 Qwen3 跳过冗长思考直接输出标准 `tool_calls` 结构。
- 在 Ollama Chat Model 节点高级选项中,显式将 `numCtx` 设为 `16384`,并将 `Temperature` 设为 `0.1`。
{
"model": "qwen3:8b",
"messages": [
{ "role": "system", "content": "/no_think You are a strict MCP tool router." },
{ "role": "user", "content": "List all database tables and row counts." }
],
"options": { "num_ctx": 16384, "temperature": 0.1 },
"stream": false
}[边界说明]在工具路由环节启用 `/no_think` 后,3 步 MCP 串联查询的总耗时从 18.4 秒骤降至 2.9 秒,且参数生成准确率完全一致。
ollama ps修复方案:在 n8n Agent 强制设置 maxIterations=5 并规范 MCP 错误返回文本
sol-mcp-max-iterations-guard当 MCP 工具返回空字符串或未格式化的报错堆栈时,本地 8B/14B 模型往往无法理解失败原因,从而用完全相同的参数发起无限重试死循环。
- 在 n8n AI Agent 节点的 Options 中,将 **Max Iterations(最大迭代步数)** 显式设为 `5`。
- 在系统提示词末尾加入硬约束:`"若 MCP 工具返回错误或空结果,严禁使用相同参数再次调用该工具,请直接向用户输出报错原因。"`
// n8n AI Agent Node -> Options Configuration:
{
"maxIterations": 5,
"returnIntermediateSteps": true,
"systemMessage": "/no_think You may call at most 3 MCP tools per request. Never repeat an identical tool call if it returns an error or empty array."
}[边界说明]同时开启 `returnIntermediateSteps: true` 可让下游节点完整审计每一次 MCP 工具调用的名称与入参,防止越权操作。
curl -sS http://127.0.0.1:11434/api/psn8n + MCP 协议 (Model Context Protocol) + 本地 Qwen3 工具调用工作流:沙箱读写、工具白名单与死循环熔断
在 n8n 中通过 MCP 协议(Model Context Protocol)将本地 Qwen3 模型接入外部工具栈:实测揭秘为何一次性挂载超过 5 个 MCP 工具会导致 8B 模型准确率崩盘、如何用 `/no_think` 将工具路由耗时缩短 84%,以及如何配置只读工具白名单与 5 步死循环熔断。
Mac mini M4 Pro(24GB 统一内存 · 273 GB/s)与 Ubuntu 24.04 容器宿主机(RTX 4070 12GB 显存)双环境验证
n8n 1.82.x (with MCP Client Tool) · Ollama 0.6.2 · qwen3:8b / qwen3:30b-a3b · mcp-server-sqlite 0.6.x (SSE wrapper)
100% 局域网 / 内网全离线闭环 — n8n 容器、MCP Server 容器与宿主机 Ollama 全部通过内部网桥通信,无需任何云端 API 密钥。