「このフォルダ、AIに見せてしまっていいんでしょうか」。Filesystem MCPをつなぐ話をすると、たいてい最初にこの質問が出ます。

つないだあとの動きは速いです。読むのも書くのも、こちらが確認する間はありません。ところが、どこまで開いたのかは画面のどこにも出ません。開きすぎていたと気づくのは、何かが変わったあとになります。

この記事は、フォルダを渡す前に決めることと、決めた範囲を実際に守らせる場所を扱います。素材は公式リポジトリと公式ドキュメントの記載だけです。自環境へはまだ接続していないため、動かして分かったことは書いていません。確認日は2026年7月29日です。

こんなふうに調べていませんか

  • AIにローカルのファイルを触らせたいが、どこまで開けばいいのか決まらない
  • 読み取り専用で渡したい。設定のどこに書けばそうなるのかが分からない

この記事を読み終えたときに手に入るもの

  • 渡すフォルダを、渡さない・読み取り専用・公開の3つへ仕分けられるようになります
  • 読み取り専用をどの層で強制するかを、サーバー任せにせず選べるようになります
  • 境界を決めているのが起動側かクライアント側かを、自分で確かめられるようになります

結論30秒でわかる、この記事の結論

  • Filesystem MCPの権限設計とは、渡すフォルダを渡さない・読み取り専用・公開の3つへ仕分け、その境界をサーバー任せにしないことです。
  • 読み取り専用はサーバーの機能では作れません。OSやコンテナのマウントで止めます。
  • 境界の決め方は2通りあり、片方は仕様上すでに非推奨になりました。
フォルダを渡す前に、決めることは3つつないでから絞り直すのは、そこそこ面倒ですフォルダを渡す前に、決めることは3つ決める1どこまで見せるか本文だけでなく、並びや階層も一緒に開きます決める2そこで何を変えさせるか見せる範囲と、書かせる範囲は別に決めます決める3境界を誰が決めるか起動した側とは限りません鈴木さんつないでから絞り直すのは、そこそこ面倒です
フォルダを渡す前に、決めることは3つ — つないでから絞り直すのは、そこそこ面倒です

案内役は3人です。若葉さんが言葉の意味から、高梨課長が自分の手で動かす側から聞き、鈴木さん(本誌監修)が答えます。

01Filesystem MCPの権限設計は、AIエージェントに何を預ける作業なんですか?

若葉さん
若葉さんの発言

Filesystem MCPって、そもそも何をしてくれるものなんでしょうか。

鈴木さん
鈴木さんの発言

建物の入館証に近いと思っています。どの階まで入ってよいかを先に決めて、証を渡す。渡したあとで階を減らすのは、そこそこ面倒です。

Filesystem MCPは、AIにローカルのファイル読み書きを許可する公式リファレンス実装です(出典: MCP公式リポジトリ)。

預けるものは2つあります。どこまで見せるかと、そこで何を変えさせるかです。この2つはひとつの設定でまとめて決まるように見えますが、実際には別々の層が担当しています。見せる範囲を絞っただけでは、その中での書き換えは止まりません。

入館証にたとえると、決めているのはここ設定の言葉に置き換えると、担当する層が見えます入館証にたとえると、決めているのはここ設定の言葉に置き換えると、担当する層が見えます建物でいうとFilesystem MCPでいうとどの階まで入ってよいか引数やRootsで決まる許可フォルダ部屋の中で物を動かしてよいか書き込み系の道具を許すかどうか入館証を発行するのは誰か起動した側か、つないできた側か同じ設定でまとめて決まるように見えて、決めている場所は別です。
入館証にたとえると、決めているのはここ — 設定の言葉に置き換えると、担当する層が見えます

結論は3つです。

  1. 渡すフォルダは事前に3段階へ仕分けます。機密を含むなら渡さない、書き込みが不要なら読み取り専用にする、残りだけを公開します。
  2. 読み取り専用は、サーバーの機能だけでは実現できません。Filesystem MCP自体に読み書きを分ける設定が無いためです。
  3. 境界の決め方は2通りあり、片方は仕様上すでに非推奨です。起動時のコマンドライン引数と、MCPのRootsプロトコルがあります。後者は2026年7月28日付で非推奨になりました(出典: MCP公式仕様)。

