快速结论:“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必须对应两个值。
解决步骤
- 先做最小化对比测试:新建 Microsoft SQL Tool 节点,使用包含
$1、$2的简单查询,分别把Query Parameters设为固定值30,Paris、表达式{{ '30,Paris' }}、表达式{{ ["30", "Paris"] }},确认哪种写法能正常执行。 - 若固定值可用而 MCP 传入的字符串表达式不可用,按维护者建议可优先尝试改为由工具提供数组而非逗号分隔字符串,例如
{{ $fromAI('Query_Parameters', 'Values for $1, $2 ... as an array', 'json') }},并把表达式类型切换为 JSON,让参数以数组形式注入。 - 修改后重新运行此前失败的工具调用,输入仍为
{"Query_Parameters": "dbo,tbl_Projet"}的等价数据,观察是否仍报$2缺失。 - 若改数组后依然失败(如协作者复现所示),说明问题可能仍在表达式模式的解析路径,可临时改为固定值或在查询中减少对多参数的依赖,并准备好一份脱敏的工作流导出,向 Issue 补充
Query_Parameters是固定值还是表达式、以及表达式输出类型。 - 持续跟进原 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)仍能返回结果。若只在某一种表达式写法下成功,说明修复具有条件性,仍需继续跟进。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: runai_safetensors_weights_iterator yields tensors in nondeterministic order, breaking FP8 inference on some platforms](https://www.chat-gpts.plus/wp-content/uploads/2026/11/38991-8f2a5705-768x403.jpg)