Skip to main content
Glama
nao9net

FTP MCP Server

by nao9net
README.md
# FTP MCP Server(マルチサーバー対応版)

複数のFTPサーバーに、1つのMCPサーバーからまとめてファイルをアップロード/一覧/削除するためのローカルサーバーです。

各ツール呼び出し時に `server` パラメータ(エイリアス)でどのサーバーを操作するか指定します。
アップロード対象はローカルの絶対パスで指定し、ファイルの中身そのものはツール呼び出しの引数に含めません
(画像などバイナリデータをLLMのコンテキストに載せずに済ませるため)。

主な用途: 生成した画像をWebサーバー上の公開フォルダにアップロードし、そのURLを
`wp_upload_media_from_url`(wp-mcp)に渡してWordPressのメディアライブラリに正式登録する、
という2段階のフローの前段。

---

## 1. セットアップ

```bash
cd ftp-mcp
npm install
```

`servers.json.example` を `servers.json` にコピーして、管理する全サーバーの情報を書きます
(**このファイルには全サーバーの認証情報が入るので、絶対に公開・共有・Gitコミットしないでください**。
`.gitignore` に含めています)。

```bash
cp servers.json.example servers.json
```

```json
{
  "mysite": {
    "host": "ftp.example.com",
    "user": "user@example.com",
    "password": "xxxxxxxx",
    "base_path": "/resource",
    "public_base_url": "https://example.com/resource"
  }
}
```

- `base_path`: このサーバーのアップロード先ルートフォルダ(FTPのルートからの絶対パス)。
  すべてのツールはこの `base_path` を起点にした相対パスでファイルを指定します。
- `public_base_url`: `base_path` に対応する公開URLのベース。アップロード後にこれと相対パスを
  結合したURLを返します。
- `port`(省略可・デフォルト21)、`secure`(省略可・デフォルトfalse。FTPS(暗黙的TLS)を使う場合はtrue)。

## 2. Claude Codeへの登録

Claude Codeを使っているプロジェクトのルートフォルダ内で `.mcp.json` にmcpサーバーの情報を追加します。


```json
{
  "mcpServers": {
    "ftp": {
      "command": "node",
      "args": ["/MCPの保存パス/ftp-mcp/index.js"],
      "env": {
        "SERVERS_CONFIG_PATH": "/MCPの保存パス/ftp-mcp/servers.json"
      }
    }
  }
}
```

## 3. 提供ツール

- `ftp_list_servers` — 設定済みサーバー一覧(エイリアス・ホスト・base_path・public_base_url)を取得
- `ftp_upload_file` — ローカルファイル(絶対パス)をアップロードし、公開URLを返す。
  `remote_path` に含まれるサブフォルダは自動作成される
- `ftp_list_files` — `base_path` 起点の指定フォルダ内のファイル一覧を取得
- `ftp_delete_file` — `base_path` 起点の相対パスを指定してファイルを削除
  (WordPressメディアライブラリへの取り込み後、一時ファイルを掃除する用途を想定)

## 補足

- 依存ライブラリは [`basic-ftp`](https://www.npmjs.com/package/basic-ftp) を使用(FTP/FTPS対応、Promiseベース)。
- `remote_path` に `..` を含むパスはエラーになります(base_path外への書き込み・削除を防ぐため)。