02AIエージェントに開く13のツールは、権限設計のどこを見て選ぶんですか?

何を許可・拒否できるのかを先に把握します。Filesystem MCPが公開するツールは13種類で、うち9種が読み取り専用、4種が書き込みを伴います(出典: 同README、2026-07-29確認)。

道具を、見え方と及ぶ範囲で並べ直す一覧を眺めるより、どこへ届くかで分けたほうが早い道具を、見え方と及ぶ範囲で並べ直す一覧を眺めるより、どこへ届くかで分けたほうが早い書いてあることを読むテキスト・画像や音声・まとめ読み形と置き場が見える並び/大きさつきの並び/階層/名前での探索ひとつを書き換える新規と上書き/一致した箇所の差し替え置き場そのものを動かす入れ物を増やす/移動と名前の付け替え上:見るだけ / 下:中身が変わる左:ひとつのファイル / 右:フォルダごと
道具を、見え方と及ぶ範囲で並べ直す — 一覧を眺めるより、どこへ届くかで分けたほうが早い

読み取り側で見落とされやすいのは、中身よりも構成が見えてしまうことです。ファイル名の一覧だけでも、案件の構成は伝わります。

ツール名種別できること権限設計で見るところ
read_text_file読み取りテキストとして読む範囲が広いまま残りやすい
read_media_file読み取り画像・音声をBase64で読む顧客写真が混ざる共有フォルダは丸ごと読まれる
read_multiple_files読み取り複数ファイルを一括で読む1回の呼び出しで広く読める
list_directory読み取りディレクトリ一覧を返す名前だけでも構成情報が漏れる
list_directory_with_sizes読み取り一覧とサイズを返すサイズから重要ファイルを推測されうる
directory_tree読み取り再帰的なJSONツリーを返す深い階層まで一度に見える
search_files読み取りパターンで再帰検索する想定外のファイルまで対象に入る
get_file_info読み取り更新日時等のメタデータを返す更新時刻の誤帰属につながりうる
list_allowed_directories読み取り許可済みディレクトリを返す実行時に意図との一致を点検できる
write_file書き込み新規作成・上書き上書き注意と明記されている(出典: 同README)
edit_file書き込みパターン一致で部分編集する意図しない箇所まで一致し書き換わる余地がある
create_directory書き込みディレクトリを新規作成する許可フォルダ配下に構造を増やせる
move_file書き込み移動・リネームする移動元と移動先の両方が許可フォルダ内か要確認

03読み取りだけのツールでも、Filesystem MCPでAIエージェントに渡すと何が見えるんですか?

読み取り側の9種は、中身を読むものと、構成を返すものに分かれます。後者は本文を1文字も読まなくても、案件の形を伝えます。フォルダ名の並び、階層の深さ、更新の新しさ。渡す範囲を決めるときは、この「本文以外」を見落とさないようにします。

list_allowed_directoriesだけは性格が違います。エージェント自身に「いま何を触れるか」を言わせられる読み取り専用ツールで、権限設計の妥当性を実行時に点検する用途に使えます。

04渡すフォルダの3判定は、AI社員の権限設計でどう当てはめるんですか?

権限設計の起点は、フォルダの中身を見て3段階に仕分けることです。運営元WEBMARKSでは、機密情報をpublic・internal・restrictedの3段階へ分離して扱っています。判定基準そのものはAIエージェントに機密情報を渡さない|3段階の分離と検査にまとめました。

1つのフォルダが、行き先へ振り分けられるまで迷ったら、書き込みが要るかを最後に聞きます1つのフォルダが、行き先へ振り分けられるまで迷ったら、書き込みが要るかを最後に聞きます1中身を開いて見る名前だけで決めない2見せられないものは無いかあるなら、ここで手放す3書き込みまで要るか要らないなら読むだけに4行き先が決まる手放す/読むだけ/作業する
1つのフォルダが、行き先へ振り分けられるまで — 迷ったら、書き込みが要るかを最後に聞きます
フォルダの中身判定Filesystem MCPでの扱い
認証情報・契約書・決算書・restricted相当の生データ渡さない起動時の引数にも含めない。存在自体を見せない
参照だけしたい資料・過去の成果物・社外配布済みの原本読み取り専用にする引数には含めるが、OS・コンテナ側で書き込みを止める
そのAIエージェントが実際に作業する案件フォルダ公開する(読み書き)引数に含め、書き込み系ツールも許可する

