RSS DEV コミュニティ フォロー 私のMCPサーバーがクラッシュし続けました。それを救ったエラーリカバリパターンはこれです。 MCPサーバーは、例外処理が行われない場合にサイレントフェイルする可能性があります。Model Context Protocolの仕様ではエラー処理が義務付けられておらず、参照実装は最小限です。これにより、サーバーは目に見えるエラーメッセージなしに、時間とともに応答不能になる可能性があります。一般的な原因としては、ネットワークの問題、不正な形式のツール引数、または外部APIのタイムアウトが挙げられます。堅牢な解決策としては、ツールハンドラーをtry-exceptブロックでラップすることが含まれます。このラッパーは、ConnectionError、TimeoutError、ValueErrorなどのさまざまな例外をキャッチします。ネットワークレベルの問題については、サーバーはトランスポート層の再接続を試みるべきです。クライアントからの無効な引数は、明確にクライアントに伝えられるべきです。一般的なExceptionのcatch-allは、完全なトレースバックをログに記録し、説明的なエラーメッセージを返す必要があります。重要なのは、エラーが発生したことをクライアントに通知するために、レスポンスでisError: Trueを設定することです。このフラグがないと、AIはエラーメッセージを有効な結果として解釈する可能性があります。このラッパーパターンは、サイレントクラッシュを防ぎ、クライアントに明確なエラーシグナルを提供し、サーバーを稼働させ続けます。キャッチされるべき一時的なエラーと、サーバーをクラッシュさせるべき致命的なエラーを区別することが重要です。共有状態を持つサーバーの場合、ヘルスチェックツールを使用して、再接続後にサーバーの整合性を検証できます。部分的な障害は発生する可能性があり、エラーフラグとともに部分的なデータを返すことで明示的に処理されるべきです。効果的なロギング、特に構造化されたJSONロギングは、デバッグとエラーパターンの特定に不可欠です。このアプローチは、本番環境でのサイレントフェイルを大幅に削減しました。 My MCP Server Kept Crashing. Here's the Error Recovery Pattern That Saved It. dev.to
isError: Trueを設定することです。このフラグがないと、AIはエラーメッセージを有効な結果として解釈する可能性があります。このラッパーパターンは、サイレントクラッシュを防ぎ、クライアントに明確なエラーシグナルを提供し、サーバーを稼働させ続けます。キャッチされるべき一時的なエラーと、サーバーをクラッシュさせるべき致命的なエラーを区別することが重要です。共有状態を持つサーバーの場合、ヘルスチェックツールを使用して、再接続後にサーバーの整合性を検証できます。部分的な障害は発生する可能性があり、エラーフラグとともに部分的なデータを返すことで明示的に処理されるべきです。効果的なロギング、特に構造化されたJSONロギングは、デバッグとエラーパターンの特定に不可欠です。このアプローチは、本番環境でのサイレントフェイルを大幅に削減しました。