From c501bc3c4275832162c94eb086cedd377a74af61 Mon Sep 17 00:00:00 2001 From: longkeyy Date: Mon, 4 Aug 2025 04:00:26 +0800 Subject: [PATCH 1/2] fix: disable Unicode escaping in JSON output - Modify writeResponse in server/stdio.go to use json.NewEncoder with SetEscapeHTML(false) - This prevents Unicode characters from being escaped to \uXXXX format - Maintains compatibility while improving readability for non-ASCII characters --- server/stdio.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/stdio.go b/server/stdio.go index 4d567d8cb..3fdb09fd8 100644 --- a/server/stdio.go +++ b/server/stdio.go @@ -2,6 +2,7 @@ package server import ( "bufio" + "bytes" "context" "encoding/json" "fmt" @@ -457,11 +458,18 @@ func (s *StdioServer) writeResponse( response mcp.JSONRPCMessage, writer io.Writer, ) error { - responseBytes, err := json.Marshal(response) - if err != nil { + // Create a buffer to write JSON with custom encoding settings + var buf bytes.Buffer + encoder := json.NewEncoder(&buf) + encoder.SetEscapeHTML(false) // Disable HTML escaping, which also prevents Unicode escaping + + if err := encoder.Encode(response); err != nil { return err } + // Remove the trailing newline added by Encode() and add our own + responseBytes := bytes.TrimSuffix(buf.Bytes(), []byte("\n")) + // Write response followed by newline if _, err := fmt.Fprintf(writer, "%s\n", responseBytes); err != nil { return err From 1951206aa95812e67f3cc248ad1397397ad5435a Mon Sep 17 00:00:00 2001 From: longkeyy Date: Mon, 4 Aug 2025 04:03:35 +0800 Subject: [PATCH 2/2] fix: correct Meta type assignment in CallToolResult unmarshaling - Fix type error where map[string]any was being assigned to *Meta - Create proper Meta struct with AdditionalFields from unmarshaled data - This resolves build errors in the Go compiler --- mcp/tools.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mcp/tools.go b/mcp/tools.go index 511453376..5ee9fedb3 100644 --- a/mcp/tools.go +++ b/mcp/tools.go @@ -504,7 +504,9 @@ func (r *CallToolResult) UnmarshalJSON(data []byte) error { // Unmarshal Meta if meta, ok := raw["_meta"]; ok { if metaMap, ok := meta.(map[string]any); ok { - r.Meta = metaMap + r.Meta = &Meta{ + AdditionalFields: metaMap, + } } }