Filesystem MCPをAIエージェントにつなぐと、どのフォルダを読み書きさせるかを最初に決める必要があります。本記事は自環境への接続実績がまだ無いため、公式リポジトリと公式ドキュメントの記載だけを根拠に、権限設計の判断基準を整理します。確認日は2026年7月29日です。

01結論:Filesystem MCPの権限設計は、公開前の3判定で決まる

Filesystem MCPは、AIにローカルのファイル読み書きを許可する公式リファレンス実装です(出典: MCP公式リポジトリ)。ツールは13種類あり、うち9種が読み取り専用、4種が書き込みを伴います(出典: 同リポジトリREADME、2026-07-29確認)。

結論は3つです。

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

02公開される13のツール|権限の絞り方を決める前に知ること

権限設計を始める前に、何を許可・拒否できるのかを把握します。Filesystem MCPが公開するツールは13種類です(出典: 同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書き込み移動・リネームする移動元・移動先の両方が許可フォルダ内か要確認

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

Filesystem MCPは、GitHubのmodelcontextprotocol/serversが公開する公式リファレンス実装の1つです。同リポジトリはAnthropicが管理し、収録サーバーは「MCP機能とSDKの使い方を示す教育用サンプルであり、本番運用を前提にしたソリューションではない」と明記されています(出典: 同リポジトリREADME)。提供元の信頼レベルをどう見分けるかは『MCPの選び方|権限と提供元で見る判断軸5つ』で扱った軸がそのまま使えます。

読み書きを分けるような運用機能まで手厚く作り込まれている前提には立てません。権限設計は自分たちで足す必要があります。

03公開してよいフォルダを決める3判定|権限設計の起点

権限設計の起点は、フォルダの中身を見て3段階に仕分けることです。自社では機密情報をpublic・internal・restrictedの3段階へ分離する運用をしています。詳しい判定基準は『機密をAIエージェントに渡さない|gitignoreとフォルダ構成』にまとめています。Filesystem MCPの権限設計は、この分類の続きとして次のように対応づけられます。

フォルダの中身判定Filesystem MCPでの扱い
認証情報・契約書・決算書・restricted相当の生データ渡さない起動時の引数にも含めない。存在自体を見せない
参照だけしたい資料・過去の成果物・社外配布済みの原本読み取り専用にする引数には含めるが、OS・コンテナ側で書き込みを止める
そのAIエージェントが実際に作業する案件フォルダ公開する(読み書き)引数に含め、書き込み系ツールも許可する
フォルダを渡す前の3判定と、誤判定時に被害をどこまで戻せるか Filesystem MCPに渡すフォルダを、機密情報を含むかで「渡さない」へ、書き込みが必要かで「読み取り専用」か「公開(読み書き)」かへ振り分ける3判定フロー図。3つの行き先それぞれに、判定を誤ったときに実際に起きること(機密漏洩・意図しない上書き・情報流出)を添え、その被害が戻せるかどうかをバッジの濃淡で示す。渡さないと公開の失敗は情報が外部に出て回復不能、読み取り専用の失敗は上書きのため復旧作業で戻せる可能性がある。 BRANCH 渡す前の3判定と、誤ったときに戻せる被害の違い このフォルダを渡すか ①機密情報を含むか ②書き込みが必要か いいえ→次の問いへ はい いいえ はい 戻せない 渡さない 起動時引数から除外 誤って混入→機密漏洩 要復旧作業 読み取り専用 OSで書込み不可にする 誤ると→意図せず上書き 戻せない 公開(読み書き) 書込み系ツールも許可 誤って機密含む→情報流出 漏洩と流出は回復不能、読み取り専用の失敗だけ復旧作業で戻せる
フォルダをFilesystem MCPに渡す前の3判定フロー図

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

04読み取り専用に留めるという権限設計の判断|Filesystem MCP自体に専用モードは無い

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公式セキュリティ文書)。

この方式には注意点があります。OS側で拒否しても、write_fileedit_fileはツール一覧としてモデルの視界に残ったままです。書き込みを試みる呼び出し自体は発生し、失敗するのは呼び出しが実行された後になります。

呼び出す前に止めたい場合は、クライアント側の権限設定を重ねます。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は「実行させない」層です。両方を重ねるかどうかは、権限設計として意識的に選びます。詳しい配分の考え方は『Claude Codeの権限設定|allow・ask・denyの配分と設定例』で扱っています。

05Roots協定と権限設計|クライアント接続でフォルダ境界が変わる仕組み

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)

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

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

