原文(日本語訳)
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 文字の処理状況を確認できる