mcpField
M
MCP Server for FTP Access

MCP Server for FTP Access

ローカル
github.com/alxspikerファイル・ストレージ361 週間前に更新

MCP Server for FTP Access について

FTP、FTPS、SFTP サーバー上のファイルを管理する MCP サーバーです。リモート操作に加え、サーバー実行ホストとリモートストレージ間のストリーミング転送に対応し、認証情報の保護やローカルパスの制限を設定できます。

主な機能

  1. 01リモートファイルとディレクトリの一覧・管理
  2. 02テキストおよびバイナリファイルの転送
  3. 03リモートテキストファイルの編集と追記
  4. 04FTP、FTPS、SFTP に対応
  5. 05認証情報の暗号化とローカルパス制限

活用シーン

  1. 01ビルドしたサイトをリモートストレージへアップロード
  2. 02SFTP サーバーからファイルをダウンロード
  3. 03リモートサーバー上のテキストファイルを更新
  4. 04エージェントの転送先を許可フォルダーに限定

MCP 対応

ディレクトリ一覧、転送、編集、削除など、11 種のファイル管理ツールを MCP クライアントに公開します。`FTP_LOCAL_ROOTS` を設定すると、ローカルパスを使ったストリーミングツールが有効になります。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ftp": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
起動コマンドnpx -y @smithery/cli

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@smithery/cli

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MseeP.ai Security Assessment Badge

FTP、FTPS、SFTP アクセス用 MCP サーバー

smithery badge

この Model Context Protocol(MCP)サーバーは、FTP、FTPS、SFTP サーバー向けのファイル管理ツールを提供します。ディレクトリ一覧の表示、バイナリデータを安全に扱えるダウンロード/アップロード、テキストの編集、追記、名前変更/移動、ディレクトリの作成、削除に対応しています。

プロトコルのサポート

  • FTP — 従来の FTP。通常はポート 21 を使用します。
  • FTPS — TLS で保護された FTP。FTP_PROTOCOL=ftp と FTP_SECURE=true を使用します。
  • SFTP — SSH ファイル転送プロトコル。通常はポート 22 を使用します。SFTP は FTPS とは異なるプロトコルで、SSH によってすでに暗号化されているため、FTP_SECURE は適用されません。

機能

  • ファイルとディレクトリの一覧表示
  • テキストファイルまたはバイナリファイルのダウンロードとアップロード
  • ローカルファイルをパスで指定してストリーミングでアップロードおよびダウンロード(オプトイン)。リクエストによるサイズ制限はありません
  • リモートファイル内のテキストを正確に編集
  • ファイルへの追記
  • ファイル/ディレクトリの名前変更または移動
  • ディレクトリの作成と削除
  • FTP、FTPS、SFTP のサポート
  • SFTP パスワードまたは SSH 秘密鍵による認証
  • オプションの 1Password CLI 秘密鍵解決
  • AES-256-GCM による認証情報の暗号化
  • 暗号化キーの OS キーチェーン対応

入手先

Cursor プラグインディレクトリへの掲載は審査中です。

インストール

前提条件
  • Node.js 18.14 以降
  • Claude Desktop などの MCP 対応クライアント
npm でのインストール

サーバーは mcp-server-ftp として公開されています。

{
  "mcpServers": {
    "ftp-server": {
      "command": "npx",
      "args": ["-y", "mcp-server-ftp"],
      "env": {
        "FTP_HOST": "ftp.example.com"
      }
    }
  }
}
Smithery でのインストール(非推奨)

Smithery は 2026 年 10 月 31 日に MCP プロキシと接続管理を終了する予定で、Smithery CLI は非推奨となっています。このインストール方法はその時点で利用できなくなります。代わりに npm からインストールしてください。

npx -y @smithery/cli install alxspikers-team/mcp-server-ftp --client claude
Cursor プラグイン

このリポジトリは Cursor プラグインでもあります。.cursor-plugin/plugin.json と mcp.json で構成され、npx -y mcp-server-ftp を ftp-server として実行します。以下の各 FTP_* 設定は、Cursor でプラグインをインストールまたは設定するときに指定するプラグイン変数です。

