From ef2fcdbcb1cb082f71bad1a5d10837d4fa09c767 Mon Sep 17 00:00:00 2001 From: shinjiyu Date: Thu, 29 Oct 2026 14:08:44 +0800 Subject: [PATCH 1/2] fix(server_mcp): read Tool.input_schema for mcp 2.3.0 (#3522) mcp==2.3.0 Tool stores the JSON Schema on input_schema (alias inputSchema). Accessing tool.inputSchema raises AttributeError and aborts server_mcp init after a successful tools/list. Use getattr fallback so function-calling conversion works. Closes #3521 Co-authored-by: shinjiyu --- .../core/providers/tools/server_mcp/mcp_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py b/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py index f03f1a9bd..faad4a7bb 100644 --- a/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py +++ b/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py @@ -107,7 +107,7 @@ class ServerMCPClient: "function": { "name": name, "description": tool.description, - "parameters": tool.inputSchema, + "parameters": getattr(tool, "input_schema", None) or getattr(tool, "inputSchema", {}), }, } for name, tool in self.tools_dict.items() From 01289b8fd4481626911a4f9e4b7ffe60739f4bde Mon Sep 17 00:00:00 2001 From: Sakura-RanChen <1908198662@qq.com> Date: Thu, 29 Oct 2026 14:17:38 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BB=85=E4=BF=9D=E7=95=99mcp2.x=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/providers/tools/server_mcp/mcp_client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py b/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py index faad4a7bb..cd1749940 100644 --- a/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py +++ b/main/xiaozhi-server/core/providers/tools/server_mcp/mcp_client.py @@ -107,7 +107,7 @@ class ServerMCPClient: "function": { "name": name, "description": tool.description, - "parameters": getattr(tool, "input_schema", None) or getattr(tool, "inputSchema", {}), + "parameters": tool.input_schema, }, } for name, tool in self.tools_dict.items()