ftp-mcp
Provides a full set of FTP/FTPS/SFTP operations mimicking FileZilla's feature set, enabling file management, site management, and bulk transfers.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ftp-mcp list files in /var/www on prod"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ftp-mcp
MCP server for FTP/FTPS/SFTP operations — full FileZilla feature set for AI agents.
Installation
OpenCode
Add to your opencode.json config:
{
"$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):
{
"mcpServers": {
"ftp-mcp": {
"command": "npx",
"args": ["-y", "github:kemalabuteliyte/ftp-mcp"]
}
}
}Cursor / Windsurf
Add to your MCP settings:
{
"mcpServers": {
"ftp-mcp": {
"command": "npx",
"args": ["-y", "github:kemalabuteliyte/ftp-mcp"]
}
}
}Manual install
npm install -g github:kemalabuteliyte/ftp-mcpThen use ftp-mcp as the command in any MCP client config.
Related MCP server: MCP ShellKeeper
Features
36 tools covering all FileZilla operations:
Connection Management
ftp_connect— Connect to FTP/FTPS/SFTP serverftp_disconnect— Close a connectionftp_list_connections— List active connectionsftp_connection_info— Get connection details
Site Manager
ftp_add_site— Save connection profileftp_remove_site— Delete saved siteftp_list_sites— List saved profilesftp_edit_site— Update site config
Navigation
ftp_pwd— Print working directoryftp_cd— Change directoryftp_list— List directory (permissions, size, date)ftp_tree— Recursive tree view
File Operations
ftp_upload— Upload file (binary/ascii/auto)ftp_download— Download fileftp_delete— Delete fileftp_rename— Rename file/directoryftp_move— Move fileftp_copy— Copy file on serverftp_read— Read remote file contentsftp_write— Write content to remote fileftp_append— Append to remote fileftp_stat— Get file infoftp_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 directoryftp_download_directory— Download entire directoryftp_sync— Sync local/remote directoriesftp_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 patternftp_grep— Search file contents on serverftp_compare— Compare local vs remote directoriesftp_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
Available Tools
36 toolsftp_add_siteC
Save a connection profile to the site manager
Inputs: host (required), name (required), protocol (required), username (required), +5 more.
ftp_appendA
Append content to an existing remote file
Inputs: path (required), content (required), connection (required).
ftp_cdB
Change the remote working directory
Inputs: path (required), connection (required).
ftp_checksumB
Calculate checksum of a remote file for integrity verification
Inputs: path (required), connection (required), algorithm.
ftp_chmodC
Change file or directory permissions (e.g., 755, 644)
Inputs: mode (required), path (required), connection (required), recursive.
ftp_chownA
Change file ownership (SFTP only)
Inputs: gid (required), uid (required), path (required), connection (required).
ftp_compareC
Compare local and remote directories to find differences
Inputs: localPath (required), connection (required), remotePath (required), recursive.
ftp_connectB
Connect to an FTP/FTPS/SFTP server using credentials or a saved site name
Inputs: name (required), host, port, site, +7 more.
ftp_connection_infoC
Get detailed info about a specific connection
Inputs: name (required).
ftp_copyA
Copy a remote file (downloads then re-uploads to new location)
Inputs: destPath (required), connection (required), sourcePath (required).
ftp_deleteB
Delete a remote file
Inputs: path (required), connection (required).
ftp_dir_sizeC
Calculate the total size of a remote directory recursively
Inputs: path (required), connection (required).
ftp_disconnectA
Disconnect a named connection
Inputs: name (required).
ftp_downloadB
Download a remote file to a local path
Inputs: localPath (required), connection (required), remotePath (required).
ftp_download_directoryB
Download an entire remote directory to a local path recursively
Inputs: localPath (required), connection (required), remotePath (required), overwrite.
ftp_edit_siteB
Update specific fields of a saved site profile
Inputs: name (required), host, port, password, +5 more.
ftp_existsB
Check if a remote path exists
Inputs: path (required), connection (required).
ftp_findA
Search for files by name pattern (glob) recursively on the remote server
Inputs: pattern (required), connection (required), path, type, +2 more.
ftp_grepB
Search for text content within remote files (downloads and searches each file)
Inputs: pattern (required), connection (required), path, maxDepth, +3 more.
ftp_listA
List directory contents with details (permissions, size, date, type)
Inputs: connection (required), path, showHidden.
ftp_list_connectionsA
List all active connections with status
Inputs: no named parameters.
ftp_list_sitesA
List all saved connection profiles
Inputs: no named parameters.
ftp_mirrorB
Mirror a remote directory to local or vice versa (one-way sync with delete)
Inputs: direction (required), localPath (required), connection (required), remotePath (required), +1 more.
ftp_mkdirB
Create a remote directory
Inputs: path (required), connection (required), recursive.
ftp_moveB
Move a remote file to a new location
Inputs: destPath (required), connection (required), sourcePath (required).
ftp_pwdA
Print the current working directory on the remote server
Inputs: connection (required).
ftp_readB
Read the contents of a remote text file
Inputs: path (required), connection (required), maxSize.
ftp_remove_siteA
Remove a saved site from the site manager
Inputs: name (required).
ftp_renameC
Rename a remote file or directory
Inputs: newPath (required), oldPath (required), connection (required).
ftp_rmdirC
Remove a remote directory
Inputs: path (required), connection (required), recursive.
ftp_statB
Get file or directory info (size, modified date, permissions, type)
Inputs: path (required), connection (required).
ftp_syncB
Synchronize local and remote directories (like FileZilla synchronized browsing)
Inputs: direction (required), localPath (required), connection (required), remotePath (required), +2 more.
ftp_treeA
Recursively list directory tree structure with depth limit
Inputs: connection (required), path, maxDepth, showFiles.
ftp_uploadB
Upload a local file to the remote server
Inputs: localPath (required), connection (required), remotePath (required), mode.
ftp_upload_directoryB
Upload an entire local directory to the remote server recursively
Inputs: localPath (required), connection (required), remotePath (required), overwrite.
ftp_writeC
Write content directly to a remote file
Inputs: path (required), content (required), connection (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
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.
Maintenance
Related MCP Connectors
Persistent file storage for AI agents via MCP and curl. Upload, download, and version files.
File uploads for AI agents. Upload, list, and manage files. No signup required.
Agent file transfer. No API key to start; price downloads in USDC on Base.
File tools for your AI chat: PDF tables to Excel, merge PDFs, images to PDF, fill PDF forms.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables Claude to interact with FTP servers through natural language commands, allowing users to list directories, download/upload files, create directories, and delete files/directories on FTP servers.11568 npm37MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to maintain persistent SSH terminal sessions and transfer files to/from remote servers. Allows stateful command execution, natural language server management, and seamless file operations through SSH connections.5 npm36MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to securely connect to and manage remote servers via SSH, supporting command execution, file transfers via SFTP, and multi-server management with both password and SSH key authentication.962 npm2MIT
- AlicenseAqualityDmaintenanceEnables FTP file operations such as upload, download, list, and delete directly from Claude Desktop or Claude CLI.15MIT