MCP SQL tools fail with “only 1 query parameter(s) are set” after upgrading to 2.45.7

“MCP SQL tools fail with “only 1 query parameter(s) are set” after upgrading to 2.45.7” 通常出现在 MCP 工具调用 Microsoft SQL Tool 节点、且需要两个及以上 SQL 占位符参数时,节点把逗号

快速结论:“MCP SQL tools fail with “only 1 query parameter(s) are set” after upgrading to 2.45.7” 通常出现在 MCP 工具调用 Microsoft SQL Tool 节点、且需要两个及以上 SQL 占位符参数时,节点把逗号分隔的 Query_Parameters 只识别成一个参数。优先排查 Query Parameters(queryReplacement)是固定值还是表达式,以及表达式输出的类型。

适用环境:自托管 n8n,升级至 2.45.7(此前升级来源记录为 2.45,具体前一个补丁版本未记录);Microsoft SQL 后端(Microsoft SQL Tool 节点);两个独立的 MCP 服务器(报告中分别称为 CHACAL 与 WINDEV)均复现。Issue 未确认操作系统、Python、CUDA、显卡等环境信息。

最快修复方案:暂无确认的一步修复方案。Issue 建议优先尝试把工具参数由逗号分隔字符串改为数组类型传入,例如使用 {{ $fromAI('Query_Parameters', 'Values for $1, $2 ... as an array', 'json') }},将表达式类型设为 JSON 并输出数组;该做法来自维护者建议,尚未在 Issue 中标记为已验证。

注意事项:Issue 中后续测试显示,即便把表达式改成数组形式 {{ ["30", "Paris"] }} 也仍然失败,因此“改数组”并非确定修复;固定值 30,Paris 可用,但等价表达式不可用,说明问题可能出在表达式模式的参数解析路径上,根因尚未确认。

问题场景

用户在自托管 n8n 从 2.45 升级到 2.45.7 后,通过 MCP Server Trigger 暴露的 Microsoft SQL Tool 节点执行查询。工具的输入 schema 提供一个字符串参数 Query_Parameters,说明为逗号分隔值,依次对应 SQL 占位符 $1、$2 等。调用时传入 {"Query_Parameters": "dbo,tbl_Projet"},此前可正常解析为两个参数,升级后却被判定只有一个参数。两个 MCP 服务器(CHACAL、WINDEV)上所有需要两个参数的工具均失败,零参数或单参数的工具正常,例如 list_tables、search_schema 成功,而 describe_table、get_relationships、search_business_description 报参数错误。另有一个关系工具传入 "dbo,"(第二个值为空)时同样报缺失 $2。

报错原文

NodeOperationError: The query references $2, but only 1 query parameter(s) are set

原因分析

可能原因:共享 SQL 参数解析器在解析 Query_Parameters 时,只得到了一个值。根据维护者与协作者的讨论,解析器在固定模式下会把求值后的字符串按逗号拆分,在表达式模式下会先按逗号拆分原始表达式文本、再逐段求值。而 MCP 工具 schema 传入的是一个字符串 "dbo,tbl_Projet",因此需要确认它走的是哪条解析路径。维护者表示近期为表达式(尤其 SQL 等敏感节点)增加了边界情况的安全处理,这条 MCP 字符串输入路径可能因此出现回归,但根因尚未确认。后续复现显示:固定值 30,Paris 正常,而表达式 {{ '30,Paris' }} 与数组表达式 {{ ["30", "Paris"] }} 均失败,进一步指向表达式模式下的参数处理问题。

环境排查

  • 确认 n8n 版本是否已升级到 2.45.7,并记录升级前的确切补丁版本(原报告未记录)。
  • 确认数据库类型为 Microsoft SQL Server,节点为 Microsoft SQL Tool(n8n-nodes-base.microsoftSqlTool)。
  • 确认触发方式为 MCP Server Trigger,以及受影响工具的输入 schema 中 Query_Parameters 的类型是 string 还是 array 或 json。
  • 确认 SQL 节点中 Query Parameters 的 queryReplacement 配置为固定值还是 n8n 表达式。
  • 分别测试固定值、逗号分隔字符串表达式、数组表达式三种写法,对比结果。
  • 确认查询文本中的占位符数量与传入值数量一致,例如 $1、$2 必须对应两个值。

解决步骤

  1. 先做最小化对比测试:新建 Microsoft SQL Tool 节点,使用包含 $1、$2 的简单查询,分别把 Query Parameters 设为固定值 30,Paris、表达式 {{ '30,Paris' }}、表达式 {{ ["30", "Paris"] }},确认哪种写法能正常执行。
  2. 若固定值可用而 MCP 传入的字符串表达式不可用,按维护者建议可优先尝试改为由工具提供数组而非逗号分隔字符串,例如 {{ $fromAI('Query_Parameters', 'Values for $1, $2 ... as an array', 'json') }},并把表达式类型切换为 JSON,让参数以数组形式注入。
  3. 修改后重新运行此前失败的工具调用,输入仍为 {"Query_Parameters": "dbo,tbl_Projet"} 的等价数据,观察是否仍报 $2 缺失。
  4. 若改数组后依然失败(如协作者复现所示),说明问题可能仍在表达式模式的解析路径,可临时改为固定值或在查询中减少对多参数的依赖,并准备好一份脱敏的工作流导出,向 Issue 补充Query_Parameters 是固定值还是表达式、以及表达式输出类型。
  5. 持续跟进原 Issue 及内部跟踪单 GHC-9703 的处理进展,等待官方修复版本。

验证方法

用此前失败的两个参数工具分别测试:Query_Parameters 传 dbo,tbl_Projet、dbo,tb_Activite,以及关键字与来源类工具传 Dormant,RS,应不再出现 only 1 query parameter(s) are set;单参数与无参数工具(如 list_tables、search_schema)保持正常;基础只读查询(如 SELECT CAST(1 AS int) AS mcp_test)仍能返回结果。若只在某一种表达式写法下成功,说明修复具有条件性,仍需继续跟进。

参考来源

n8n-io/n8n #43023

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 32629

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注