範囲は案件単位まで絞ります。ホームディレクトリやドライブ全体のように広く渡すと、別案件の機密まで一括で開くことになります。公式のセキュリティ文書も、ローカルMCPサーバーはファイルシステムへのアクセスを制限した状態で起動すべきだと述べています(出典: MCP公式セキュリティ文書)。

この章のまとめ

仕分けの単位は「安全そうかどうか」ではなく、案件です。案件が変われば、開く範囲も変わります。

05読み取り専用は、Filesystem MCPの権限設計だけでAIエージェントに強制できますか?

高梨課長
高梨課長の発言

読み取り専用にしたいんです。設定ファイルのどこに書けばいいでしょうか。

鈴木さん
鈴木さんの発言

書く場所がサーバー側には無いんです。ドキュメントが示している方法は、フォルダの側を書けない状態にしてから渡す、というやり方でした。

Filesystem MCP自体には、許可フォルダごとに読み取り専用を指定する機能がありません。ドキュメントが示す唯一の実現方法は、Dockerでのroマウントです(出典: 同README)。

{
  "mcpServers": {
    "filesystem": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--mount", "type=bind,src=/path/to/allowed/dir,dst=/projects/allowed/dir,ro",
        "mcp/filesystem",
        "/projects"
      ]
    }
  }
}
断っているのは、サーバーではありません読み取り専用に見える状態を、誰が作っているか断っているのは、サーバーではありません読み取り専用に見える状態を、誰が作っているかサーバーが見ていること許可された範囲の内か外か読むのか書くのかは見ていない範囲の中では区別が消えるフォルダごとの読み書きを分ける設定は持っていません土台の側が返していること書き込みそのものを受け付けない読み出しは通す断るのは、動いたあと結果として読み取り専用になっている、という形です
断っているのは、サーバーではありません — 読み取り専用に見える状態を、誰が作っているか

roフラグを付けたディレクトリは、サーバーからは読み取り専用として扱われます(出典: 同README)。ただし、サーバーがフォルダごとに読み書きを判定しているわけではありません。OSのマウントが書き込みを受け付けないので、結果として読み取り専用になっているだけです。

同じ考え方はDocker以外でも使えます。読み取り専用でマウントしたボリュームや、書き込み権限を外したOSのファイル権限を組み合わせれば、Filesystem MCPが書き込みを試みても拒否されます。MCP公式のセキュリティ文書も、ローカルサーバーは最小限の既定権限で起動し、必要な権限だけを段階的に足す設計を推奨しています(出典: MCP公式セキュリティ文書)。

06呼び出す前に止めたいなら、AIエージェントの権限設計はどこに書くんですか?

呼び出しそのものを起こさせたくない場合は、クライアント側の権限設定を重ねます。Claude Codeなら、MCPツールもmcp__サーバー名__ツール名という形式で権限ルールの対象にできます(出典: Claude Code公式ドキュメント)。

{
  "permissions": {
    "deny": [
      "mcp__filesystem__write_file",
      "mcp__filesystem__edit_file",
      "mcp__filesystem__create_directory",
      "mcp__filesystem__move_file"
    ]
  }
}
同じ「書かせない」でも、止まる場所が違うどこまで動いてから止まるかで、残るものが変わります同じ「書かせない」でも、止まる場所が違うどこまで動いてから止まるかで、残るものが変わります1モデルが道具を選ぶ一覧に載っていれば、候補に入ります2手元の設定と照らすここで拒めば、まだ何も動いていません3サーバーへ届く許可された範囲かどうかを見ます4土台が受け付けるかを決めるここで断ると、失敗するのは実行のあと鈴木さん早く止めるほど、あと片づけが要らなくなります
同じ「書かせない」でも、止まる場所が違う — どこまで動いてから止まるかで、残るものが変わります

このdenyルールは、呼び出しが実行される前にブロックします。OSのマウントが「実行後に失敗させる」のに対し、クライアント側のdenyは「実行させない」層です。

