MCP サーバの典型エラーをトラブルシュート
報告の多い MCP 失敗を切り分けるプレイブック:spawn の ENOENT、env 変数欠落、JSON パースエラー、サイレントクラッシュ。
詳細な説明
切り分けプレイブック
「MCP サーバが繋がらない」報告のほとんどは 5 つのカテゴリのどれかに収まります。順番にチェックすればカテゴリを 1 つずつ除外できます。
1. JSON 構文エラー
設定が不正なら、クライアントは静かに MCP を無効化します。検証するには:
# macOS / Linux
python3 -m json.tool < ~/Library/Application\ Support/Claude/claude_desktop_config.json
または JSON フォーマッター に貼り付けると、失敗箇所をハイライトしてくれます。よくある原因:末尾カンマ、エスケープ漏れバックスラッシュ(Windows パス 参照)、Markdown コピペ由来のスマートクオート。
2. spawn の ENOENT('npx' not found)
クライアント環境の PATH にバイナリがありません。確認:
which npx # macOS / Linux
where.exe npx # Windows
ターミナルでは動くが GUI クライアントで動かない場合、シェル rc ファイル読み込み前に GUI アプリが起動しています。対処:
- 公式インストーラから Node を入れ直す(システム全体 PATH)。
- command に絶対パスを書く:
"command": "/usr/local/bin/npx"。
3. env 変数の欠落・誤り
[error] BRAVE_API_KEY is not set
サーバ別ログで正確な変数名を確認し、設定にコピーしてください。タイポすると派手に失敗します。
「正しそうなのに 401」の場合:
- GitHub: GitHub トークン で再発行。fine-grained トークンはデフォルトで期限があります。
- Brave: キーが
BSA_始まりで、月次クォータ内であることを確認。
4. パスの問題
filesystem の場合、パスが存在し、クライアント実行ユーザから読めることを確認:
ls -la /Users/you/Documents
シンボリックリンクやネットワークマウントなら実体パスに置き換えてください。
5. 接続後のサイレントクラッシュ
サーバは初期化に成功するが、モデルがツールを呼ぶと終了する。ログをテール:
tail -F ~/Library/Logs/Claude/mcp-server-*.log
通常スタックトレースが現れます。npm 配布のサーバなら GitHub Issues を確認 — 新しいバージョンが古いクライアントで動かない(あるいは逆)場合があります。既知の動作バージョンに固定:
"args": ["-y", "@modelcontextprotocol/server-github@2024.10.7"]
最終手段:最小構成
何もうまくいかないときは、設定を「/tmp を指す filesystem サーバ 1 つ」だけにして読み込めるか確認します。それすら失敗するなら、問題は環境(PATH、権限、JSON パース)であってサーバ個別の問題ではありません。
ユースケース
MCP を初めてセットアップする人、Node や Python のアップグレード後に戻ってきた人、企業管理ラップトップでセキュリティソフトが時々子プロセス spawn をブロックする人、いずれにも有用なフローです。