- 
                Notifications
    You must be signed in to change notification settings 
- Fork 554
Description
Describe the bug
When using the C# SDK to develop an MCP server, any response from the Tools that contains Chinese characters leads to incorrect encoding on Claude Desktop. As a result, Claude Desktop displays a parsing or JSON decoding error, showing garbled characters instead of properly encoded Unicode text.
To Reproduce
Steps to reproduce the behavior:
- Run the sample TestServerWithHostingproject from the repository, making only minimal changes in the Tools implementation (so that it can return Chinese text).
- Send a JSON-RPC request such as:
{"method":"tools/call","params":{"name":"search","arguments":{"query":"SDK design","limit":3}},"jsonrpc":"2.0","id":9}
- 
Notice that the Claude Desktop MCP log shows an error indicating invalid JSON encoding, with garbled Chinese characters. 
Expected behavior
Chinese characters should be correctly escaped as standard Unicode in the JSON response, allowing Claude Desktop or other clients to parse the JSON properly without errors.
Logs
Here is an excerpt from the Claude Desktop MCP logs when the error occurs (showing the invalid encoding issue):
[00:36:07 INF] Transport sending message ... 
{
  "jsonrpc":"2.0",
  "id":7,
  "result":{
    "content":[
      {
        "type":"text",
        "text":"... [ c v [ I]  } o H   Ӧp  ݫ  AI ... (garbled text) ..."
      }
    ],
    "isError":false
  }
}
...
SyntaxError: Unexpected token ' ', ..."B  ưO е  \  C\n\nQ6:"... is not valid JSON
    at JSON.parse (<anonymous>)
    ...
Additional context
- A working fix was found by changing the JSON encoder from JavaScriptEncoder.UnsafeRelaxedJsonEscapingtoJavaScriptEncoder.DefaultinMcpJsonUtilities.cs. With the safer encoder, the Chinese characters are properly escaped (e.g.,\u4F7F\u7528\u8005) and Claude Desktop can parse them without error.
- Below is the relevant code snippet demonstrating the fix
 ( /src/ModelContextProtocol/Utils/Json/McpJsonUtilities.cs , line 61 ):// Original code // Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, // Updated code Encoder = JavaScriptEncoder.Default, 
