Skip to content

原文(日本語訳)

MCP ツールレスポンスに特殊な Unicode 文字が含まれている場合に発生していた JSON パースエラーが修正されました

原文(英語)

Fixed JSON parsing errors when MCP tool responses contain special Unicode characters

概要

MCP(Model Context Protocol)サーバーからのツールレスポンスに特殊な Unicode 文字が含まれていると、JSON パースエラーが発生してツールが正常に動作しない問題が修正されました。これにより、多言語対応や特殊文字を含むデータを扱う MCP ツールが安定して動作します。

問題の背景

修正前の問題

  • MCP ツールが特殊 Unicode 文字(制御文字、サロゲートペア、非 BMP 文字など)を返すと JSON パースエラーが発生
  • ツールの実行が失敗し、エラーメッセージが表示された
  • 多言語データや絵文字を扱う MCP サーバーが使用できなかった

修正後

  • 特殊 Unicode 文字を含むレスポンスも正しく処理される
  • MCP ツールが安定して動作する
  • 多様なデータ形式に対応

基本的な使い方

特別な設定は不要です。MCP ツールを通常通り使用するだけで、修正の恩恵を受けられます。

bash
claude
> MCP ツールを使ってデータを取得して
# ✅ 特殊文字を含むレスポンスも正しく処理される

実践例

多言語データの取得

bash
# Slack MCP で日本語メッセージを取得
claude
> Slack の最新メッセージを確認して

# MCP レスポンス例:
"""
{
  "messages": [
    {
      "text": "明日の会議は10:00からです 📅",
      "user": "田中太郎"
    }
  ]
}
"""
# ✅ 絵文字と日本語が正しく処理される

データベースクエリ結果

bash
# PostgreSQL MCP でユーザー情報を取得
claude
> データベースから最新のユーザー情報を取得して

# MCP レスポンス例:
"""
{
  "users": [
    {"name": "김민수", "bio": "Developer 🚀"},
    {"name": "李明", "bio": "Designer 🎨"}
  ]
}
"""
# ✅ 韓国語、中国語、絵文字が正しく処理される

ファイルシステムツール

bash
# ファイルシステム MCP でファイル一覧を取得
claude
> プロジェクト内のファイルを一覧表示して

# MCP レスポンス例:
"""
{
  "files": [
    "README.md",
    "日本語ドキュメント.md",
    "测试文件.txt",
    "emoji-test-✅.js"
  ]
}
"""
# ✅ 多言語ファイル名が正しく処理される

API レスポンスの処理

bash
# カスタム API MCP でデータを取得
claude
> 天気 API から現在の天気を取得して

# MCP レスポンス例:
"""
{
  "weather": {
    "description": "晴れ ☀️",
    "temperature": "25°C",
    "wind": "北東の風 5m/s"
  }
}
"""
# ✅ 特殊記号と絵文字が正しく処理される

エラーメッセージの処理

bash
# MCP ツールがエラーを返す場合
claude
> 存在しないリソースにアクセスして

# MCP エラーレスポンス例:
"""
{
  "error": "リソースが見つかりません ❌",
  "code": 404,
  "details": "指定されたファイル「データ.json」は存在しません"
}
"""
# ✅ エラーメッセージも正しく表示される

対応する特殊 Unicode 文字

絵文字

  • 基本絵文字: 😀 😃 😄
  • フラグ: 🇯🇵 🇺🇸 🇰🇷
  • 記号: ✅ ❌ ⏳ 📅

CJK 文字

  • 日本語: ひらがな、カタカナ、漢字
  • 中国語: 简体字、繁體字
  • 韓国語: 한글

特殊記号

  • 矢印: → ← ↑ ↓
  • 数学記号: ≈ ≠ ≤ ≥
  • 通貨記号: € £ ¥ ₩

制御文字とエスケープ

  • タブ、改行などの制御文字
  • JSON エスケープが必要な文字

MCP 設定例

Slack MCP

json
{
  "mcpServers": {
    "slack": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "xoxb-..."
      }
    }
  }
}

使用例:

bash
claude
> Slack の #general チャンネルの最新10件を取得
# ✅ 多言語メッセージと絵文字が正しく処理される

カスタム MCP サーバー

python
# Python MCP サーバー例
@server.tool()
async def get_user_data(user_id: str):
    return {
        "name": "田中太郎",
        "email": "tanaka@example.com",
        "bio": "エンジニア 🚀",
        "location": "東京 🗼"
    }
    # ✅ 日本語と絵文字を含むレスポンスが正しく処理される

注意点

  • MCP サーバー側の対応: MCP サーバー自体が正しい JSON を返す必要があります
  • 文字エンコーディング: UTF-8 エンコーディングが使用されます
  • 大きなレスポンス: 非常に大きなレスポンスはパフォーマンスに影響する可能性があります

トラブルシューティング

MCP ツールがまだエラーを返す場合

bash
# 1. MCP サーバーのログを確認
claude --mcp-debug
> MCP ツールを実行

# 2. MCP サーバーの接続状態を確認
> /mcp
# サーバーのステータスを確認

# 3. レスポンス形式を確認
# MCP サーバーが有効な JSON を返しているか確認

文字化けが発生する場合

bash
# ターミナルの文字エンコーディングを確認
echo $LANG
# UTF-8 であることを確認

# ロケール設定
export LANG=ja_JP.UTF-8

関連する修正

IME サポート(v2.0.68)

bash
# 日本語入力(IME)での Unicode 文字サポートも改善

ワイド文字レンダリング(v2.1.20)

bash
# ターミナル表示での Unicode 文字レンダリングも改善

MCP デバッグモード

bash
# MCP の詳細なデバッグ情報を表示
claude --mcp-debug

# MCP サーバーとのやり取りがログに記録される
# Unicode 文字の処理状況を確認できる

関連情報