MCP Server for FTP Access
This MCP Server enables interactions with FTP servers through a Model Context Protocol interface. You can:
List directory contents
Download files
Upload files
Create new directories
Delete files and directories
Allows interaction with FTP servers to list directory contents, download and upload files, create directories, and delete files/directories remotely.
Click on "Install 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., "@MCP Server for FTP Accesslist the files in the /public directory"
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.
MCP Server for FTP Access
This Model Context Protocol (MCP) server provides tools for interacting with FTP servers. It allows Claude.app to list directories, download and upload files, create directories, and delete files/directories on FTP servers.
Features
List Directory Contents: View files and folders on the FTP server
Download Files: Retrieve file content from the FTP server
Upload Files: Create new files or update existing ones
Create Directories: Make new folders on the FTP server
Delete Files/Directories: Remove files or directories
Related MCP server: MCP SSH Server
Installation
Installing via Smithery
To install mcp-server-ftp for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @alxspiker/mcp-server-ftp --client claudePrerequisites
Node.js 16 or higher
Claude for Desktop (or other MCP-compatible client)
Installing via npm
The server is published as mcp-server-ftp, so no clone or build is needed — reference it directly in your Claude Desktop config:
{
"mcpServers": {
"ftp-server": {
"command": "npx",
"args": ["-y", "mcp-server-ftp"],
"env": {
"FTP_HOST": "ftp.example.com"
}
}
}
}Building from Source
Linux/macOS
# Clone the repository
git clone https://github.com/alxspiker/mcp-server-ftp.git
cd mcp-server-ftp
# Install dependencies
npm install
# Build the project
npm run buildWindows
# Clone the repository
git clone https://github.com/alxspiker/mcp-server-ftp.git
cd mcp-server-ftp
# Install dependencies and build
npm install
npm run buildConfiguration
To use this server with Claude for Desktop, add it to your configuration file:
MacOS/Linux
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"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_USER": "your-username",
"FTP_PASSWORD": "your-password",
"FTP_SECURE": "false"
}
}
}
}Windows
Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"ftp-server": {
"command": "node",
"args": ["C:\\path\\to\\mcp-server-ftp\\build\\index.js"],
"env": {
"FTP_HOST": "ftp.example.com",
"FTP_PORT": "21",
"FTP_USER": "your-username",
"FTP_PASSWORD": "your-password",
"FTP_SECURE": "false"
}
}
}
}Troubleshooting Windows Build Issues
If you encounter build issues on Windows:
Make sure Node.js (18.14 or newer) and npm are properly installed
Try running the TypeScript compiler directly:
npx tscIf you still have issues, you can use the pre-compiled files in the
builddirectory by running:node path\to\mcp-server-ftp\build\index.js
Configuration Options
Environment Variable | Description | Default |
| FTP server hostname or IP address | localhost |
| FTP server port | 21 |
| FTP username (supports encryption) | anonymous |
| FTP password (supports encryption) | (empty string) |
| Use secure FTP (FTPS), ignored when | false |
| Protocol to use: | ftp |
| Path to SSH private key for SFTP (e.g. | (auto-detect) |
| Passphrase for the SSH private key (supports encryption) | (empty string) |
| 64-character hex AES-256 key for decrypting credentials — store in OS keychain, not here | (disabled) |
SSH / SFTP Support
In addition to plain FTP and FTPS, the server supports SFTP — the SSH File Transfer Protocol — which runs over an encrypted SSH connection and is unrelated to FTPS.
Set FTP_PROTOCOL=sftp to switch the server into SFTP mode. The default port changes to 22.
Authentication
SFTP supports two authentication methods, chosen automatically:
Private key — if a key is found (see below), it is used for authentication.
FTP_PASSPHRASEis used to decrypt the key if it is passphrase-protected.Password — if no key is found,
FTP_PASSWORDis used for password authentication.
Key discovery
The server looks for a private key in this order:
The path in
FTP_PRIVATE_KEY_PATH(if set)~/.ssh/id_ed25519~/.ssh/id_rsa~/.ssh/id_ecdsa
Configuration example
{
"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_PASSPHRASE and FTP_USER both support the enc: encrypted format — see Credential Encryption.
Credential Encryption
Storing plaintext passwords in your Claude config file is a security risk. The server supports AES-256-GCM encryption for FTP_USER, FTP_PASSWORD, and FTP_PASSPHRASE so the config only ever contains ciphertext.
The encryption key itself (FTP_ENCRYPTION_KEY) must never be stored in the same config file as the encrypted credentials — that would defeat the purpose. Store it in the OS keychain, or global environment variable instead (see below).
1. Generate an encryption key
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Keep this key secret — treat it like a master password.
2. Store the key in the OS keychain (recommended)
After building the project, run the one-time setup script:
npm run build
npm run store-key -- <your-64-char-hex-key>This writes the key into the OS keychain (macOS Keychain, Windows Credential Manager, or Linux Secret Service). The server loads it automatically on start-up — no FTP_ENCRYPTION_KEY in the config file required.
Option B: global environment variable
If you prefer not to use the keychain, export the key from your shell profile (~/.zshrc, ~/.bash_profile, etc.):
export FTP_ENCRYPTION_KEY=<your-64-char-hex-key>This keeps the key out of the per-server config file while still making it available to the server process.
3. Encrypt a credential value
npm run build
FTP_ENCRYPTION_KEY=<your-64-char-hex-key> npm run encrypt-env -- <plaintext-value>If you already stored the key in the keychain or your shell profile, the variable is picked up automatically:
npm run encrypt-env -- <plaintext-value>The output is a self-contained encrypted string in the format enc:<iv_hex>:<tag_hex>:<ciphertext_hex>.
4. Use the encrypted values in your config
Place only the encrypted credentials in the config. Do not add FTP_ENCRYPTION_KEY here — the server retrieves it from the keychain or your shell environment.
{
"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_USER": "enc:aabbcc...:ddeeff...:112233...",
"FTP_PASSWORD": "enc:aabbcc...:ddeeff...:112233...",
"FTP_SECURE": "false"
}
}
}
}Values that do not start with enc: are treated as plaintext, so you can encrypt selectively.
Usage
After configuring and restarting Claude for Desktop, you can use natural language to perform FTP operations:
"List the files in the /public directory on my FTP server"
"Download the file /data/report.txt from the FTP server"
"Upload this text as a file called notes.txt to the FTP server"
"Create a new directory called 'backups' on the FTP server"
"Delete the file obsolete.txt from the FTP server"
"Remove the empty directory /old-project from the FTP server"
Available Tools
Tool Name | Description |
| List contents of an FTP directory |
| Download a file from the FTP server (binary files are returned base64-encoded) |
| Upload a file to the FTP server (pass |
| Create a new directory on the FTP server |
| Delete a file from the FTP server |
| Delete a directory from the FTP server |
| Rename or move a file or directory on the FTP server |
| Replace an exact string in a text file without re-uploading the whole file content |
| Append content to a file (creates it if missing) |
Security Considerations
Use the Credential Encryption feature to avoid storing plaintext passwords in your config file.
Prefer SFTP (
FTP_PROTOCOL=sftp) over plain FTP or FTPS where possible — it uses SSH and does not require certificate management.Consider using FTPS (secure FTP) by setting
FTP_SECURE=trueif your server supports it but SFTP is unavailable.The server creates temporary files for uploads and downloads in your system's temp directory.
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables SSH remote access to servers through Claude, allowing users to execute commands, transfer files via SFTP, and manage multiple remote connections using natural language.Last updated128MIT
- Alicense-quality-maintenanceConnects Claude to remote servers via SSH to execute commands, manage files, and browse directories. It allows users to add, edit, and switch between multiple server configurations through natural language conversations.Last updated
- Alicense-qualityBmaintenanceProvides Claude with complete file system integration including directory management, file operations, Office document creation/editing, and advanced file tree visualization.Last updated3MIT
- AlicenseAqualityBmaintenanceEnables Claude to connect to servers via SSH, execute commands, transfer files, and manage connections through natural language.Last updated961MIT
Related MCP Connectors
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Read, edit, publish, and preview your pepita websites from Claude.
Upload, edit, compress, protect, redact, and compare PDFs with KDAN PDF in Claude and ChatGPT.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alxspiker/mcp-server-ftp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server