Filesystem MCPの許可フォルダは、いつ・誰の設定で変わるか Filesystem MCPの許可フォルダが決まるタイミングを3段階で示す時系列図。サーバー起動時にコマンドライン引数で決めた範囲は、クライアント接続時にRootsへ対応していれば完全に上書きされ、セッション中もadditionalDirectoriesの追加により境界が再び変わる。Roots非対応のクライアントなら起動時の引数のまま変わらない。2026-07-28付でRootsプロトコル自体が仕様上非推奨(SEP-2577)になったため、この上書きの仕組みを権限設計の最終防衛線にはできない。 TIMELINE 許可フォルダの境界は、いつ・誰の設定で変わるか ①サーバー起動時 コマンドライン引数を渡す ②クライアント接続時 Rootsが引数を上書き ③セッション中 境界が再び変わる 1 2 3 Roots非対応のクライアント →引数のまま変わらない SEP-2577で仕様上非推奨 2026-07-28時点の位置づけ 確定した境界 条件・非推奨 境界を最後に決めるのは、起動時の引数ではなく最後に設定した側 だから、上書きされる仕組みを権限設計の最終防衛線にしない
Filesystem MCPの許可フォルダが決まるタイミングを示す時系列図

063層で固める権限設計|サーバー・OS・クライアントの役割分担

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

止められること実現方法止められないこと
MCPサーバー層許可フォルダの外へのアクセス起動時の引数、またはRoots許可フォルダ内での読み取り・書き込みの区別
OS・コンテナ層許可フォルダ内での書き込み読み取り専用マウント、ファイル権限ツールがモデルの視界に見えたままになること
クライアント権限層特定ツールの呼び出しそのものClaude Codeのdenyルール等サーバー・OS側の設定ミスの穴埋め

この3層は、機密情報を渡す前に分離する設計と考え方が同じです。『機密をAIエージェントに渡さない|gitignoreとフォルダ構成』では、分類判定・物理隔離・出力マスキングの3層で機密漏洩を防ぐ設計を扱いました。権限設計は、その分類判定より後、AIが実際に触れる範囲を絞る段階にあたります。

権限設計3層のうち1層が抜けたら、書き込みはどこまで届くか 権限設計を担うクライアント権限層・MCPサーバー層・OS/コンテナ層の役割を上段に示し、下段でいずれか1層だけが抜けた場合に書き込みがどこまで到達するかを矢印(バー)の長さで比較する構成図。3層とも機能していれば書き込みは到達しない。OS層だけが抜けると、サーバーが誤って許可した場合に境界の外まで到達する。クライアント層だけが抜けると、サーバーとOSが許可する範囲内までは到達する。抜ける層によって到達距離が変わることを示す。 STRUCTURE 権限設計3層、抜けた1層でどこまで書き込みが届くか ①クライアント権限層 呼び出し自体を止める ②MCPサーバー層 許可フォルダの外を拒否 ③OS・コンテナ層 実際の書き込みを止める 1層だけ抜けたときの到達距離 許可範囲の境界 ①3層とも機能 到達せず(呼び出し前後で停止) ②OS層抜け サーバーが誤って許可すれば到達 ③クライアント層抜け サーバー・OSの許可範囲内で到達 1層でも抜けると、書き込みは想定より奥まで届く OS層の欠落は、サーバー設定のミスと重なると歯止めが利かない
権限設計を3層(MCPサーバー層・OS/コンテナ層・クライアント権限層)で積み重ねる構成図

権限設計が崩れる典型は、意図して広げた設定ではなく、絞らなかった既定値がそのまま残るケースです。社内で実際に起きた事故の詳細は『AIエージェントの権限設計|自動承認を広げすぎた日と戻し方』にまとめています。Filesystem MCPでも、toolsdenyを明示しなければ、書き込み系4種はデフォルトで使える状態のまま渡ります。

07権限設計でつまずきやすい3つの点

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

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

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

08権限設計チェックリスト|フォルダを公開する前に

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

09FAQ

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

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

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

起動時に渡した許可フォルダの範囲内であれば、書き込み系4種のツールもデフォルトで使える状態になります。渡すフォルダの範囲と、読み書きどちらを許すかは、導入時に明示的に決める必要があります。

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

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

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

必要です。個人開発でも、認証情報や個人情報を含むフォルダをそのまま許可フォルダに含めると、書き込み系ツールがその範囲にも及びます。渡す前の3判定は、規模に関わらず同じ手順で行います。