Skip to content

修正:絵文字を含む MCP 説明の切り捨て境界での API 400 エラー

原文(日本語に翻訳)

切り捨て境界付近に絵文字が含まれるクラシファイアのサイドクエリや MCP サーバーの説明で発生していた API 400 no low surrogate in string エラーを修正しました。

原文(英語)

Fixed API 400 no low surrogate in string errors for classifier side-queries and MCP server descriptions containing emoji near a truncation boundary

概要

絵文字などの Unicode サロゲートペア文字を含むテキストが、特定の長さで切り捨てられる際に不正な文字列(サロゲートペアの片方のみ)が生成される問題がありました。これにより API から no low surrogate in string という 400 エラーが返されていました。MCP サーバーの説明文やクラシファイアのサイドクエリで絵文字を使用している場合に影響を受けていました。

基本的な使い方

修正により、絵文字を含む MCP サーバー設定が正常に動作するようになりました:

json
// .claude/mcp.json での絵文字を含む説明
{
  "servers": {
    "my-tools": {
      "description": "🔧 開発ツール集 🚀 デプロイ支援 📊 分析ツール",
      "command": "npx",
      "args": ["my-mcp-server"]
    }
  }
}

実践例

絵文字を使った MCP サーバー設定

以前はエラーが発生する可能性があったが、修正後は正常動作:

json
{
  "mcpServers": {
    "emoji-tools": {
      "command": "node",
      "args": ["server.js"],
      "description": "📁 ファイル操作 | 🔍 検索 | ✏️ 編集 | 🌐 Web アクセス | 🔒 セキュリティチェック"
    }
  }
}

MCP サーバーの説明文の書き方(推奨)

json
{
  "mcpServers": {
    "project-tools": {
      "description": "プロジェクト管理ツール 🎯\n- タスク管理 ✅\n- ビルド自動化 🏗️\n- テスト実行 🧪",
      "command": "python",
      "args": ["-m", "project_tools_server"]
    }
  }
}

注意点

  • この問題は主に MCP サーバーの description フィールドが長く、かつ絵文字が特定の位置にある場合に発生していました
  • Unicode の絵文字(特に 4 バイト文字の絵文字)はサロゲートペアとして扱われるため、切り捨て位置によっては不正な文字列になることがありました
  • 修正後は安全に絵文字を使用できますが、説明文は簡潔にまとめることを推奨します
  • API エラー 400 が発生していた場合は、Claude Code を最新版にアップデートすることで解決できます

関連情報