- After applying this change, the same JSON-RPC command from the same sample project (TestServerWithHosting) produces valid JSON that Claude Desktop can parse correctly.
Below is the JSON-RPC response produced before fixing the encoder. This output contains improperly encoded Chinese characters, causing parsing errors in Claude Desktop:
{"jsonrpc":"2.0","id":9,"result":{"content":[{"type":"text","text":"================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.34044892%\r\n - Title:     [架構師觀點] 開發人員該如何看待 AI 帶來的改變?\r\n - URL:       https://columns.chicken-house.net/2024/01/15/archview-llm\r\n - Format:    Original Content\r\n\r\n
\r\n## FAQ\n\nQ1: AI 開發對傳統軟體流程最大改變是什麼?\nA1: 讓 LLM 直接理解使用者意圖,驅動系統行為。\n\nQ2: API 為何在 AI 時代更重要?\nA2: 因為 LLM 需要精準、標準化的介面才能正確呼叫。\n\nQ3: 什麼是「AI Friendly」的 API 設計?\nA3: 與領域邏輯一致、流程清晰、參數與狀態嚴謹。\n\nQ4: Copilot 未來有什麼發展趨勢?\nA4: 將成為作業系統主要操作介面,整合各種應用。\n\nQ5:\nSemantic Kernel 的作用是什麼?\nA5: 提供架構,統籌 LLM、Plugins、資料記憶等功能。\n\nQ6: 對 UI 設計有何影響?\nA6: UI 不會消失,但更多互動邏輯轉移給 AI。\n\nQ7: 開發者該先學哪些新技術?\nA7: Prompt Engineering、向量資料庫、Semantic Kernel。\n\nQ8: 架構師在 AI 世代應注意什麼?\nA8: 認清計算與意圖分界,強化 API First、DDD。\r\n
\r\n\r\n================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.28233027%\r\n - Title:     從 API First 到 AI First\r\n - URL:       https://columns.chicken-house.net/2024/07/20/devopsdays-keynote\r\n - Format:    Original Content\r\n\r\n
\r\n## FAQ\n\nQ1: 什麼是「從 API First 到 AI First」?\nA1: 它強調軟體開發在生成式 AI 興起後的演進路線。過去先設計好高品質 API,才能在未來有效運用 AI 工具。如今,透過自然語言理解與 API 結合,應用程式可依據對話判斷使用者意圖並呼叫 API。這就是「AI First」時代的核心思路:先確保 API 設計完備,再讓 AI 來處理高層次的對話和推理。\n\nQ2:\n文章中的 Demo 主要展示什麼功能?\nA2: 展示 AI 主動呼叫 API 以完成實際任務,如電商推薦、加入購物車、結帳、偵測滿意度等。過去可能仰賴繁複的 UI 設計,現在則能運用 GPTs 或 Function Calling 等機制,以自然語言快速完成操作。\n\nQ3:\n為何作者稱 AI 整合是一種「降維打擊」?\nA3: 因為 AI 透過大模型的語言理解,可以直接從對話理解意圖,並藉 API 完成需求,例如推薦商品或訂單管理。與傳統 UI 設計相比,多了更高層次的語意運用,解決過去依賴介面引導或顧客行為追蹤的難題,提升 UX。\n\nQ4: 為何在 AI 時代,API 設計品質更重要了?\nA4:\nAI 具有不確定性與大量呼叫需求,若 API 規劃不周全,很容易被錯誤使用或導致系統混亂。唯有經過狀態機與授權邏輯的設計,API 才能有穩定的資源管理與明確的呼叫規範,讓 AI 以高效率、高可靠度完成操作。\n\nQ5: 什麼是 Prompt Engineering,在開發上有什麼用處?\nA5:\nPrompt Engineering 指透過對 LLM 下精準指令,讓它產生更符合預期或結構化的輸出。包含預先告知回應格式、要使用的 API 或解析邏輯。對於開發者而言,運用得當可讓 AI 做更 複雜的任務分解與工具調用,以減少設計 UI 或 coding 細節。\n\nQ6: Copilot 與 Agent 模式有何不同?\nA6: Copilot 是輔助模式 ,由使用者或傳統邏輯掌控主要流程,AI 提供建議或處理細節;Agent 則讓 AI\r\n
\r\n\r\n================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.27056926%\r\n - Title:     從 API First 到 AI First\r\n - URL:       https://columns.chicken-house.net/2024/07/20/devopsdays-keynote\r\n - Format:    Original Content\r\n\r\n
\r\nCopilot 是輔助模式,由使用者或傳統邏輯掌控主要流程,AI 提供建議或處理細節;Agent 則讓 AI 成為主要 決策者,能主動拆解任務、呼叫各種服務。當硬體算力和模型推理能力愈強,Agent 模式就愈能完全主導複雜任務。\n\nQ7: 為何要提到零售業的 AI 應用?\nA7:\n零售業示範 AI 如何在超越「基本需求」的時代,針對心理層面提供客製化服務。LLM 代理人(Agent)能透過對話了解使用者需求並呼叫後端各種 Engine(推薦、知識、客服),提供更即時、更有溫度的銷售場景。\n\nQ8: 文章最後強調哪些 開發流程須升級?\nA8: 需建立完整的 AI 部署流程與管線,不只是原本的程式、設定與環境管理,還要有模型或向量資料庫訓練與佈署管理。其中包括如何選擇雲端或本地 GPU、如何控管 Token 成本,以及如何將這些流程納入系統化的 DevOps/GitOps。\n\nQ9:\n這篇文章的核心結論是什麼?\nA9: AI 不會取代所有開發工作,但會重塑開發邏輯。當基礎 API 設計完善,高度抽象的對話與推理能力,就能經由 AI 實現。從單純的 API First 邁向 AI First 需落實 API 可靠度、Prompt Engineering 與持續部署等基本功,才能發揮 AI 最 大效益。\r\n
\r\n\r\n"}],"isError":false}}
Below is the JSON-RPC response after applying the fix (changing from JavaScriptEncoder.UnsafeRelaxedJsonEscaping to JavaScriptEncoder.Default), which correctly escapes Chinese characters as Unicode.
In this corrected version, Claude Desktop no longer raises an error, and the Chinese text is displayed properly.
{"jsonrpc":"2.0","id":9,"result":{"content":[{"type":"text","text":"================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.34044892%\r\n - Title:     [\u67B6\u69CB\u5E2B\u89C0\u9EDE] \u958B\u767C\u4EBA\u54E1\u8A72\u5982\u4F55\u770B\u5F85 AI \u5E36\u4F86\u7684\u6539\u8B8A?\r\n - URL:       https://columns.chicken-house.net/2024/01/15/archview-llm\r\n - Format:    Original Content\r\n\r\n\u0060\u0060\u0060\r\n## FAQ\n\nQ1: AI \u958B\u767C\u5C0D\u50B3\u7D71\u8EDF\u9AD4\u6D41\u7A0B\u6700\u5927\u6539\u8B8A\u662F\u4EC0\u9EBC\uFF1F\nA1: \u8B93 LLM \u76F4\u63A5\u7406\u89E3\u4F7F\u7528\u8005\u610F\u5716\uFF0C\u9A45\u52D5\u7CFB\u7D71\u884C\u70BA\u3002\n\nQ2: API \u70BA\u4F55\u5728 AI \u6642\u4EE3\u66F4\u91CD\u8981\uFF1F\nA2: \u56E0\u70BA LLM \u9700\u8981\u7CBE\u6E96\u3001\u6A19\u6E96\u5316\u7684\u4ECB\u9762\u624D\u80FD\u6B63\u78BA\u547C\u53EB\u3002\n\nQ3: \u4EC0\u9EBC\u662F\u300CAI Friendly\u300D\u7684 API \u8A2D\u8A08\uFF1F\nA3: \u8207\u9818\u57DF\u908F\u8F2F\u4E00\u81F4\u3001\u6D41\u7A0B\u6E05\u6670\u3001\u53C3\u6578\u8207\u72C0\u614B\u56B4\u8B39\u3002\n\nQ4: Copilot \u672A\u4F86\u6709\u4EC0\u9EBC\u767C\u5C55\u8DA8\u52E2\uFF1F\nA4: \u5C07\u6210\u70BA\u4F5C\u696D\u7CFB\u7D71\u4E3B\u8981\u64CD\u4F5C\u4ECB\u9762\uFF0C\u6574\u5408\u5404\u7A2E\u61C9\u7528\u3002\n\nQ5:\nSemantic Kernel \u7684\u4F5C\u7528\u662F\u4EC0\u9EBC\uFF1F\nA5: \u63D0\u4F9B\u67B6\u69CB\uFF0C\u7D71\u7C4C LLM\u3001Plugins\u3001\u8CC7\u6599\u8A18\u61B6\u7B49\u529F\u80FD\u3002\n\nQ6: \u5C0D UI \u8A2D\u8A08\u6709\u4F55\u5F71\u97FF\uFF1F\nA6: UI \u4E0D\u6703\u6D88\u5931\uFF0C\u4F46\u66F4\u591A\u4E92\u52D5\u908F\u8F2F\u8F49\u79FB\u7D66 AI\u3002\n\nQ7: \u958B\u767C\u8005\u8A72\u5148\u5B78\u54EA\u4E9B\u65B0\u6280\u8853\uFF1F\nA7: Prompt Engineering\u3001\u5411\u91CF\u8CC7\u6599\u5EAB\u3001Semantic Kernel\u3002\n\nQ8: \u67B6\u69CB\u5E2B\u5728 AI \u4E16\u4EE3\u61C9\u6CE8\u610F\u4EC0\u9EBC\uFF1F\nA8: \u8A8D\u6E05\u8A08\u7B97\u8207\u610F\u5716\u5206\u754C\uFF0C\u5F37\u5316 API First\u3001DDD\u3002\r\n\u0060\u0060\u0060\r\n\r\n================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.28233027%\r\n - Title:     \u5F9E API First \u5230 AI First\r\n - URL:       https://columns.chicken-house.net/2024/07/20/devopsdays-keynote\r\n - Format:    Original Content\r\n\r\n\u0060\u0060\u0060\r\n## FAQ\n\nQ1: \u4EC0\u9EBC\u662F\u300C\u5F9E API First \u5230 AI First\u300D\uFF1F\nA1: \u5B83\u5F37\u8ABF\u8EDF\u9AD4\u958B\u767C\u5728\u751F\u6210\u5F0F AI \u8208\u8D77\u5F8C\u7684\u6F14\u9032\u8DEF\u7DDA\u3002\u904E\u53BB\u5148\u8A2D\u8A08\u597D\u9AD8\u54C1\u8CEA API\uFF0C\u624D\u80FD\u5728\u672A\u4F86\u6709\u6548\u904B\u7528 AI \u5DE5\u5177\u3002\u5982\u4ECA\uFF0C\u900F\u904E\u81EA\u7136\u8A9E\u8A00\u7406\u89E3\u8207 API \u7D50\u5408\uFF0C\u61C9\u7528\u7A0B\u5F0F\u53EF\u4F9D\u64DA\u5C0D\u8A71\u5224\u65B7\u4F7F\u7528\u8005\u610F\u5716\u4E26\u547C\u53EB API\u3002\u9019\u5C31\u662F\u300CAI First\u300D\u6642\u4EE3\u7684\u6838\u5FC3\u601D\u8DEF\uFF1A\u5148\u78BA\u4FDD API \u8A2D\u8A08\u5B8C\u5099\uFF0C\u518D\u8B93 AI \u4F86\u8655\u7406\u9AD8\u5C64\u6B21\u7684\u5C0D\u8A71\u548C\u63A8\u7406\u3002\n\nQ2:\n\u6587\u7AE0\u4E2D\u7684 Demo \u4E3B\u8981\u5C55\u793A\u4EC0\u9EBC\u529F\u80FD\uFF1F\nA2: \u5C55\u793A AI \u4E3B\u52D5\u547C\u53EB API \u4EE5\u5B8C\u6210\u5BE6\u969B\u4EFB\u52D9\uFF0C\u5982\u96FB\u5546\u63A8\u85A6\u3001\u52A0\u5165\u8CFC\u7269\u8ECA\u3001\u7D50\u5E33\u3001\u5075\u6E2C\u6EFF\u610F\u5EA6\u7B49\u3002\u904E\u53BB\u53EF\u80FD\u4EF0\u8CF4\u7E41\u8907\u7684 UI \u8A2D\u8A08\uFF0C\u73FE\u5728\u5247\u80FD\u904B\u7528 GPTs \u6216 Function Calling \u7B49\u6A5F\u5236\uFF0C\u4EE5\u81EA\u7136\u8A9E\u8A00\u5FEB\u901F\u5B8C\u6210\u64CD\u4F5C\u3002\n\nQ3:\n\u70BA\u4F55\u4F5C\u8005\u7A31 AI \u6574\u5408\u662F\u4E00\u7A2E\u300C\u964D\u7DAD\u6253\u64CA\u300D\uFF1F\nA3: \u56E0\u70BA AI \u900F\u904E\u5927\u6A21\u578B\u7684\u8A9E\u8A00\u7406\u89E3\uFF0C\u53EF\u4EE5\u76F4\u63A5\u5F9E\u5C0D\u8A71\u7406\u89E3\u610F\u5716\uFF0C\u4E26\u85C9 API \u5B8C\u6210\u9700\u6C42\uFF0C\u4F8B\u5982\u63A8\u85A6\u5546\u54C1\u6216\u8A02\u55AE\u7BA1\u7406\u3002\u8207\u50B3\u7D71 UI \u8A2D\u8A08\u76F8\u6BD4\uFF0C\u591A\u4E86\u66F4\u9AD8\u5C64\u6B21\u7684\u8A9E\u610F\u904B\u7528\uFF0C\u89E3\u6C7A\u904E\u53BB\u4F9D\u8CF4\u4ECB\u9762\u5F15\u5C0E\u6216\u9867\u5BA2\u884C\u70BA\u8FFD\u8E64\u7684\u96E3\u984C\uFF0C\u63D0\u5347 UX\u3002\n\nQ4: \u70BA\u4F55\u5728 AI \u6642\u4EE3\uFF0CAPI \u8A2D\u8A08\u54C1\u8CEA\u66F4\u91CD\u8981\u4E86\uFF1F\nA4:\nAI \u5177\u6709\u4E0D\u78BA\u5B9A\u6027\u8207\u5927\u91CF\u547C\u53EB\u9700\u6C42\uFF0C\u82E5 API \u898F\u5283\u4E0D\u5468\u5168\uFF0C\u5F88\u5BB9\u6613\u88AB\u932F\u8AA4\u4F7F\u7528\u6216\u5C0E\u81F4\u7CFB\u7D71\u6DF7\u4E82\u3002\u552F\u6709\u7D93\u904E\u72C0\u614B\u6A5F\u8207\u6388\u6B0A\u908F\u8F2F\u7684\u8A2D\u8A08\uFF0CAPI \u624D\u80FD\u6709\u7A69\u5B9A\u7684\u8CC7\u6E90\u7BA1\u7406\u8207\u660E\u78BA\u7684\u547C\u53EB\u898F\u7BC4\uFF0C\u8B93 AI \u4EE5\u9AD8\u6548\u7387\u3001\u9AD8\u53EF\u9760\u5EA6\u5B8C\u6210\u64CD\u4F5C\u3002\n\nQ5: \u4EC0\u9EBC\u662F Prompt Engineering\uFF0C\u5728\u958B\u767C\u4E0A\u6709\u4EC0\u9EBC\u7528\u8655\uFF1F\nA5:\nPrompt Engineering \u6307\u900F\u904E\u5C0D LLM \u4E0B\u7CBE\u6E96\u6307\u4EE4\uFF0C\u8B93\u5B83\u7522\u751F\u66F4\u7B26\u5408\u9810\u671F\u6216\u7D50\u69CB\u5316\u7684\u8F38\u51FA\u3002\u5305\u542B\u9810\u5148\u544A\u77E5\u56DE\u61C9\u683C\u5F0F\u3001\u8981\u4F7F\u7528\u7684 API \u6216\u89E3\u6790\u908F\u8F2F\u3002\u5C0D\u65BC\u958B\u767C\u8005\u800C\u8A00\uFF0C\u904B\u7528\u5F97\u7576\u53EF\u8B93 AI \u505A\u66F4\u8907\u96DC\u7684\u4EFB\u52D9\u5206\u89E3\u8207\u5DE5\u5177\u8ABF\u7528\uFF0C\u4EE5\u6E1B\u5C11\u8A2D\u8A08 UI \u6216 coding \u7D30\u7BC0\u3002\n\nQ6: Copilot \u8207 Agent \u6A21\u5F0F\u6709\u4F55\u4E0D\u540C\uFF1F\nA6: Copilot \u662F\u8F14\u52A9\u6A21\u5F0F\uFF0C\u7531\u4F7F\u7528\u8005\u6216\u50B3\u7D71\u908F\u8F2F\u638C\u63A7\u4E3B\u8981\u6D41\u7A0B\uFF0CAI \u63D0\u4F9B\u5EFA\u8B70\u6216\u8655\u7406\u7D30\u7BC0\uFF1BAgent \u5247\u8B93 AI\r\n\u0060\u0060\u0060\r\n\r\n================================================================================\r\n## Fact:\r\n\r\n - Relevance: 0.27056926%\r\n - Title:     \u5F9E API First \u5230 AI First\r\n - URL:       https://columns.chicken-house.net/2024/07/20/devopsdays-keynote\r\n - Format:    Original Content\r\n\r\n\u0060\u0060\u0060\r\nCopilot \u662F\u8F14\u52A9\u6A21\u5F0F\uFF0C\u7531\u4F7F\u7528\u8005\u6216\u50B3\u7D71\u908F\u8F2F\u638C\u63A7\u4E3B\u8981\u6D41\u7A0B\uFF0CAI \u63D0\u4F9B\u5EFA\u8B70\u6216\u8655\u7406\u7D30\u7BC0\uFF1BAgent \u5247\u8B93 AI \u6210\u70BA\u4E3B\u8981\u6C7A\u7B56\u8005\uFF0C\u80FD\u4E3B\u52D5\u62C6\u89E3\u4EFB\u52D9\u3001\u547C\u53EB\u5404\u7A2E\u670D\u52D9\u3002\u7576\u786C\u9AD4\u7B97\u529B\u548C\u6A21\u578B\u63A8\u7406\u80FD\u529B\u6108\u5F37\uFF0CAgent \u6A21\u5F0F\u5C31\u6108\u80FD\u5B8C\u5168\u4E3B\u5C0E\u8907\u96DC\u4EFB\u52D9\u3002\n\nQ7: \u70BA\u4F55\u8981\u63D0\u5230\u96F6\u552E\u696D\u7684 AI \u61C9\u7528\uFF1F\nA7:\n\u96F6\u552E\u696D\u793A\u7BC4 AI \u5982\u4F55\u5728\u8D85\u8D8A\u300C\u57FA\u672C\u9700\u6C42\u300D\u7684\u6642\u4EE3\uFF0C\u91DD\u5C0D\u5FC3\u7406\u5C64\u9762\u63D0\u4F9B\u5BA2\u88FD\u5316\u670D\u52D9\u3002LLM \u4EE3\u7406\u4EBA\uFF08Agent\uFF09\u80FD\u900F\u904E\u5C0D\u8A71\u4E86\u89E3\u4F7F\u7528\u8005\u9700\u6C42\u4E26\u547C\u53EB\u5F8C\u7AEF\u5404\u7A2E Engine\uFF08\u63A8\u85A6\u3001\u77E5\u8B58\u3001\u5BA2\u670D\uFF09\uFF0C\u63D0\u4F9B\u66F4\u5373\u6642\u3001\u66F4\u6709\u6EAB\u5EA6\u7684\u92B7\u552E\u5834\u666F\u3002\n\nQ8: \u6587\u7AE0\u6700\u5F8C\u5F37\u8ABF\u54EA\u4E9B\u958B\u767C\u6D41\u7A0B\u9808\u5347\u7D1A\uFF1F\nA8: \u9700\u5EFA\u7ACB\u5B8C\u6574\u7684 AI \u90E8\u7F72\u6D41\u7A0B\u8207\u7BA1\u7DDA\uFF0C\u4E0D\u53EA\u662F\u539F\u672C\u7684\u7A0B\u5F0F\u3001\u8A2D\u5B9A\u8207\u74B0\u5883\u7BA1\u7406\uFF0C\u9084\u8981\u6709\u6A21\u578B\u6216\u5411\u91CF\u8CC7\u6599\u5EAB\u8A13\u7DF4\u8207\u4F48\u7F72\u7BA1\u7406\u3002\u5176\u4E2D\u5305\u62EC\u5982\u4F55\u9078\u64C7\u96F2\u7AEF\u6216\u672C\u5730 GPU\u3001\u5982\u4F55\u63A7\u7BA1 Token \u6210\u672C\uFF0C\u4EE5\u53CA\u5982\u4F55\u5C07\u9019\u4E9B\u6D41\u7A0B\u7D0D\u5165\u7CFB\u7D71\u5316\u7684 DevOps/GitOps\u3002\n\nQ9:\n\u9019\u7BC7\u6587\u7AE0\u7684\u6838\u5FC3\u7D50\u8AD6\u662F\u4EC0\u9EBC\uFF1F\nA9: AI \u4E0D\u6703\u53D6\u4EE3\u6240\u6709\u958B\u767C\u5DE5\u4F5C\uFF0C\u4F46\u6703\u91CD\u5851\u958B\u767C\u908F\u8F2F\u3002\u7576\u57FA\u790E API \u8A2D\u8A08\u5B8C\u5584\uFF0C\u9AD8\u5EA6\u62BD\u8C61\u7684\u5C0D\u8A71\u8207\u63A8\u7406\u80FD\u529B\uFF0C\u5C31\u80FD\u7D93\u7531 AI \u5BE6\u73FE\u3002\u5F9E\u55AE\u7D14\u7684 API First \u9081\u5411 AI First \u9700\u843D\u5BE6 API \u53EF\u9760\u5EA6\u3001Prompt Engineering \u8207\u6301\u7E8C\u90E8\u7F72\u7B49\u57FA\u672C\u529F\uFF0C\u624D\u80FD\u767C\u63EE AI \u6700\u5927\u6548\u76CA\u3002\r\n\u0060\u0060\u0060\r\n\r\n"}],"isError":false}}