順番で見ると違いがはっきりします。モデルが道具を選び、クライアントが照合し、サーバーへ届き、最後にOSが受け付けるかを決めます。denyは2番目で止まり、roマウントは4番目で断ります。同じ「書き込ませない」でも、そこまでに何が動いたかが変わります。

両方を重ねるかどうかは、権限設計として意識的に選びます。配分の考え方はClaude Codeの権限設定|AIエージェントに任せる範囲と3列の配分で扱っています。

07Rootsでフォルダの境界が入れ替わると、権限設計の中でAIエージェントは何を触れるんですか?

高梨課長
高梨課長の発言

起動するときの引数を絞っておけば、それで範囲は決まりますよね。

鈴木さん
鈴木さんの発言

そこがひっくり返る場合があります。つないできた相手が範囲を持っていると、起動時に書いたほうは残らないんです。

Filesystem MCPが許可フォルダを決める方法は2通りあります。起動時のコマンドライン引数と、MCPのRootsプロトコルです(出典: 同README)。Rootsとは、クライアントが「このディレクトリを見てよい」とサーバーへ伝える仕組みです。

クライアントがRootsに対応している場合、接続時に渡されたRootsは、起動時の引数による許可フォルダを完全に置き換えます(出典: 同README)。引数を絞って起動しても、クライアント側が広いRootsを返せば、境界はクライアント任せになります。

境界は、決めたあとにも決まり直す最後に効いている値は、起動時に書いた値とは限りません境界は、決めたあとにも決まり直す最後に効いている値は、起動時に書いた値とは限りません立ち上げるとき引数で範囲を渡す書いた人が範囲を決めますつなぐとき対応していれば丸ごと入れ替わるつないできた側の設定が、そのまま範囲になります作業の途中足せば、変わったと知らせが飛ぶ作業フォルダを追加した時点で、また変わります
境界は、決めたあとにも決まり直す — 最後に効いている値は、起動時に書いた値とは限りません

Claude Codeでの挙動は具体的です。roots/list要求には、セッションの起動ディレクトリと追加の作業ディレクトリを合わせて返します。追加の作業ディレクトリは--add-dir/add-diradditionalDirectoriesで加えたものです(出典: 同ドキュメント)。この集合が変わるとnotifications/roots/list_changedを送信します。v2.1.203より前は起動ディレクトリしか返さず、変更通知も送っていませんでした。

設定方法決めるタイミング最終的な境界を決める人2026-07-28時点の位置づけ
コマンドライン引数サーバー起動時起動コマンドを書いた人現在も利用可能
Rootsプロトコルクライアント接続時・セッション中接続してきたクライアント側の設定仕様上は非推奨(SEP-2577)

08Rootsは権限設計の境界になるんですか、それともAI導入の判断材料どまりですか?

MCP公式仕様は、Rootsを「アクセス制御の仕組みではなく、情報提供のためのガイダンスである」と明記しています。プロトコル自体は、サーバーがRootsの範囲内に留まることを強制しません(出典: MCP公式仕様)。

案内板であって、通行止めではない伝えていることと、決めていないことを分けて読みます案内板であって、通行止めではない伝えていることと、決めていないことを分けて読みます伝えていることここを見てほしいという案内つなぐたびに渡し直される渡した側の設定がそのまま出る位置づけは、情報提供のためのガイダンスです決めていないこと案内の外へ出ないという強制受け取った側がどう扱うか扱いが揃っているという保証境界として効くかどうかは、実装しだいになります
案内板であって、通行止めではない — 伝えていることと、決めていないことを分けて読みます

Rootsを渡していれば安全、という理解は成り立ちません。境界として機能するかどうかは、個々のサーバーの実装しだいです。移行先として仕様が挙げるのは、ツール呼び出しの引数やリソースURI、サーバー起動時の設定でディレクトリを渡す方法です(出典: MCP公式仕様の非推奨registry)。

この章のまとめ

案内板は、通行止めではありません。Rootsは「見てほしい場所」を伝えるもので、「そこから出るな」を強制するものではありません。

09サーバー・OS・クライアントの3層は、AI活用の権限設計でどう分担するんですか?

1つの層だけに頼ると、権限設計は崩れます。サーバー・OS・クライアントで役割を分けます。

