Skip to main content
Glama
kemalabuteliyte

ftp-mcp

README.md
# ftp-mcp

MCP server for FTP/FTPS/SFTP operations — full FileZilla feature set for AI agents.

## Installation

### OpenCode

Add to your `opencode.json` config:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ftp-mcp": {
      "type": "local",
      "command": ["npx", "-y", "github:kemalabuteliyte/ftp-mcp"],
      "enabled": true
    }
  }
}
```

### Claude Code / Claude Desktop

Add to your MCP config (`~/.claude/settings.json` or Claude Desktop config):

```json
{
  "mcpServers": {
    "ftp-mcp": {
      "command": "npx",
      "args": ["-y", "github:kemalabuteliyte/ftp-mcp"]
    }
  }
}
```

### Cursor / Windsurf

Add to your MCP settings:

```json
{
  "mcpServers": {
    "ftp-mcp": {
      "command": "npx",
      "args": ["-y", "github:kemalabuteliyte/ftp-mcp"]
    }
  }
}
```

### Manual install

```bash
npm install -g github:kemalabuteliyte/ftp-mcp
```

Then use `ftp-mcp` as the command in any MCP client config.

## Features

**36 tools** covering all FileZilla operations:

### Connection Management
- `ftp_connect` — Connect to FTP/FTPS/SFTP server
- `ftp_disconnect` — Close a connection
- `ftp_list_connections` — List active connections
- `ftp_connection_info` — Get connection details

### Site Manager
- `ftp_add_site` — Save connection profile
- `ftp_remove_site` — Delete saved site
- `ftp_list_sites` — List saved profiles
- `ftp_edit_site` — Update site config

### Navigation
- `ftp_pwd` — Print working directory
- `ftp_cd` — Change directory
- `ftp_list` — List directory (permissions, size, date)
- `ftp_tree` — Recursive tree view

### File Operations
- `ftp_upload` — Upload file (binary/ascii/auto)
- `ftp_download` — Download file
- `ftp_delete` — Delete file
- `ftp_rename` — Rename file/directory
- `ftp_move` — Move file
- `ftp_copy` — Copy file on server
- `ftp_read` — Read remote file contents
- `ftp_write` — Write content to remote file
- `ftp_append` — Append to remote file
- `ftp_stat` — Get file info
- `ftp_exists` — Check if path exists

### Directory Operations
- `ftp_mkdir` — Create directory (recursive option)
- `ftp_rmdir` — Remove directory (recursive option)
- `ftp_dir_size` — Calculate directory size

### Bulk Transfers
- `ftp_upload_directory` — Upload entire directory
- `ftp_download_directory` — Download entire directory
- `ftp_sync` — Sync local/remote directories
- `ftp_mirror` — Mirror directories (one-way sync with delete)

### Permissions
- `ftp_chmod` — Change permissions (recursive option)
- `ftp_chown` — Change ownership (SFTP only)

### Search & Compare
- `ftp_find` — Search files by name pattern
- `ftp_grep` — Search file contents on server
- `ftp_compare` — Compare local vs remote directories
- `ftp_checksum` — File checksum verification

## Protocols

| Protocol | Library | Default Port |
|----------|---------|-------------|
| FTP | basic-ftp | 21 |
| FTPS | basic-ftp | 990 |
| SFTP | ssh2-sftp-client | 22 |

## Multi-Server Support

Connect to multiple servers simultaneously with named connections:

```
ftp_connect(name: "prod", host: "prod.example.com", protocol: "sftp", ...)
ftp_connect(name: "staging", host: "staging.example.com", protocol: "ftp", ...)
ftp_list(connection: "prod", path: "/var/www")
ftp_sync(connection: "staging", localPath: "./dist", remotePath: "/public_html", direction: "local-to-remote")
```

## Site Manager

Save frequently used connections to `~/.ftp-mcp/sites.json`:

```
ftp_add_site(name: "myserver", host: "example.com", protocol: "sftp", username: "deploy", privateKeyPath: "~/.ssh/id_rsa")
ftp_connect(name: "session1", site: "myserver")
```

## License

MIT

TDQS

B3.1/5.0

Scored across 36 tools

Disambiguation2/5

Several tools have overlapping purposes, notably ftp_move vs ftp_rename, ftp_sync vs ftp_mirror, and ftp_exists vs ftp_stat. While descriptions clarify some differences, the boundaries between move/rename and sync/mirror remain ambiguous enough to cause misselection.

Naming Consistency4/5

The vast majority of tools follow a consistent ftp_<verb>_<noun> snake_case pattern, such as ftp_add_site, ftp_upload_directory, and ftp_list_connections. Minor deviations like ftp_pwd, ftp_cd, ftp_tree, and ftp_connection_info break the verb_noun convention, but the overall pattern is predictable.

Tool Count2/5

With 36 tools, the server is over-scoped for an FTP MCP. Many functions overlap, and the count exceeds the 25+ threshold where the tool set becomes heavy and harder to navigate, even though FTP supports a wide range of operations.

Completeness4/5

The tool surface covers the core FTP lifecycle well: connection management, site profiles, navigation, file/directory CRUD, uploads/downloads, sync, permissions, search, and integrity checks. A notable gap is the lack of a recursive directory delete operation, which would require manual traversal with list/delete.

Maintenance

ActivityInactive
ResponsivenessNo issues