An Mcp Server That Gives Any Mcp Client Read Access To An Smb/cifs File Share Servers
ローカルAn Mcp Server That Gives Any Mcp Client Read Access To An Smb/cifs File Share Servers について
remote-file-server-mcpは、SMB/CIFS共有上のファイルをAIアシスタントやMCPクライアントから読み取り専用で扱えるようにします。認証情報は環境変数で管理し、パス制限や機密ファイルの除外、監査ログを備えています。
主な機能
- 01ファイルの一覧表示、検索、読み取り
- 02サイズ、種類、更新日時などの取得
- 03Office文書とPDFの解析
- 04ディレクトリ制限と機密ファイルの除外
- 05ファイル内容を含まないJSON監査ログ
活用シーン
- 01ネットワーク共有上の報告書や表計算ファイルの検索
- 02文書を読み取って要約
- 03AIがアクセスできる共有ディレクトリの制限
MCP 対応
stdio経由で、SMB/CIFS共有のファイル一覧、検索、読み取り、メタデータ取得ツールをMCPクライアントに公開します。接続認証情報は環境変数で設定され、ツール呼び出しや会話履歴には含まれません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
remote-file-server-mcp
あらゆる AI アシスタントに、SMB/CIFS ファイル共有への読み取りアクセスを安全に、数分で提供します。
これは何ですか?
Claude Desktop(または任意の MCP クライアント)と、SMB/CIFS ネットワーク共有をつなぐ MCP(Model Context Protocol) サーバーです。Windows ファイルサーバー、NAS ドライブ、Samba 共有など、あらゆる SMB に対応します。
ネットワーク上に保存されたレポートの読み取り、スプレッドシートの検索、ドキュメントの要約を Claude に依頼できます。ファイルを移動したり、チャットに認証情報を貼り付けたり、書き込みアクセスを許可したりする必要はありません。
flowchart LR
A("🤖 Claude Desktop\nor any MCP client"):::client
B("🔌 file-server-mcp\n<i>this server</i>"):::server
C("🗄️ SMB File Server\nWindows · NAS · Samba"):::storage
A -- "MCP / stdio" --> B
B -- "SMB 445 · encrypted" --> C
classDef client fill:#7c3aed,color:#fff,stroke:none
classDef server fill:#2563eb,color:#fff,stroke:none
classDef storage fill:#0f766e,color:#fff,stroke:none
主な機能
| 設計上、読み取り専用 | サーバーは書き込み操作を一切公開しないため、ファイルは安全です |
| 認証情報はローカルに保持 | 環境変数として渡され、ツール呼び出しやチャット履歴に表示されることはありません |
| SMB の暗号化と署名 | パケット署名と暗号化はどちらもデフォルトで有効です。暗号化のみを無効にするには SMB_ENCRYPT=false を設定します |
| パストラバーサルをブロック | SMB 呼び出しを行う前に .. セグメントを拒否します |
| 機密ファイルの拒否リスト | .env、*.key、*.pem、id_rsa、キーストアなどは一覧表示も読み取りもされません |
| 監査ログ | 各ツール呼び出しを JSON エントリとして記録します(操作、パス、結果、ツール固有のメタデータ)。ファイルの内容は記録しません |
| Office と PDF の解析 | Excel、Word、PowerPoint、PDF ファイルを読み取り可能なテキストに解析します。オプションの [docs] extras が必要です |
| サブディレクトリの許可リスト | サーバーがモデルに必要なディレクトリのみを対象とするように制限できます |
ツール
| ツール | 引数 | 説明 |
|---|---|---|
list_files | path(任意) | ファイルとディレクトリを一覧表示します。パスが空の場合は共有ルートを示します。JSON を返します。 |
read_file | path | テキストの内容を返します。サイズ超過のファイルはプレビューを返すか、ハードエラーになります。Office/PDF ファイルは解析されます。 |
get_file_info | path | ファイルを読み取らずにメタデータ(サイズ、種類、タイムスタンプ)を返します。 |
search_files | pattern、path(任意)、max_depth(任意) | Glob 検索(例:*.csv)を行います。max_depth(デフォルトは 5、最大 10)まで再帰検索し、最大 200 件の一致を返します。 |
すべてのパスは共有ルートからの相対パスです。例:reports/2024/q1.xlsx。
クイックスタート
オプション A — pip でインストール
pip install -e /path/to/remote-file-server
次に、MCP クライアントの設定で "command": "file-server-mcp" を使用します。
オプション B — uv(インストール不要)
uv run --directory /path/to/remote-file-server file-server-mcp
オプション C — ソースから実行
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python server.py
オプション D — Docker
docker build -t file-server-mcp .
実行時の使用方法については Dockerfile を参照してください。
MCP クライアントの設定
クライアントの設定ファイルで mcpServers の下にエントリを追加します。
uv(事前インストール不要で、ソースから実行):
{
"mcpServers": {
"file-server": {
"command": "uv",
"args": ["run", "--directory", "/path/to/remote-file-server", "file-server-mcp"],
"env": {
"SMB_HOST": "192.168.1.100",
"SMB_SHARE": "my_share",
"SMB_USERNAME": "my_user",
"SMB_PASSWORD": "my_password"
}
}
}
}
pip/uv pip(コンソールスクリプトのエントリポイント):
{
"mcpServers": {
"file-server": {
"command": "file-server-mcp",
"env": {
"SMB_HOST": "192.168.1.100",
"SMB_SHARE": "my_share",
"SMB_USERNAME": "my_user",
"SMB_PASSWORD": "my_password",
"SMB_PORT": "445",
"ALLOWED_PATHS": "reports,finance",
"AUDIT_LOG_PATH": "/var/log/file-server-mcp/audit.jsonl"
}
}
}
}
セキュリティに関する注意: この設定ファイルには認証情報が含まれるため、アクセス権を制限してください(macOS/Linux では
chmod 600)。
保存した後、MCP クライアントを再起動してください。
複数のサーバーへの接続
{
"mcpServers": {
"file-server-prod": {
"command": "file-server-mcp",
"env": { "SMB_HOST": "10.0.0.10", "SMB_SHARE": "Production", "...": "..." }
},
"file-server-dev": {
"command": "file-server-mcp",
"env": { "SMB_HOST": "10.0.0.20", "SMB_SHARE": "Development", "...": "..." }
}
}
}
環境変数
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
SMB_HOST | はい | — | SMB サーバーの IP アドレスまたはホスト名 |
SMB_SHARE | はい | — | サーバー上の共有名 |
SMB_USERNAME | はい | — | SMB 認証用のユーザー名 |
SMB_PASSWORD | はい | — | SMB 認証用のパスワード |
SMB_PORT | いいえ | 445 | SMB ポート |
SMB_ENCRYPT | いいえ | true | SMB 暗号化を無効にするには false を設定します(推奨されません) |
SMB_TIMEOUT | いいえ | 30 | SMB への接続または操作がタイムアウトするまでの秒数 |
MAX_FILE_SIZE_MB | いいえ | 10 | read_file が読み込むファイルの最大サイズ(MB) |
READ_PREVIEW_LINES | いいえ | 100 | サイズ超過したファイルで返す行数。0 に設定すると、代わりにエラーになります |
ALLOWED_PATHS | いいえ | — | カンマ区切りのサブディレクトリ許可リスト。例:reports,finance/2024 |
AUDIT_LOG_PATH | いいえ | stderr | JSON 監査ログのファイルパス。未設定の場合は stderr に出力されます |
セキュリティ
- すべての接続で SMB パケット署名 が必須です。
- パストラバーサル はブロックされます。SMB 呼び出しの前に
..セグメントが拒否されます。 - 機密ファイルの拒否リスト には
.env、*.key、*.pem、*.bak、id_rsa、*.pfx、*.p12、*.token、.netrc、.htpasswd、キーストアファイルなどが含まれます。本番環境では、これとALLOWED_PATHSを組み合わせ、モデルが必要とするディレクトリのみにアクセスを制限してください。 - ファイルサイズ制限 により、コンテキストウィンドウからあふれるファイルの読み込みを防ぎます。
- 監査ログ にはすべてのツール呼び出しが JSON 形式で記録されます(操作、パス、結果、ツール固有のメタデータ)。ファイルの内容は記録されません。
- エラーメッセージはサニタイズされます。内部ホスト名、UNC パス、認証情報がクライアントに公開されることはありません。
要件
- Python 3.11+
- SMB サーバーへのネットワークアクセス(デフォルトのポートは 445)
- 共有への読み取り権限を持つ SMB 認証情報
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。