/ ディレクトリ / プレイグラウンド / Filesystem
● 公式 modelcontextprotocol ⚡ 即起動

Filesystem

作者 modelcontextprotocol · modelcontextprotocol/servers

Claude にサンドボックス化された読み書きアクセスを 1 つのディレクトリに付与し、シェルコマンドなしでコードをリファクタリング、ドキュメント処理、ログ分析ができます。

リファレンス実装の Filesystem MCP です。1 つ以上のディレクトリをルートとしてマウントし、すべてのツール呼び出しが厳密にそれらのルートに限定されるため、Claude が../で SSH キーまで侵入することはできません。テキスト、バイナリ、検索、行単位の編集に対応します。理由あって最も広くインストールされている MCP です。

なぜ使うのか

主な機能

ライブデモ

実際の動作

filesystem.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "filesystem",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/workspace"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "filesystem": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@modelcontextprotocol/server-filesystem",
          "/workspace"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /workspace

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Filesystem

コードベース全体で関数をリファクタリングし、破損を避ける方法

👤 多くのファイルで使用されている API を名前変更・整形するエンジニア ⏱ ~20 min intermediate

使うタイミング: 関数を名前変更するか署名を変更するか、ヘルパーをインライン化する必要があり、それが repo 全体の 30 ファイル以上で使用されている場合です。

前提条件
  • クリーンな git ワーキングツリーgit statusで何もステージされていないことを確認し、git diffでレビューして、必要に応じてgit restoreできるようにします
  • ファイルシステムルートを repo にスコープnpx -y @modelcontextprotocol/server-filesystem /abs/path/to/repoで起動