ソースからのビルド
git clone https://github.com/alxspiker/mcp-server-ftp.git
cd mcp-server-ftp
npm install
npm run build

設定

FTP の例
{
  "mcpServers": {
    "ftp-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-ftp/build/index.js"],
      "env": {
        "FTP_HOST": "ftp.example.com",
        "FTP_PORT": "21",
        "FTP_PROTOCOL": "ftp",
        "FTP_USER": "your-username",
        "FTP_PASSWORD": "your-password"
      }
    }
  }
}
FTPS の例

FTPS では、TLS を有効にした通常の FTP クライアントを使用します。

{
  "mcpServers": {
    "ftp-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-ftp/build/index.js"],
      "env": {
        "FTP_HOST": "ftps.example.com",
        "FTP_PORT": "21",
        "FTP_PROTOCOL": "ftp",
        "FTP_SECURE": "true",
        "FTP_USER": "your-username",
        "FTP_PASSWORD": "your-password"
      }
    }
  }
}

FTP_SECURE が意味を持つのは FTP_PROTOCOL=ftp の場合のみです。SFTP は SSH で暗号化されているため、SFTP の処理では無視されます。

自己署名証明書を使用する信頼できる FTPS サーバーでは、FTPS の env オブジェクトに "FTP_TLS_REJECT_UNAUTHORIZED": "false" を追加します。これにより TLS 暗号化は維持されますが、証明書とホスト名の検証は無効になります。そのため、サーバーとネットワークを独自に信頼できる場合にのみ使用してください。既定では検証が有効です。この設定を使用するには、FTP_SECURE=true と FTP_PROTOCOL=ftp が必要です。

SFTP の例
{
  "mcpServers": {
    "ftp-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-server-ftp/build/index.js"],
      "env": {
        "FTP_HOST": "sftp.example.com",
        "FTP_PORT": "22",
        "FTP_PROTOCOL": "sftp",
        "FTP_USER": "your-username",
        "FTP_PRIVATE_KEY_PATH": "~/.ssh/id_ed25519",
        "FTP_PASSPHRASE": "your-key-passphrase"
      }
    }
  }
}
設定オプション
環境変数対象説明デフォルト
FTP_HOSTすべてサーバーのホスト名または IP アドレスlocalhost
FTP_PORTすべてサーバーのポートFTP/FTPS の場合は 21、SFTP の場合は 22
FTP_PROTOCOLすべてftp または sftpftp
FTP_USERすべてユーザー名。暗号化された enc: 値に対応していますanonymous
FTP_PASSWORDすべてパスワード。暗号化された enc: 値に対応しています空
FTP_SECUREFTP/FTPS のみFTP クライアントで TLS/FTPS を有効にしますfalse
FTP_TLS_REJECT_UNAUTHORIZEDFTPS のみFTPS 証明書とホスト名を検証します。false にすると、信頼済みの自己署名証明書を許可しますが、ID 検証は無効になりますtrue
FTP_PRIVATE_KEY_PATHSFTP のみSSH 秘密鍵のパス、または op:// 形式の 1Password シークレット参照自動検出
FTP_PASSPHRASESFTP のみSSH 秘密鍵のパスフレーズ。暗号化された enc: 値に対応しています空
FTP_ENCRYPTION_KEY暗号化された認証情報64 文字の 16 進数 AES-256 鍵です。ローカルインストールでは、OS のキーチェーンまたはグローバル環境変数を使用してください。無効
FTP_LOCAL_ROOTSローカルファイルツールupload-local-file が読み取り、download-to-local が書き込みできるローカルディレクトリ。区切り文字は macOS/Linux では :、Windows では ; です。~ は展開されます。無効

SFTP 認証

SFTP は秘密鍵認証とパスワード認証に対応しています。

サーバーは、次の順序で秘密鍵を探します。

  1. 設定されている場合は FTP_PRIVATE_KEY_PATH
  2. ~/.ssh/id_ed25519
  3. ~/.ssh/id_rsa
  4. ~/.ssh/id_ecdsa

