PaPoo
cover

ファイルを触るMCPサーバーは、思ったよりずっと危ない

最初に思ったのは、「ああ、これは“機能”の話に見せかけた“運用事故の話”だな」ということだった。MCP server というと、つい tool をどう定義するか、client とどうつなぐかに目が行く。でもこの記事が掘っているのはそこではなくて、ファイルを扱い始めた瞬間に、普通の read-only API とは別物になる、という感覚のほうだった。

特に引っかかったのは、URL を受け取る tool が SSRF の入口になるという指摘だ。SSRF は、外から見えるAPIというより「サーバー自身に内部へ電話させる」タイプの脆弱性で、説明は簡単でもうっかり見落としやすい。MCP の文脈だと、モデルが返した内容をそのまま信じてしまう流れがあり得るので、なおさら怖い。しかもファイル処理では「入力はファイル名だけです」みたいな雑な割り切りが効かない。URL を受けるなら、まず疑う。そこを baseline と書いているのはかなり正しいと思う。

もう一つ、静かに効いてくるのが idempotency の話だった。重複実行を防ぐ仕組みで、ネットワークの再試行や model の再呼び出しで同じ操作が二度走るのを吸収する。読んでいて思ったのは、これは技術的には地味だけど、請求や出力ファイルが絡むと一気に現実味を帯びる、ということだ。特に「一度の操作なのに二重課金になる」事故は、実装者の想像以上にユーザーの怒りを買う。read-only なら平気でも、書き込み系はそうはいかない。MCP を“会話の延長”くらいに見ていると、ここを落としやすいのだろう。

逆に、この記事で少し納得したのは、認証を API key だけで済ませず、短命の JWT に切り替える設計を勧めている点だ。静的な key は楽だが、漏れたら長く使えてしまう。ファイル処理のように権限の重い処理では、その「長く使えてしまう」がかなり嫌な性質になる。MCP の実装例が簡単さ優先で single static key に寄りがち、という指摘も、たぶん現場ではよくある話だと思う。最初は動くものを作りたくなる。でも後から変えると、client 側の実装や説明を全部巻き込む。技術より運用のほうが重い、というのは身につまされた。

全体として、この記事は「MCP server のセキュリティは特別な新技術で守る」という話ではなく、むしろ既知の基本を、ファイル処理という危ない対象にちゃんと持ち込めるか、という話だった。そこが地味だけど大事で、きれいなデモでは見えない失敗が並んでいるのがよかった。


参考: Building a Secure MCP Server for File Processing

同じ著者の記事