フロー
  1. すべての呼び出しサイトを検索
    コードベースでgetUserProfile(の使用方法をすべて検索します。マッチをファイル別にグループ化して、ファイルごとのマッチ数を教えてください。✓ コピーしました
    → ファイルリストとマッチ数(テスト vs ソースの区別なし)
  2. 1 つのファイルでドライラン編集
    src/api/users.ts 内の編集がどのように見えるかを示してください — 完全なファイルではなく diff を示します。まだ書き込まないでください。✓ コピーしました
    → 最小限の diff パッチ(フルファイル書き換えではない)
  3. すべてのファイルに適用してレポート
    ステップ 1 のすべてのファイルに同じ変換を適用してください。write_file(上書き)ではなく edit_file(行単位)を使用してください。パターンがきれいにマッチしなかったファイルがあれば教えてください。✓ コピーしました
    → ファイルごとの成功/スキップログ

結果: レビュー可能でテストを実行できるフォーカスされた git diff — 予期しないフルファイル書き換えなしです。

注意点
  • Claude がwrite_fileを使用し、複雑な編集時にサイレントでファイルの半分をドロップ — インプレース変更には明確にedit_fileが必要です。write_fileは新規作成ファイルのみを許可
  • マッチが無関係なコード(例:getUserProfileAvatar)にヒット — 検索をアンカー:getUserProfile((末尾の括弧)、またはワード境界の正規表現を使用
組み合わせ: git · github

本番ログファイルをローカルで読んでクラッシュをトリアージ

👤 ディスク上にログを持つオンコール エンジニア ⏱ ~15 min beginner

使うタイミング: ログバンドルをカスタマーインシデントからダウンロードし、grep 知識なしで針を見つける必要がある場合です。

前提条件
  • ディスク上のログ — 専用の /incidents/<ticket>/ フォルダにダウンロード/アンジップ
フロー
  1. 構造的な概要を取得
    /incidents/TICKET-1234/ 以下のファイルをリストします。各ログファイルについて、サイズと内部の最初 + 最後のタイムスタンプを表示してください。✓ コピーしました
    → 時間で制限されたインベントリ
  2. エラークラスタを検出
    すべての .log ファイルでERROR|FATAL|panicパターンを検索します。エラー密度が最も高い 10 分間を教えてください。✓ コピーしました
    → 時間ウィンドウが数時間ではなく数分に絞られた
  3. 最初の FATAL 周辺を読む
    app.log の最初の FATAL 行の周囲 50 行を読んでください。クラッシュする直前にシステムが何をしていたかを説明してください。✓ コピーしました
    → ナレーティブな再構成(ログの単なる引き写しではない)

結果: インシデント文書に貼り付けられる 5 文のタイムラインです。

注意点
  • 大規模ログファイル(>50MB)がモデルコンテキストを超える — head/tail + grep スタイルの抽出のみを要求し、大きなファイルで Claude に全体を読むことを要求しないでください
組み合わせ: sentry · github

PDF、Markdown、ドキュメントのフォルダについて質問する

👤 大量の参考資料を持つ研究者、アナリスト ⏱ ~15 min beginner

使うタイミング: フォルダに 50 のペーパー/契約書/レポートがあり、1 つの特定の事実を抽出するか、それらを比較する必要がある場合です。

前提条件
  • 1 つのフォルダに整理されたドキュメント — フラット化して 1 つのディレクトリに、または浅い木構造に整理します。Claude はより平坦な構造に対してよく走査します
フロー
  1. フォルダのインデックス化
    /research/2026-market-study/ 以下のすべてのファイルをリストします。各ファイルについて、ファイル名と最初の 200 文字を教えてください。✓ コピーしました
    → クイックプレビュー付きインベントリ
  2. 実際の質問をする
    これらのドキュメントのうち、'contractual indemnity cap'について言及しているものはどれですか?ヒットしたもの各々について、正確な文を引用して、ファイル名を教えてください。✓ コピーしました
    → 単なるバイブスではなく、ファイル名と正確な引用文
  3. クロスドキュメント統合
    それを持つ 3 つのドキュメント全体でインデムニティ上限を比較してください。どれが最も有利で、その理由は何ですか?✓ コピーしました
    → 直接引用を���むサイド・バイ・サイド比較

結果: 30 秒以内に確認できるファイル名+引用による回答です。

注意点
  • スキャンされた PDF は画像ベース — コンテンツ検索に失敗 — 最初に OCR を実行するか(例:ocrmypdf)、専用の PDF MCP を使用します。開始前に'検索不可'ファイルを注記
  • Claude は要約してソース属性を失うことがある — プロンプトで常にfilename + 正確な引用を要求し、それなしで回答を拒否
組み合わせ: memory

1 つのチャットターンで仕様から新しいプロジェクトをスカッフォールド

👤 新しいサービス/ライブラリ/プロトタイプを開始するエンジニア ⏱ ~10 min beginner

使うタイミング: 1 パラグラフの仕様があり、テンプレート repo からコピーすることなく、ボイラープレート(フォルダ、package.json、README、テスト)を具現化したい場合です。

前提条件
  • 空のターゲットディレクトリmkdir /projects/newthingして、ファイルシステムルートを親に指定
フロー
  1. 書き込む前にレイアウトに同意
    X を行う TypeScript Node CLI ツールが欲しいです。フォルダー構造を提案し、作成する各ファイルをリストします(目的を 1 行で)。まだ書き込まないでください。✓ コピーしました
    → ファイル単位の計画 — ディスクに触れる前に拒否できます
  2. ファイルを書き込み
    よさそうです。/projects/newthing/ にすべてのファイルを作成してください。最小限で慣用的なコンテンツを使用してください — プレースホルダーコメント、'TODO'スタブは不要です。✓ コピーしました
    → ディスク上のファイル、初回でtsc --noEmitnpm testがクリーン
  3. 読み返して検証
    作成したすべてのファイルを読み返して、プロジェクトがtsc --noEmitnpm testをパスするかどうか確認してください。パスしないものを修正してください。✓ コピーしました
    → 自己チェック(具体的な修正、手振りなし)

結果: 30 分ではなく 3 分で機能するスケルトンプロジェクトです。

注意点
  • Claude がファイルを書き込んでからセッション中に書いたものを忘れる — 最初にファイル計画を作成して書き込む;最後に再度読むとドリフトをキャッチ
組み合わせ: git · github

組み合わせ

他のMCPと組み合わせて10倍の力を

filesystem + github

ローカルでファイルを編集し、チャットを離れずに新しいブランチをプッシュして PR を開く

src/utils/format.ts:42 のタイポを修正し、新しいブランチfix/typo-formatをプッシュして、'fix: typo in format.ts'というタイトルで PR を開いてください。✓ コピーしました
filesystem + git

編集を行い、diff をレビューし、Claude 内でコミット — すべてコミット内で実行

src/ 内の 3 つの重複するヘルパーをリファクタリングして、1 つの共有ユーティルに統合してください。コミット前に diff を表示してから、クリーンなメッセージでコミットしてください。✓ コピーしました
filesystem + sqlite

ディスクから CSV を読み取り、分析のために SQLite テーブルにロード

/data/orders.csv を読み取り、タイプを推測して、/data/analysis.db にテーブルordersとしてロードしてください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
read_text_file path: str, head?: int, tail?: int テキストファイルを読み取ります。大きなファイルを避けるために head/tail パラメータを使用 無料
read_media_file path: str マルチモーダル入力用に画像、PDF、オーディオを base64 として読み取り 無料
read_multiple_files paths: str[] 関連ファイルを 1 ターンでバッチ読み取り(N 回呼び出しより高速) 無料
write_file path: str, content: str 新しいファイルを作成するか、既存のファイルを完全に置き換える — 破壊的 無料
edit_file path: str, edits: [{oldText, newText}], dryRun?: bool より安全な行単位編集。既存ファイルには常に write_file より優先 無料
create_directory path: str ディレクトリを作成します(再帰的、mkdir -p スタイル) 無料
list_directory path: str 非再帰的 ls 無料
directory_tree path: str プロジェクト構造の一目での概要 無料
move_file source: str, destination: str 名前変更または再配置 無料
search_files path: str, pattern: str, excludePatterns?: str[] 再帰的コンテンツ検索 — grep のような 無料
get_file_info path: str コンテンツを読まずにファイルを stat 無料
list_allowed_directories none サーバーが起動したルートを確認 無料

コストと制限

運用コスト

APIクォータ
無制限 — ローカル I/O です
呼び出しあたりのトークン
ファイルサイズに依存 — ファイルコンテンツの約 4 文字あたり 1 トークンを予算化
金額
無料
ヒント
search_fileshead/tailを使用し、ファイル全体を読み取らないでください。2MB ログをコンテキストにダンプするには、約 500k トークンのコストがかかります。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: filesystem-read filesystem-write(ミューティングの場合)
認証情報の保管: 認証情報なし — アクセスは引数として渡されるルートディレクトリを介しています
データ送信先: サーバーからなし — ファイルコンテンツは MCP クライアント経由でコンテキストとして LLM プロバイダーに送信されます
絶対に付与しない: root=/ root=$HOME root=/etc or /var

トラブルシューティング

よくあるエラーと対処法

Error: Path is not within allowed directories

ファイルは起動時に渡されたすべてのルートの外側にあります。追加のルート引数でサーバーを再起動するか、list_allowed_directoriesを使用して実際に許可されているものを確認してください。

確認: Ask Claude to call `list_allowed_directories`
ENOENT: no such file or directory

パスタイプまたは不正なワーキングディレクトリの仮定です。ルートでdirectory_treeを使用して実際のレイアウトを確認します。

edit_file: oldText not found

oldTextパターンは空白を含めて完全に一致する必要があります。Claude に最初にread_text_fileを実行させ、正確な部分文字列をコピーします。

大規模ファイルがクライアントをフリーズ

数 MB より大きいファイル全体を読まないでください。read_text_filehead/tailパラメータを使用するか、search_filesを使用して関連行のみを検索します。

確認: Check file size with `get_file_info` first

代替案

Filesystem 他との比較

代替案代わりに使う場面トレードオフ
git MCP生のファイル I/O ではなく、バージョン認識操作(diff、blame、log)が必要な場合書き込みツールなし;git レンズを通した読み取り専用
GitHub MCPファイルがリモート repo に存在し、ローカルクローンを必要としない場合PAT が必要です;ファイルごとのレイテンシーはローカルディスクよりはるかに高い
JetBrains MCPエディットが実行中の IDE インスタンスに表示され、リファクタリングツールを使用したい場合JetBrains IDE が開く必要があります;プレーンファイルシステムより重い

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る