鍵が見つからない場合は、FTP_PASSWORD が使用されます。

1Password から SFTP 鍵を読み込む

FTP_PRIVATE_KEY_PATH には、ファイルシステムのパスの代わりに 1Password シークレット参照を指定できます。

"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key"

要件:

  • 1Password CLI(op)がインストールされ、PATH から利用できる必要があります。
  • デスクトップアプリとの統合、または OP_SERVICE_ACCOUNT_TOKEN を通じて、CLI がすでに認証済みである必要があります。

鍵は必要時に解決され、プロセスのメモリ内にキャッシュされます。ディスクには書き込まれません。

SSH サーバーが 1Password のデフォルトのエクスポート鍵形式を受け付けない場合は、OpenSSH 形式を指定してください。

"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key?ssh-format=openssh"

認証情報の暗号化

FTP_USER、FTP_PASSWORD、FTP_PASSPHRASE は、enc: 形式を使用した AES-256-GCM 暗号化値として保存できます。

暗号化鍵を生成する
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
OS のキーチェーンに鍵を保存する(ローカルインストールに推奨)
npm run build
npm run store-key -- <your-64-char-hex-key>

利用可能な場合、サーバーは macOS Keychain、Windows Credential Manager、または Linux Secret Service から鍵を読み込みます。

または、プロセス環境に鍵をグローバルに設定します。

export FTP_ENCRYPTION_KEY=<your-64-char-hex-key>

デプロイ環境に個別のシークレット保存手段がない場合を除き、暗号化された認証情報と同じローカル MCP 設定内に FTP_ENCRYPTION_KEY を配置しないでください。

値を暗号化する
npm run build
FTP_ENCRYPTION_KEY=<your-64-char-hex-key> npm run encrypt-env -- <plaintext-value>

OS のキーチェーンまたはシェル環境から鍵をすでに利用できる場合:

npm run encrypt-env -- <plaintext-value>

利用可能なツール

ツール説明
list-directoryリモートディレクトリの内容を一覧表示します
download-fileファイルをダウンロードします。バイナリコンテンツは base64 として返されます
upload-fileテキストまたは base64 エンコードされたバイナリコンテンツをアップロードします
create-directoryディレクトリを作成します
delete-fileファイルを削除します
delete-directoryディレクトリを削除します
rename-fileファイルまたはディレクトリの名前を変更するか、移動します
edit-fileリモートのテキストファイル内の完全一致するテキストを置換します
append-fileファイルにコンテンツを追加します。ファイルが存在しない場合は作成します
upload-local-fileローカルファイルをパスで指定してストリーミングアップロードし、その後リモートのサイズを確認します(FTP_LOCAL_ROOTS が必要です)
download-to-localリモートファイルをローカルパスにストリーミングダウンロードします。内容は返しません(FTP_LOCAL_ROOTS が必要です)

ツール呼び出しは、機械可読な structuredContent を返します。また、11 個すべてのツールが出力スキーマを公開します。バージョン 1.2.2 では、公開されるスキーマが現在の MCP クライアントで必要な JSON Schema 2020-12 方言を使用するようにする互換性シムが導入されました。

ローカルファイルの転送

upload-file と download-file は、ツール呼び出し自体を通じてファイルの内容を渡すため、小さなテキストファイルに適しています。ビルド済みのシングルページアプリや画像など、より大きなファイルの場合、エージェントはファイル全体をリクエストに書き込む必要があり、ほとんどのクライアントでは対応できません。代わりに、upload-local-file と download-to-local は、このサーバーを実行しているコンピューター上のパスを受け取り、ファイルを直接ストリーミングするため、サイズは接続によってのみ制限されます。

使用を許可するフォルダーを指定するまで、これらの機能は無効になっています。

