Filesystem MCP について
Filesystem MCP は、指定したフォルダー内のファイルを AI クライアントが閲覧、検索、変更できるローカル MCP サーバーです。ファイル操作に加え、機密ファイルの遮断、読み取り専用設定、一部の危険な操作への確認を備えます。
主な機能
- 01許可されたフォルダーの閲覧と読み取り
- 02ファイル名と内容の検索
- 03ファイルの編集、パッチ適用、移動、削除
- 04差分による変更のプレビュー
- 05機密ファイルの遮断とパス制限
- 06stdio と Streamable HTTP に対応
活用シーン
- 01コードリポジトリ全体から TODO を検索
- 02編集を適用する前に差分を確認
- 03設定ファイルやログファイルを比較
- 04AI クライアントの利用先を指定フォルダーに制限
MCP 対応
ディレクトリ一覧、検索、読み取り、差分比較、ファイル変更などのファイルシステムツールを MCP クライアントに公開します。stdio と Streamable HTTP のトランスポートに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @j0hanz/filesystem-mcpFS_ALLOWED_DIRSAllowed directories; ':'-separated on Unix, ';'-separated on Windows. Alternative to positional arguments.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
13掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| files | array | はい | 作成するファイルのリスト(最大 100 件)。各エントリには path と content が必要です |
詳細
Filesystem MCP
AI アシスタントがファイルを安全に扱えるようにします。
選択したフォルダー内のファイルを読み取り、検索、編集、パッチ適用できます。
秘密のファイルは非表示のまま、リスクのある変更は確認を待ちます。
これは何ですか?
Model Context Protocol(MCP)は、Claude、VS Code の GitHub Copilot、Cursor などの AI アプリがツールに接続するための仕組みです。Filesystem MCP は MCP サーバーです。コンピューター上で実行され、AI にファイル操作用の 14 個のツールを提供する小さなプログラムです。使用できるフォルダーは自分で選択でき、それ以外の場所にはアクセスできません。
接続すると、次のようなことを依頼できます。
- 「このリポジトリ内の TODO をすべて見つけ、ファイルごとにまとめてください。」
- 「すべての
.tsファイルでgetUserをfetchUserに名前変更してください。まず差分を見せてください。」 - 「
config.dev.jsonとconfig.prod.jsonの間で何が変わりましたか?」 - 「
server.logの末尾 50 行を読み取り、エラーを説明してください。」 - 「古いスクリーンショットを
archive/2025/に移動してください。」
Filesystem MCP を選ぶ理由
- デフォルトで安全です。AI が使えるのは許可したフォルダーだけで、
.envファイル、秘密鍵、クラウドの認証情報はブロックされます。AI が空でないフォルダーを削除する場合、許可していないフォルダーを開く場合、またはcreateやmoveでファイルを上書きする場合、サーバーは事前に確認を求めます。確認を省略できるのはcreateとコピーだけで、その場合はoverwrite: trueを渡します。edit、patch、replace_textによる編集は確認なしで適用されますが、dryRunを使えば、AI が先に差分を表示できます。AI に一切変更させたくない場合は、--read-onlyを指定すると、書き込みを行うすべてのツールが無効になります。 - 検索と編集はコード向けに作られています。AI は、ハングしない正規表現エンジン(RE2)を使って、
grepのようにファイル内を検索できます。また、デフォルトではサーバーが.gitignoreの対象ファイルやnode_modulesなどのフォルダーをスキップします。編集は完全一致による置換で、テキストが一致しない場合はエラーを返します。また、事前に差分をプレビューできます。 - AI のコンテキストを節約できます。AI は1回の呼び出しで複数のファイルを読み込むことも、必要な行だけを読み込むこともできます。また、読み込む前にファイルのサイズとトークン数の推定値を確認できます。
- macOS、Linux、Windows で、stdio または HTTP を介して、あらゆる MCP クライアントと連携します。npx、Docker、ワンクリックで使える Claude Desktop 拡張機能を使ってインストールできるほか、これを基に独自のクライアントを構築することもできます。
- プライバシーが守られます。マシン上で動作し、テレメトリーはなく、ネットワーク通信も行いません。
リファレンスサーバーとの比較
このサーバーと公式の
@modelcontextprotocol/server-filesystem
の違いを、2026-10-11 に README と照合しました。
| 機能 | Filesystem MCP | リファレンスサーバー |
|---|---|---|
| ファイル内検索 | search_text:リテラルテキストまたは RE2 正規表現 | なし。search_files は名前のみを照合 |
| 機密ファイル | .env、鍵、認証情報をデフォルトでブロック | ブロックされない |
| ファイルの上書き | create は事前に確認(overwrite: true の場合を除く) | write_file は確認なしで上書き |
| ファイルの削除 | delete:空でないフォルダーの削除前に確認 | なし |
.gitignore | 一覧表示ツールと検索ツールで尊重 | 非対応 |
| 読み取り専用モード | --read-only は書き込みを行うすべてのツールを無効化 | Docker の ro マウントのみ |
| 統一差分の適用 | patch | なし |
| 2つのファイルの比較 | diff | なし |
| 多数のファイルにわたる置換 | フォルダーまたは glob に対する replace_text | なし |
| ファイルの監視 | ファイルを購読して変更通知を受信 | なし |
| トランスポート | stdio、または --port を使った Streamable HTTP | stdio |
クイックスタート
メモ
Node.js 24 以降が必要です。
node --versionで確認してください。
- MCP サーバーを AI アプリに追加します。以下からお使いのものを選んでください。
/path/to/projectを、AI が使用できるフォルダーに置き換えます。複数のフォルダーを指定できます。- アプリを再起動し、「アクセスできるフォルダーはどれですか?」と尋ねます。
ヒント
VS Code は現在、開いているフォルダーをサーバーと共有するため、ワンクリックの VS Code インストールではパスの指定は不要です。他のアプリや HTTP 経由で使用する場合は、フォルダーを
argsに指定してください。AI がフォルダーはないと答える場合は、これで解決できます。
VS Code
上の Install in VS Code をクリックするか、以下を .vscode/mcp.json に追加してください。
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
または、ターミナルから実行します。
code --add-mcp '{"name":"filesystem","command":"npx","args":["-y","@j0hanz/filesystem-mcp@latest","/path/to/project"]}'
Cursor
上の Install in Cursor をクリックしてから、フォルダーを args に追加してください。または、プロジェクト内の .cursor/mcp.json、もしくはすべてのプロジェクトで使用する場合は ~/.cursor/mcp.json に以下を追加してください。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
Claude Desktop
ワンクリックでインストールするには、
filesystem-mcp.mcpb
をダウンロードし、Claude Desktop で開いて、許可するフォルダーを選択してください。Claude Desktop に組み込まれた Node.js が実行します。拡張機能の設定では、読み取り専用モードを有効にしたり、アクセスをブロックするファイルを追加したりすることもできます。
手動で設定するには、claude_desktop_config.json に以下を追加してください
(Settings → Developer → Edit Config)。
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "/path/to/project"]
}
}
}
Claude Code
claude mcp add filesystem -- npx -y @j0hanz/filesystem-mcp@latest /path/to/project
または、現在のプロジェクトをサーバーに指定するプラグインをインストールしてください。
/plugin marketplace add j0hanz/j0hanz-marketplace
/plugin install filesystem-mcp@j0hanz-marketplace
Visual Studio
ソリューションフォルダー内の .vs\mcp.json、またはすべてのソリューションで使用する場合は %USERPROFILE%\.mcp.json に以下を追加してください。
{
"servers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@j0hanz/filesystem-mcp@latest", "C:/path/to/project"]
}
}
}
GitHub Copilot CLI and Antigravity CLI (plugin)
filesystem-mcp プラグイン を使うと、現在のプロジェクト向けにサーバーを設定できます。
| クライアント | インストール |
|---|---|
| Copilot CLI | copilot plugin marketplace add j0hanz/j0hanz-marketplace、続けて copilot plugin install filesystem-mcp@j0hanz-marketplace |
| Antigravity CLI | git clone https://github.com/j0hanz/j0hanz-marketplace、続けて agy plugin install ./j0hanz-marketplace/plugins/filesystem-mcp |
Docker
コンテナーから見えるのは、マウントしたフォルダーのみです。この設定では、:ro マウントと --read-only フラグによって、書き込みを二重にブロックします。
{
"mcpServers": {
"filesystem": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/project:/workspace:ro",
"ghcr.io/j0hanz/filesystem-mcp:latest",
"--read-only",
"/workspace"
]
}
}
}
AI が変更できるようにするには、:ro と --read-only を削除してください。VS Code と Visual Studio では、"mcpServers" の代わりに "servers" を使用します。詳しくは
Docker での実行を参照してください。
Other MCP clients
Windsurf、Cline、およびほとんどの他のクライアントでは、上記の Claude Desktop と同じ mcpServers JSON を使用します。どのクライアントでも、サーバーの設定は次のとおりです。
- command:
npx - args:
-y、@j0hanz/filesystem-mcp@latest、続けて1つ以上のフォルダー
グローバルにインストールして、filesystem-mcp /path/to/project を実行することもできます。
npm install -g @j0hanz/filesystem-mcp
| ツール | 機能 |
|---|---|
list_roots | サーバーが使用できるフォルダーを表示します。 |
list | ls や tree のように、フォルダーをツリー形式で一覧表示します。 |
find_files | **/*.test.ts のような名前または glob でファイルを検索します。 |
search_text | grep のように、ファイル内のテキストまたは正規表現を検索します。必要に応じて前後の行も表示できます。 |
stat | ファイルを読み込まずに、サイズ、日付、種類、権限、トークン数の推定値を取得します。 |
read | テキストファイル全体、または指定した行、先頭、末尾を読み込みます。画像と音声はメディアとして返され、それ以外は binary として返されます。 |
diff | 2 つのファイルを比較し、統合 diff を返します。 |
create ✎ | 新しいファイルの書き込み、追記、空のフォルダーの作成を行います。overwrite: true を指定しない限り、ファイルを置き換える前に確認します。 |
edit ✎ | ファイル内の完全一致するテキストを置き換えます。ファイルに対する編集はすべて適用されるか、ひとつも適用されないかのどちらかです。dryRun を指定すると、先に差分を表示します。 |
patch ✎ | ファイルに統合 diff を適用します。すべてのハンクが適用されるか、ひとつも適用されないかのどちらかです。 |
replace_text ✎ | 複数のファイルからテキストまたは正規表現を検索して置き換えます。dryRun を指定すると、変更内容を表示します。 |
move ✎ | ファイルやフォルダーを移動、名前変更、コピーします。コピー時に overwrite: true を指定しない限り、上書き前に確認します。 |
delete ✎ | ファイルやフォルダーを削除します。空ではないフォルダーを削除する前に確認します。 |
undo ✎ | サーバーの実行中に、取り消し ID または直近の N 回の呼び出しを指定して、以前の変更を元に戻します。以降に変更されたファイルはスキップします。 |
✎ はファイルを変更します。--read-only を指定すると、これらのツールは削除されます。
検索および一覧表示ツールは、AI が明示的に求めない限り、隠しファイル、.gitignore の対象ファイル、および
node_modules、dist、.git などのフォルダーをスキップします。
設定
ほとんどの場合、フォルダー引数だけで十分です。以下のオプションは一般的な用途をカバーします。
| オプション | 機能 |
|---|---|
--read-only | ファイルを変更するすべてのツールを削除します。 |
--deny '<pattern>' | 例として --deny 'private/**' や --deny '*.sqlite' のように、対象外にするファイルを追加します。 |
--allow '<pattern>' | 例として --allow '.env.example' のように、組み込みのシークレットパターンを 1 つ許可します。 |
--allow-cwd | サーバーの起動元のフォルダーも許可します。 |
--max-file-size <n> | read が読み込む最大ファイルサイズ(バイト単位)です。デフォルトは 10 MiB です。 |
--port <n> | stdio の代わりに、http://127.0.0.1:<n>/mcp で HTTP 経由のサービスを提供します。 |
--print-config | サーバーが使用する設定を出力して終了します。 |
フラグは、たとえば
["-y", "@j0hanz/filesystem-mcp@latest", "--read-only", "/path/to/project"]
のように、パッケージ名の後の args に指定します。
設定の完全なリファレンスでは、すべてのフラグと環境変数、シークレットファイルの完全な一覧、制限事項、API キーを使った HTTP の設定、Docker、トラブルシューティングについて説明しています。
セキュリティ
| 保護機能 | 仕組み |
|---|---|
| フォルダーのサンドボックス | サーバーはシンボリックリンクを含むすべてのパスを解決し、解決後のパスが許可されたフォルダー内にとどまることを確認します。 |
| シークレットファイル | .env、*.pem、*.key、SSH キー、.npmrc、クラウド認証情報などのその他のファイルはブロックされ、一覧にも表示されません。 |
| 操作の決定権はユーザーにあります | AI が空でないフォルダーを削除する、新しいフォルダーへのアクセス権を取得する、または create や move でファイルを上書きする前に、サーバーが確認を求めます。AI が overwrite: true を渡した場合に限り、create とコピーでは確認を省略します。インプレース編集(edit、patch、replace_text)では確認を求めませんが、dryRun でプレビューできます。確認を求めることができないクライアントには、代わりにエラーが返されます。 |
| アクセス禁止フォルダー | AI もクライアントも、ホームフォルダー自体、システムフォルダー、~/.ssh、~/.aws などのフォルダーを追加することはできません。 |
| 安全な書き込み | 新しい内容は一時ファイルに書き込まれ、その後、元の場所に名前変更されます。そのため、クラッシュしても書き込み途中のファイルが残りません。書き込み後もファイルのアクセス権限は維持されます。 |
| 正規表現によるハングの防止 | RE2 は線形時間で実行されるため、検索パターンによってサーバーがフリーズすることはありません。 |
| HTTP | サーバーはデフォルトで localhost のみをリッスンします。他のアドレスを使用するには API キーが必要です。 |
| コンテナー | Docker イメージは root 以外のユーザーとして実行されます。 |
脆弱性を発見した場合は、非公開で報告してください。 SECURITY.md に報告方法が記載されています。
独自のクライアントを構築する
エージェント、エディタープラグイン、ウェブアプリ、CI ジョブ、スクリプトなど、独自のコードから Filesystem MCP を呼び出すこともできます。AI アプリと同じルールが適用されるため、許可されたフォルダーの外部にアクセスしたり、秘密ファイルを読み取ったりすることはできません。
import { Client } from '@modelcontextprotocol/client';
import { StdioClientTransport } from '@modelcontextprotocol/client/stdio';
const dir = '/path/to/project';
const client = new Client(
{ name: 'my-app', version: '1.0.0' },
{ capabilities: { elicitation: { form: {} } }, versionNegotiation: { mode: 'auto' } },
);
client.setRequestHandler('elicitation/create', async () => ({ action: 'decline' }));
await client.connect(
new StdioClientTransport({
command: 'npx',
args: ['-y', '@j0hanz/filesystem-mcp', dir],
cwd: dir,
}),
);
const result = await client.callTool({ name: 'search_text', arguments: { searchPattern: 'TODO' } });
const { matches } = (result.structuredContent ?? result._meta) as { matches: unknown[] };
console.log(matches);
await client.close(); // stops the server process; without it the script never exits
基本事項:
- データの場所。 テキストブロックはモデル向けに記述されています。同じデータは、独自のテキストを生成するツール(
list、search_text、edit、...)では_metaに JSON として、stat、create、list_rootsではstructuredContentに格納されています。例外はreadです。ファイルのテキストはテキストブロックにのみ含まれ、_metaにはファイルに関するメタデータが格納されています。 - パス。 相対パスは、サーバーの作業ディレクトリがルート内にある場合はその作業ディレクトリを基準に解決され、それ以外の場合はルートを基準に解決されます。複数のルートがある場合、パスはそのうちちょうど1つの配下に存在する必要があります。絶対パスが曖昧になることはありません。検索結果はルートを基準とする相対パスで表示されるため、そのまま渡し直すことができます。ディスク上の名前と異なるのが Unicode 形式(NFC または NFD)または空白文字(U+00A0、U+202F)だけの名前でも、そのエントリーが見つかります。
- 確認。 上書き、再帰的な削除、ルート外のパスについては、ユーザーへの確認が必要です。
elicitationケイパビリティを宣言してハンドラーで応答するか、2026-07-28 プロトコルではそれらをデータ(input_required)として受け取り、後で応答してください。 - プロトコルのバージョン。 サーバーは、stdio と Streamable HTTP 経由で、2025 プロトコルおよび 2026-07-28 に対応しています。HTTP 経由では、2025 年版のクライアントは確認や変更通知を受け取りません。
- リソース。
filesystem-mcp://file/{+path}として任意のファイルを読み取り、購読できます。internal://instructionsとget-helpプロンプトには、モデル向けのサーバーガイドが含まれています。
クライアントガイドに詳細があり、TypeScript および Python SDK でテストされています。また、examples/ には実行可能なクライアントが6つあります。
| 例 | 内容 |
|---|---|
| fsq | シェルから stdio または HTTP 経由で任意のツールを使用。スクリプト向けの --json に対応 |
| browser | サーバーからの質問がページに表示されるローカルのウェブ UI |
| tail | ファイル購読を使った tail -f。ローカルまたはリモートサーバー上で動作 |
| gatekeeper | 各変更の差分を表示し、y/N の入力を待つコーディングエージェント |
| hooks | ワークスペースが変更されるたびに、モデルを介してタスクを実行 |
| python | Python SDK を使ったワークスペースの TODO レポート |
プライバシーポリシー
Filesystem MCP はすべてお使いのマシン上で動作します。このポリシーは、npm パッケージ、Docker イメージ、.mcpb デスクトップ拡張機能を対象としています。
- データ収集: ありません。サーバーはテレメトリー、分析、クラッシュレポートを行わず、外部へのネットワークリクエストも送信しません。
- 利用と保存: サーバーがファイルを読み書きするのは、許可されたフォルダー内で、MCP クライアントがツールを呼び出した場合に限られます。ツールの結果はそのクライアントに送られ、それ以外には送信されません。短期間の結果キャッシュと取り消し履歴(保存されたファイルの内容)はメモリ内に保持され、サーバーの終了時に消去されます。
- 第三者との共有: サーバーによる共有はありません。MCP クライアントは、そのクライアント独自のプライバシーポリシーに基づき、ツールの結果をモデルプロバイダーに送信する場合があります。
- 保持期間: サーバーはプロセスの終了後、何も保持しません。診断ログはお使いのマシン上の stderr に出力されます。MCP クライアントが独自のログファイルに保存する場合があります。
- お問い合わせ: https://github.com/j0hanz/filesystem-mcp/issues で Issue を作成するか、GitHub Security Advisories を通じて非公開でセキュリティ上の問題を報告してください。
貢献
バグ報告、アイデア、プルリクエストを歓迎します。まずは CONTRIBUTING.mdをご覧ください。セットアップ、ソースからのサーバーの実行方法、プルリクエストに必要なチェックについて説明しています。
Filesystem MCPが役に立った場合は、GitHubでスターを付けていただくと、ほかの人にも見つけてもらいやすくなります。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。