MCPサーバーのエラーハンドリング:私が学んだこと
MCPサーバーが初めて動作し、ツールリストを返し、ツールが呼び出されたとき、すべてが完了したと思っていました。成功したと感じたのです。
それは間違いでした。
本番環境でMCPサーバーを運用して学んだのは、チュートリアルがいかにハッピーパス(正常系)に偏っているかということです。チュートリアルは、物事が壊れたときに何が起こるかを無視しています。私が1,800時間のナレッジベース向けにサーバーを構築する中で学んだことを紹介します。
空の結果に対しても常にコンテンツを返す 多くのクライアントは、空のレスポンスを受け取るとハングしてしまいます。検索結果がゼロであっても、何も返さないでください。テキストメッセージを返しましょう。なぜ結果がないのか、データベースにいくつのアイテムが存在するのかをユーザーに伝えます。
低速な接続開始への対処 私はスリープ機能のある無料ティアでホストしています。起動するまでに15秒かかります。多くのMCPクライアントは、それより前にタイムアウトしてしまいます。 • 接続を維持するために、早めにヘッダーを送信する。 • レスポンスサイズに厳格な制限を設ける。 タイムアウト制限に達しないよう、大きな結果は切り詰めてください。
手動でのJSON構築をやめる タイトルに含まれるエスケープされていない1つのダブルクォートが、JSONレスポンス全体を壊してしまいました。クライアントはエラーも出さずに切断されました。シリアライズにはJacksonのようなフレームワークを使用してください。エスケープ処理はライブラリに任せましょう。
一貫性のない認証を想定する クライアントによってAPIキーの扱いが異なります。ヘッダーを使うものもあれば、クエリパラメータを使うもの、あるいはどちらも使わないものもあります。 • キーを送信する複数の方法をサポートする。 • 認証に失敗した場合は、常に適切なJSONエラーボディを返す。
Content-Lengthを明示的に設定する 一部のクライアントはチャンク形式のエンコーディング(chunked encoding)に苦戦します。レスポンスが途切れる場合は、圧縮の使用をやめてください。レスポンスサイズを事前に計算し、Content-Lengthヘッダーを明示的に設定します。
メリット: • プライバシー: 関連するスニペットのみがAIに送られる。 • 相互運用性: サーバーが異なるクライアント間で動作する。 • シンプルさ: 私のサーバーはわずか150行のコードで構成されている。
デメリット: • 未成熟なエコシステム: ドキュメントには多くのエッジケースが記載されていない。 • ホスティング: エンドポイントやコールドスタートを自分で管理する必要がある。 • 進化: プロトコルが頻繁に変更される。
MCPは、私の使われていなかったメモを便利なツールに変えてくれました。データを活用可能にすることで、AIが重労働を行えるようにしてくれます。
あなたはMCPサーバーを構築したことがありますか?どのようなエラーに直面しましたか?ぜひコメントで教えてください。
オプションの学習コミュニティ: https://t.me/GyaanSetuAi
