From 9b4aea047ad02bd0f52f9dd2dfc2d8e0d2dace1c Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Tue, 13 Jan 2026 16:45:25 +0000 Subject: [PATCH] Fix: Wrap tools/call responses in MCP-compliant content format Per MCP spec (https://modelcontextprotocol.io/specification/2025-11-25/server/tools): - Tool call responses MUST have a "content" array - Each content item has "type" and "text" fields - Response includes "isError" boolean This was the root cause - Claude Code was waiting for the correct format. --- scripts/mcp/proxysql_mcp_stdio_bridge.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/scripts/mcp/proxysql_mcp_stdio_bridge.py b/scripts/mcp/proxysql_mcp_stdio_bridge.py index 6505e5fec..f9090466a 100755 --- a/scripts/mcp/proxysql_mcp_stdio_bridge.py +++ b/scripts/mcp/proxysql_mcp_stdio_bridge.py @@ -307,11 +307,24 @@ class StdioMCPServer: "id": req_id } - result = response.get("result", {}) - _log(f"tools/call: returning result: {json.dumps(result)[:500]}") + raw_result = response.get("result", {}) + _log(f"tools/call: raw_result: {json.dumps(raw_result)[:500]}") + + # Wrap result in MCP-compliant format with content array + # Per MCP spec: https://modelcontextprotocol.io/specification/2025-11-25/server/tools + formatted_result = { + "content": [ + { + "type": "text", + "text": json.dumps(raw_result, indent=2) + } + ], + "isError": False + } + _log(f"tools/call: returning formatted: {json.dumps(formatted_result)[:500]}") return { "jsonrpc": "2.0", - "result": result, + "result": formatted_result, "id": req_id }