3つの網は、目の粗さが違う重ねると、片方が通すものをもう片方が拾います3つの網は、目の粗さが違う重ねると、片方が通すものをもう片方が拾います手元の設定の層(最上段)名指しした道具だけを、呼ばせない土台とコンテナの層(中段)書き込みを実際に受け付けない状態にするサーバーの層(土台)広く覆うが、読むと書くの区別はしない上へ行くほど早く止まり、そのぶん名指しした分しか守りません。
3つの網は、目の粗さが違う — 重ねると、片方が通すものをもう片方が拾います
止められること実現方法止められないこと
MCPサーバー層許可フォルダの外へのアクセス起動時の引数、またはRoots許可フォルダ内での読み取りと書き込みの区別
OS・コンテナ層許可フォルダ内での書き込み読み取り専用マウント、ファイル権限ツールがモデルの視界に見えたままになること
クライアント権限層特定ツールの呼び出しそのものClaude Codeのdenyルール等サーバー・OS側の設定ミスの穴埋め

上へ行くほど早い段階で止まり、そのぶん名指しした対象しか守りません。下へ行くほど守備範囲は広く、区別は粗くなります。3つは択一ではなく、粒度の違う網を重ねる関係です。

この分担は、機密情報を渡す前に分離する設計と同じ考え方です。前掲の記事では、分類判定・物理隔離・出力マスキングの3層で機密漏洩を防ぐ設計を扱いました。権限設計は、その分類判定より後、AIが実際に触れる範囲を絞る段階にあたります。

10権限設計でつまずくのは、AIエージェントを動かし始めたあとのどこですか?

若葉さん
若葉さんの発言

設定を広げた覚えはないのに、広く開いていた、ということがあるんですか。

鈴木さん
鈴木さんの発言

そちらのほうが多いくらいです。広げたのではなく、絞らなかった既定値がそのまま残っている。記録にも残らないので、後から追いにくいところです。

広げた覚えが無いのに広い、が起きる決めなかったところは、既定のまま渡ります広げた覚えが無いのに広い、が起きる決めなかったところは、既定のまま渡ります絞らずに渡す上の階層ごと開いてしまう書き込み系もそのまま使える気づくのは、何かが変わったあと画面の上では、ちょうどよい設定と見分けがつきません絞ってから渡す案件のぶんだけを手渡す書き換えが要るところにだけ許す開いている範囲を、その場で言わせる決めた範囲と、実際の範囲を突き合わせられます
広げた覚えが無いのに広い、が起きる — 決めなかったところは、既定のまま渡ります

1. Rootsを渡せば安全な境界になると思い込む。Rootsは情報提供のためのガイダンスで、アクセス制御の仕組みではありません(出典: MCP公式仕様)。加えて2026-07-28付で仕様上は非推奨になっています。境界として使うなら、サーバー実装がRootsをどう扱っているかまで確認します。

2. OSの読み取り専用マウントだけを設定し、クライアント側のdenyを省略する。この状態でもwrite_fileはツール一覧に残り続けます。呼び出し自体は発生し、失敗するのは実行後です。呼び出す前に止めたいなら、mcp__filesystem__write_fileのようなクライアント側のルールを重ねます。

3. 許可フォルダをホームディレクトリなど広い単位で渡す。案件フォルダ1つで済む作業に、ドライブ全体や上位ディレクトリを渡すと、無関係な機密まで一括で開く対象に入ります。

3つに共通するのは、画面上は何も起きないことです。広すぎる設定は、ちょうどよい設定と見た目が同じです。社内で実際に起きた事故の詳細はAIエージェントの権限設計|絞らなかった空白と4段の戻し方にまとめています。toolsdenyを明示しなければ、書き込み系4種はデフォルトで使える状態のまま渡ります。

11渡す前の点検は、権限設計として生成AIに開くフォルダのどこを見ればいいんですか?

