From 16ec267568975d80232d326eacf3a6b5d1c829f9 Mon Sep 17 00:00:00 2001 From: Aditya Singh Date: Thu, 21 May 2026 16:34:32 -0700 Subject: [PATCH] Pass ensure_ascii=False when serializing MCP tool results json.dumps defaults to ensure_ascii=True, which mangles every non-ASCII string into \u escapes before the result is sent back to the model. Powerful models technically un-escape these, but the extra tokens hurt cost and quality for tools that return Japanese/Chinese/Arabic text. Pass ensure_ascii=False so the original characters survive. Fixes #6995 --- .../src/autogen_ext/tools/mcp/_base.py | 2 +- .../autogen-ext/tests/tools/test_mcp_tools.py | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_base.py b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_base.py index 314dbe15e7ba..7b69eb9403b8 100644 --- a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_base.py +++ b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_base.py @@ -194,4 +194,4 @@ def serialize_item(item: Any) -> dict[str, Any]: else: return {} - return json.dumps([serialize_item(item) for item in value]) + return json.dumps([serialize_item(item) for item in value], ensure_ascii=False) diff --git a/python/packages/autogen-ext/tests/tools/test_mcp_tools.py b/python/packages/autogen-ext/tests/tools/test_mcp_tools.py index fbcbccc3e6bb..bd9d5f88de56 100644 --- a/python/packages/autogen-ext/tests/tools/test_mcp_tools.py +++ b/python/packages/autogen-ext/tests/tools/test_mcp_tools.py @@ -928,3 +928,26 @@ def test_return_value_as_string_with_resource_link(sample_tool: Tool, sample_ser assert '"type": "resource_link"' in result assert '"name": "test_link"' in result assert '"uri": "http://example.com/"' in result # AnyUrl normalizes with trailing slash + + +def test_return_value_as_string_preserves_non_ascii_text( + sample_tool: Tool, sample_server_params: StdioServerParams +) -> None: + """Non-ASCII characters (e.g. Japanese/Chinese) should not be escaped to \\uXXXX.""" + adapter = StdioMcpToolAdapter(server_params=sample_server_params, tool=sample_tool) + + japanese_text = "日本語のテキスト" + chinese_text = "中文文本" + + result = adapter.return_value_as_string( + [ + TextContent(text=japanese_text, type="text"), + TextContent(text=chinese_text, type="text"), + ] + ) + + # Original characters must survive serialization. + assert japanese_text in result + assert chinese_text in result + # And they must not appear as escaped unicode codepoints. + assert "\\u" not in result