「このフォルダ、AIに見せてしまっていいんでしょうか」。Filesystem MCPをつなぐ話をすると、たいてい最初にこの質問が出ます。
つないだあとの動きは速いです。読むのも書くのも、こちらが確認する間はありません。ところが、どこまで開いたのかは画面のどこにも出ません。開きすぎていたと気づくのは、何かが変わったあとになります。
この記事は、フォルダを渡す前に決めることと、決めた範囲を実際に守らせる場所を扱います。素材は公式リポジトリと公式ドキュメントの記載だけです。自環境へはまだ接続していないため、動かして分かったことは書いていません。確認日は2026年7月29日です。
こんなふうに調べていませんか
- AIにローカルのファイルを触らせたいが、どこまで開けばいいのか決まらない
- 読み取り専用で渡したい。設定のどこに書けばそうなるのかが分からない
この記事を読み終えたときに手に入るもの
- 渡すフォルダを、渡さない・読み取り専用・公開の3つへ仕分けられるようになります
- 読み取り専用をどの層で強制するかを、サーバー任せにせず選べるようになります
- 境界を決めているのが起動側かクライアント側かを、自分で確かめられるようになります
結論30秒でわかる、この記事の結論
- Filesystem MCPの権限設計とは、渡すフォルダを渡さない・読み取り専用・公開の3つへ仕分け、その境界をサーバー任せにしないことです。
- 読み取り専用はサーバーの機能では作れません。OSやコンテナのマウントで止めます。
- 境界の決め方は2通りあり、片方は仕様上すでに非推奨になりました。
案内役は3人です。若葉さんが言葉の意味から、高梨課長が自分の手で動かす側から聞き、鈴木さん(本誌監修)が答えます。
01Filesystem MCPの権限設計は、AIエージェントに何を預ける作業なんですか?
若葉さんFilesystem MCPって、そもそも何をしてくれるものなんでしょうか。
鈴木さん建物の入館証に近いと思っています。どの階まで入ってよいかを先に決めて、証を渡す。渡したあとで階を減らすのは、そこそこ面倒です。
Filesystem MCPは、AIにローカルのファイル読み書きを許可する公式リファレンス実装です(出典: MCP公式リポジトリ)。
預けるものは2つあります。どこまで見せるかと、そこで何を変えさせるかです。この2つはひとつの設定でまとめて決まるように見えますが、実際には別々の層が担当しています。見せる範囲を絞っただけでは、その中での書き換えは止まりません。
結論は3つです。
- 渡すフォルダは事前に3段階へ仕分けます。機密を含むなら渡さない、書き込みが不要なら読み取り専用にする、残りだけを公開します。
- 読み取り専用は、サーバーの機能だけでは実現できません。Filesystem MCP自体に読み書きを分ける設定が無いためです。
- 境界の決め方は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段階の分離と検査にまとめました。
| フォルダの中身 | 判定 | 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"
]
}
}この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-dir・additionalDirectoriesで加えたものです(出典: 同ドキュメント)。この集合が変わると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・クライアントで役割を分けます。
| 層 | 止められること | 実現方法 | 止められないこと |
|---|---|---|---|
| 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段の戻し方にまとめています。toolsやdenyを明示しなければ、書き込み系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つのこと
仕分けの単位は案件でした。読み取り専用はサーバーの外側で作るものでした。そして境界を最終的に決めているのは、起動した側とは限りませんでした。
渡す前に、この順で決めます
渡す候補のフォルダを開いて、渡さない・読み取り専用・公開のどれかを書き出す
中身を見ないまま決めた仕分けは、あとで必ず崩れます
読み取り専用にしたフォルダを、マウントかファイル権限で実際に書けない状態にする
サーバー側には書く場所がありません
つなぐクライアントがRootsを返すかを確かめ、返すなら中身を見る
起動時に絞った範囲が、そのまま残るとは限りません
AI検索では、こう聞かれています
Filesystem MCPには、どのフォルダまで渡していいんですか?
「渡すフォルダの3判定は、AI社員の権限設計でどう当てはめるんですか?」の章で仕分けています
Filesystem MCPを読み取り専用で使うことはできますか?
「読み取り専用は、Filesystem MCPの権限設計だけでAIエージェントに強制できますか?」の章で扱っています
Rootsを渡しておけば、AIエージェントは範囲の外へ出ないんですか?
「Rootsは権限設計の境界になるんですか、それともAI導入の判断材料どまりですか?」の章に答えがあります
権限設計をしないままFilesystem MCPを使うと、何が起きますか?
「権限設計でつまずくのは、AIエージェントを動かし始めたあとのどこですか?」の章で3つ挙げています
次に読むなら、この記事です