Cloud · MODEL CONTEXT PROTOCOL
alxspiker mcp server ftp
Model Context Protocol server for FTP access
连接能力
alxspiker mcp server ftp 为 AI Agent 提供什么
- **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
- Node.js 16 or higher
- Claude for Desktop (or other MCP-compatible client)
- Use the provided `build-windows.bat` script which handles common build issues
- Make sure Node.js and npm are properly installed
- Try running the TypeScript compiler directly: `npx tsc`
- If you still have issues, you can use the pre-compiled files in the `build` directory by running:
- "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"
- FTP credentials are stored in the Claude configuration file. Ensure this file has appropriate permissions.
- Consider using FTPS (secure FTP) by setting `FTP_SECURE=true` if your server supports it.
- The server creates temporary files for uploads and downloads in your system's temp directory.
安全
MCP 收录不等于安全审核
MCP 服务器可能获得模型上下文、凭据、本地文件或调用外部系统的权限。连接 Agent 前,请检查代码、环境变量、网络行为、软件包来源与维护状态。
README
仓库文档
This Model Context Protocol (MCP) server provides file-management tools for FTP, FTPS, and SFTP servers. It supports directory listing, binary-safe downloads/uploads, text edits, appends, renames/moves, directory creation, and deletion.
- FTP — traditional FTP, normally on port 21.
- FTPS — FTP secured with TLS. Use
FTP_PROTOCOL=ftpandFTP_SECURE=true. - SFTP — SSH File Transfer Protocol, normally on port 22. SFTP is a different protocol from FTPS and is already encrypted by SSH, so
FTP_SECUREdoes not apply to it.
- List files and directories
- Download and upload text or binary files
- Edit exact text in remote files
- Append to files
- Rename or move files/directories
- Create and delete directories
- FTP, FTPS, and SFTP support
- SFTP password or SSH private-key authentication
- Optional 1Password CLI private-key resolution
- AES-256-GCM encrypted credential values
- OS-keychain support for the encryption key
npx -y @smithery/cli install alxspikers-team/mcp-server-ftp --client claude- Node.js 18.14 or newer
- An MCP-compatible client such as Claude Desktop
The server is published as mcp-server-ftp:
{
"mcpServers": {
"ftp-server": {
"command": "npx",
"args": ["-y", "mcp-server-ftp"],
"env": {
"FTP_HOST": "ftp.example.com"
}
}
}
}git clone https://github.com/alxspiker/mcp-server-ftp.git
cd mcp-server-ftp
npm install
npm run build{
"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_PROTOCOL": "ftp",
"FTP_USER": "your-username",
"FTP_PASSWORD": "your-password"
}
}
}
}FTPS uses the normal FTP client with TLS enabled:
{
"mcpServers": {
"ftp-server": {
"command": "node",
"args": ["/absolute/path/to/mcp-server-ftp/build/index.js"],
"env": {
"FTP_HOST": "ftps.example.com",
"FTP_PORT": "21",
"FTP_PROTOCOL": "ftp",
"FTP_SECURE": "true",
"FTP_USER": "your-username",
"FTP_PASSWORD": "your-password"
}
}
}
}FTP_SECURE is only meaningful when FTP_PROTOCOL=ftp. It is ignored by the SFTP path because SFTP is already encrypted over SSH.
For a trusted FTPS server with a self-signed certificate, add "FTP_TLS_REJECT_UNAUTHORIZED": "false" to the FTPS env object. This keeps TLS encryption but disables certificate and hostname verification, so use it only when you independently trust the server and network. Verification stays enabled by default. This setting requires FTP_SECURE=true and FTP_PROTOCOL=ftp.
{
"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"
}
}
}
}| Environment variable | Applies to | Description | Default |
|---|---|---|---|
FTP_HOST |
all | Server hostname or IP address | localhost |
FTP_PORT |
all | Server port | 21 for FTP/FTPS, 22 for SFTP |
FTP_PROTOCOL |
all | ftp or sftp |
ftp |
FTP_USER |
all | Username; supports encrypted enc: values |
anonymous |
FTP_PASSWORD |
all | Password; supports encrypted enc: values |
empty |
FTP_SECURE |
FTP/FTPS only | Enables TLS/FTPS for the FTP client | false |
FTP_TLS_REJECT_UNAUTHORIZED |
FTPS only | Verify the FTPS certificate and hostname; false allows a trusted self-signed certificate but disables identity checks |
true |
FTP_PRIVATE_KEY_PATH |
SFTP only | SSH private-key path or op:// 1Password secret reference |
auto-detect |
FTP_PASSPHRASE |
SFTP only | SSH private-key passphrase; supports encrypted enc: values |
empty |
FTP_ENCRYPTION_KEY |
encrypted credentials | 64-character hex AES-256 key. Prefer the OS keychain or a global environment variable for local installs. | disabled |
SFTP supports private-key and password authentication.
The server looks for a private key in this order:
FTP_PRIVATE_KEY_PATH, if set~/.ssh/id_ed25519~/.ssh/id_rsa~/.ssh/id_ecdsa
If no key is found, FTP_PASSWORD is used.
FTP_PRIVATE_KEY_PATH may contain a 1Password secret reference instead of a filesystem path:
"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key"Requirements:
- The 1Password CLI (
op) must be installed and available onPATH. - The CLI must already be able to authenticate, either through the desktop-app integration or
OP_SERVICE_ACCOUNT_TOKEN.
The key is resolved lazily, cached in memory for the process, and is not written to disk.
If the SSH server rejects 1Password's default exported key format, request OpenSSH format:
"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key?ssh-format=openssh"FTP_USER, FTP_PASSWORD, and FTP_PASSPHRASE may be stored as AES-256-GCM encrypted values using the enc: format.
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"npm run build
npm run store-key -- <your-64-char-hex-key>The server loads the key from macOS Keychain, Windows Credential Manager, or Linux Secret Service when available.
Alternatively, set the key globally in the process environment:
export FTP_ENCRYPTION_KEY=<your-64-char-hex-key>Do not place FTP_ENCRYPTION_KEY beside the encrypted credentials in the same local MCP config unless your deployment environment gives you no separate secret-storage mechanism.
npm run build
FTP_ENCRYPTION_KEY=<your-64-char-hex-key> npm run encrypt-env -- <plaintext-value>If the key is already available from the OS keychain or shell environment:
npm run encrypt-env -- <plaintext-value>| Tool | Description |
|---|---|
list-directory |
List contents of a remote directory |
download-file |
Download a file; binary content is returned as base64 |
upload-file |
Upload text or base64-encoded binary content |
create-directory |
Create a directory |
delete-file |
Delete a file |
delete-directory |
Delete a directory |
rename-file |
Rename or move a file or directory |
edit-file |
Replace exact text in a remote text file |
append-file |
Append content to a file, creating it if needed |
Tool calls return machine-readable structuredContent, and all nine tools advertise output schemas. Version 1.2.2 introduced a compatibility shim that ensures advertised schemas use the JSON Schema 2020-12 dialect required by current MCP clients.
- Prefer SFTP when available; it uses SSH encryption and key authentication without FTPS certificate configuration.
- Use
FTP_SECURE=trueonly for FTPS servers using the FTP protocol path. - Use credential encryption when a client configuration would otherwise contain plaintext credentials.
- FTP and SFTP transfers may use short-lived local temporary files for upload/download/append operations; those files are removed during cleanup after each operation.
- Confirm Node.js 18.14 or newer and npm are installed.
- Run
npm install. - Run
npm run buildornpx tsc. - Start the compiled server with
node build/index.js.
MIT
社区