"env": {
  "FTP_HOST": "ftp.example.com",
  "FTP_USER": "your-username",
  "FTP_PASSWORD": "your-password",
  "FTP_LOCAL_ROOTS": "~/Sites/build:~/Downloads/uploads"
}
  • 許可されたフォルダーの外にあるパスは、そのパスに関する情報を調べる前に拒否されます。そのため、そのパスや親フォルダーが存在するかどうかにかかわらず、同じ応答が返されます。
  • パスはシンボリックリンクをたどった後に解決されるため、許可されたフォルダー内にあるリンクがその外を指している場合は拒否されます。アップロードでは、この確認の後に開いた単一のファイル記述子(プラットフォームで利用可能な場合は O_NOFOLLOW を使用)を通じて読み込むため、確認と転送の間にファイルが差し替えられることはありません。
  • download-to-local は、ターゲットと同じ場所にランダムな名前の一時ファイルを排他的に作成し(利用可能な場合は O_NOFOLLOW とともに O_CREAT | O_EXCL を使用)、その記述子のみを通じて書き込みます。そのため、その名前でファイルやシンボリックリンクが仕掛けられていても、ダウンロード先を変更されることはありません。
  • overwrite が false(デフォルト)の場合、ダウンロード完了後は置き換えを行わない操作(ハードリンク、またはファイルシステムがハードリンクに対応していない場合は排他的なコピー)で確定されるため、ダウンロード中にターゲットに作成されたファイルが置き換えられることはありません。overwrite: true の場合は、ターゲットを上書きするように名前が変更されます。ターゲットに既存のシンボリックリンクがある場合は拒否され、成功時も失敗時も一時ファイルは削除されます。
  • upload-local-file はファイルのサイズと SHA-256 を報告し、サーバーが転送後に報告するサイズ(FTP の SIZE または SFTP の stat)とローカルのサイズを比較します。

オプションの HOL Guard による保護

HOL Guard には、オプトイン方式の FTP MCP プロファイル(mcp.ftp、カタログ ID command.mcp-ftp)があり、PR #4514 でマージされました。この変更を含む HOL Guard のリリースまたはソースビルドを使用してください。マージ前に公開されたリリースには含まれていません。

プロファイルを使用するには、次の手順を実行します。

  1. HOL Guard をインストールし、セットアップ手順に従って MCP クライアントの保護を設定します。
  2. npm の設定に示すように、npx mcp-server-ftp を通じてこのサーバーを起動します。
  3. HOL Guard の Protection Center から、ローカルで FTP MCP を有効にします。

有効にすると、delete-directory でリモートディレクトリとその内容を再帰的に削除する前に、人による確認が必要になります。それ以外のツールと不明なツールには、既存の Guard ポリシーが適用されます。デバイス上のカスタム許可設定は追加されたデフォルト設定より優先され、より強い保護要件も引き続き有効です。

このプロファイルはデフォルトで無効です。npx を使った npm パッケージの起動に適用されます。node build/index.js による直接起動は、このプロファイルの対象外です。

セキュリティに関する注意事項

  • 利用可能な場合は SFTP を優先してください。FTPS の証明書設定を行わずに、SSH の暗号化と鍵認証を利用できます。
  • FTP_SECURE=true は、FTP プロトコル経由で接続する FTPS サーバーにのみ使用してください。
  • クライアントの設定に平文の認証情報が含まれる場合は、認証情報の暗号化を使用してください。
  • FTP_LOCAL_ROOTS が設定されていない場合、ローカルファイル転送は無効です。エージェントが公開元またはダウンロード先として利用してもよいフォルダーだけを指定してください。指定したフォルダー内のファイルはすべてサーバーにアップロードできます。
  • FTP と SFTP の転送では、アップロード、ダウンロード、追記の処理に短時間だけローカルの一時ファイルが使用されることがあります。これらのファイルは、各処理後のクリーンアップ時に削除されます。

Windows ビルドのトラブルシューティング

  1. Node.js 18.14 以降と npm がインストールされていることを確認します。
  2. npm install を実行します。
  3. npm run build または npx tsc を実行します。
  4. node build/index.js でコンパイル済みのサーバーを起動します。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。