ftp-mcp
# 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
Scored across 36 tools
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.
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.
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.
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.