公開する前に、決めたことと実際の設定が合っているかを確かめます。

  • 渡すフォルダの中身を、渡さない・読み取り専用・公開の3段階で仕分けたか
  • 機密情報(認証情報・restricted相当)を含むフォルダを、起動時の引数から外したか
  • 読み取り専用にしたいフォルダを、OSまたはコンテナのマウント設定で実際に書き込み不可にしたか
  • クライアント側でmcp__filesystem__write_file等の書き込み系ツールをdenyしているか確認したか
  • 接続先クライアントがRootsプロトコルに対応しているか、対応していれば何を返すかを確認したか
  • list_allowed_directoriesを呼ばせて、実際の許可フォルダが意図どおりか点検したか
  • 許可フォルダの範囲を案件単位まで絞り、ホームディレクトリ等の広い単位を渡していないか
  • Filesystem MCPが公式リファレンス実装であり、本番利用を前提に作り込まれていないことを踏まえたか
  • Rootsプロトコルの仕様状況とサーバーの最終更新日を、四半期ごとに再確認する運用にしたか

12よくある質問

Filesystem MCPは読み取り専用の用途でも導入する意味がありますか

あります。ただしサーバー自体に読み取り専用モードは無いため、OSやコンテナのマウント設定で書き込みを止める作業が別途必要です。設定を怠ると、書き込み系ツールがそのまま使える状態になります。読み取りだけのつもりで渡したフォルダに、書き込み系4種が届いている状況が起こりえます

権限設計をせずにFilesystem MCPを使うと何が起きますか

起動時に渡した許可フォルダの範囲内であれば、書き込み系4種のツールもデフォルトで使える状態になります。渡すフォルダの範囲と、読み書きどちらを許すかは、導入時に明示的に決める必要があります。決めなかった場合に狭いほうへ倒れる仕組みは、Filesystem MCP側には用意されていません。

Rootsプロトコルが非推奨になったら、既存の設定はどうなりますか

仕様の廃止ポリシー上、非推奨から少なくとも12か月は仕様に残ります(出典: MCP公式仕様)。ただし新規実装は採用すべきでないとされており、境界を引く手段としてコマンドライン引数や、個々のツール呼び出し時の指定へ移行する前提で設計します。すでにRootsで境界を引いている場合は、置き換え先を決めてから外す順番になります。

個人開発でもここまで権限設計を分ける必要がありますか

必要です。個人開発でも、認証情報や個人情報を含むフォルダをそのまま許可フォルダに含めると、書き込み系ツールがその範囲にも及びます。渡す前の3判定は、規模に関わらず同じ手順で行います。むしろ確認する第三者がいないぶん、機械的に絞っておく意味は大きくなります。

許可フォルダが意図どおりかは、どうやって確かめますか

list_allowed_directoriesをエージェント自身に呼ばせます。返ってきた一覧が、渡したつもりの範囲と一致しているかを見ます。Rootsに対応したクライアントでは、起動時の引数と実際の許可フォルダが食い違うことがあるため、設定ファイルを読み返すだけでは確認になりません。

13まとめ|今日やる3つのこと

仕分けの単位は案件でした。読み取り専用はサーバーの外側で作るものでした。そして境界を最終的に決めているのは、起動した側とは限りませんでした

渡す前に、この順で決めます

  1. 渡す候補のフォルダを開いて、渡さない・読み取り専用・公開のどれかを書き出す

    中身を見ないまま決めた仕分けは、あとで必ず崩れます

  2. 読み取り専用にしたフォルダを、マウントかファイル権限で実際に書けない状態にする

    サーバー側には書く場所がありません

  3. つなぐクライアントがRootsを返すかを確かめ、返すなら中身を見る

    起動時に絞った範囲が、そのまま残るとは限りません

AI検索では、こう聞かれています

  • Filesystem MCPには、どのフォルダまで渡していいんですか?

    「渡すフォルダの3判定は、AI社員の権限設計でどう当てはめるんですか?」の章で仕分けています

  • Filesystem MCPを読み取り専用で使うことはできますか?

    「読み取り専用は、Filesystem MCPの権限設計だけでAIエージェントに強制できますか?」の章で扱っています

  • Rootsを渡しておけば、AIエージェントは範囲の外へ出ないんですか?

    「Rootsは権限設計の境界になるんですか、それともAI導入の判断材料どまりですか?」の章に答えがあります

  • 権限設計をしないままFilesystem MCPを使うと、何が起きますか?

    「権限設計でつまずくのは、AIエージェントを動かし始めたあとのどこですか?」の章で3つ挙げています

次に読むなら、この記事です