最初に思ったのは、こういう話は本当に現場っぽいな、ということだった。
MCP server が一覧に見えているのに最初の呼び出しでこける、というのは「接続できたかどうか」と「実際に使えるかどうか」が別物だと、かなり痛い形で教えてくる。
この記事でいちばん腑に落ちたのは、失敗を 3 つの gate に分けている点だった。Project 側の承認、tool ごとの permission、そして外部サービス側の data access。どれか一つ通っても、次が閉じていれば普通に失敗する。言われてみれば当たり前なのに、実際のトラブルシュートではここを混ぜて考えがちだと思う。特に「Claude Code で許可したから GitHub の権限もあるはず」という思い込みは危ない。逆も同じで、token が強くても project server の承認がまだなら動かない。責任の所在が分かれているぶん、切り分けも順番が大事になる。
もうひとつ気になったのは、permission rule は「server 名」ではなく実際の tool 名に当てる必要がある、という話だ。ここは地味だけどハマりやすい。自分で付けたラベルをそのまま使いたくなるが、サーバー内部の tool 名は別物かもしれない。こういうズレがあるせいで、「設定したのに効かない」が起きるのだと思う。
それと、Project scope で共有しても access まで共有されるわけではない、という説明はかなり大事だと思った。.mcp.json を配って終わりではなく、各自が credential を持つ設計にしておく。さらに read-only の用途なら endpoint と credential の両方を絞る。片方だけ制限しても、もう片方が変われば抜け道になる。この発想は、MCP に限らず権限設計全般でそのまま使えそうだ。
参考: Claude Code MCP: Connected but Not Working? Check These Three Gates