FTP Access
Proporciona acceso a un servidor FTP para operaciones de archivos.
Documentación
Servidor MCP para Acceso FTP, FTPS y SFTP
Este servidor de Protocolo de Contexto de Modelo (MCP) proporciona herramientas de gestión de archivos para servidores FTP, FTPS y SFTP. Admite listado de directorios, descargas/cargas seguras para binarios, ediciones de texto, anexados, renombrados/movimientos, creación de directorios y eliminación.
Soporte de protocolo
- FTP — FTP tradicional, normalmente en el puerto 21.
- FTPS — FTP asegurado con TLS. Use
FTP_PROTOCOL=ftpyFTP_SECURE=true. - SFTP — Protocolo de Transferencia de Archivos SSH, normalmente en el puerto 22. SFTP es un protocolo diferente de FTPS y ya está cifrado por SSH, por lo que
FTP_SECUREno se aplica a él.
Características
- Listar archivos y directorios
- Descargar y cargar archivos de texto o binarios
- Editar texto exacto en archivos remotos
- Anexar a archivos
- Renombrar o mover archivos/directorios
- Crear y eliminar directorios
- Soporte para FTP, FTPS y SFTP
- Autenticación SFTP por contraseña o clave privada SSH
- Resolución opcional de clave privada mediante CLI de 1Password
- Valores de credenciales cifrados con AES-256-GCM
- Soporte de llavero del sistema operativo para la clave de cifrado
Instalación
Instalación mediante Smithery
npx -y @smithery/cli install alxspikers-team/mcp-server-ftp --client claude
Requisitos previos
- Node.js 18.14 o más reciente
- Un cliente compatible con MCP, como Claude Desktop
Instalación mediante npm
El servidor se publica como mcp-server-ftp:
{
"mcpServers": {
"ftp-server": {
"command": "npx",
"args": ["-y", "mcp-server-ftp"],
"env": {
"FTP_HOST": "ftp.example.com"
}
}
}
}
Compilación desde el código fuente
git clone https://github.com/alxspiker/mcp-server-ftp.git
cd mcp-server-ftp
npm install
npm run build
Configuración
Ejemplo FTP
{
"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"
}
}
}
}
Ejemplo FTPS
FTPS usa el cliente FTP normal con TLS habilitado:
{
"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 solo tiene sentido cuando FTP_PROTOCOL=ftp. Se ignora en la ruta SFTP porque SFTP ya está cifrado sobre SSH.
Para un servidor FTPS de confianza con un certificado autofirmado, agregue "FTP_TLS_REJECT_UNAUTHORIZED": "false" al objeto env de FTPS. Esto mantiene el cifrado TLS pero deshabilita la verificación de certificado y nombre de host, así que úselo solo cuando confíe de forma independiente en el servidor y la red. La verificación permanece habilitada de forma predeterminada. Esta configuración requiere FTP_SECURE=true y FTP_PROTOCOL=ftp.
Ejemplo SFTP
{
"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"
}
}
}
}
Opciones de configuración
| Variable de entorno | Se aplica a | Descripción | Predeterminado |
|---|---|---|---|
FTP_HOST | todos | Nombre de host o dirección IP del servidor | localhost |
FTP_PORT | todos | Puerto del servidor | 21 para FTP/FTPS, 22 para SFTP |
FTP_PROTOCOL | todos | ftp o sftp | ftp |
FTP_USER | todos | Nombre de usuario; admite valores enc: cifrados | anonymous |
FTP_PASSWORD | todos | Contraseña; admite valores enc: cifrados | vacío |
FTP_SECURE | solo FTP/FTPS | Habilita TLS/FTPS para el cliente FTP | false |
FTP_TLS_REJECT_UNAUTHORIZED | solo FTPS | Verifica el certificado y el nombre de host FTPS; false permite un certificado autofirmado de confianza pero deshabilita las comprobaciones de identidad | true |
FTP_PRIVATE_KEY_PATH | solo SFTP | Ruta de clave privada SSH o referencia de secreto de 1Password op:// | detección automática |
FTP_PASSPHRASE | solo SFTP | Frase de contraseña de clave privada SSH; admite valores enc: cifrados | vacío |
FTP_ENCRYPTION_KEY | credenciales cifradas | Clave AES-256 hexadecimal de 64 caracteres. Prefiera el llavero del sistema operativo o una variable de entorno global para instalaciones locales. | deshabilitado |
Autenticación SFTP
SFTP admite autenticación por clave privada y contraseña.
El servidor busca una clave privada en este orden:
FTP_PRIVATE_KEY_PATH, si está configurada~/.ssh/id_ed25519~/.ssh/id_rsa~/.ssh/id_ecdsa
Si no se encuentra ninguna clave, se usa FTP_PASSWORD.
Lectura de una clave SFTP desde 1Password
FTP_PRIVATE_KEY_PATH puede contener una referencia de secreto de 1Password en lugar de una ruta de sistema de archivos:
"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key"
Requisitos:
- La CLI de 1Password (
op) debe estar instalada y disponible enPATH. - La CLI ya debe poder autenticarse, ya sea mediante la integración de la aplicación de escritorio o
OP_SERVICE_ACCOUNT_TOKEN.
La clave se resuelve de forma diferida, se almacena en caché en memoria para el proceso y no se escribe en disco.
Si el servidor SSH rechaza el formato de clave exportado predeterminado de 1Password, solicite el formato OpenSSH:
"FTP_PRIVATE_KEY_PATH": "op://Private/my-server/private key?ssh-format=openssh"
Cifrado de credenciales
FTP_USER, FTP_PASSWORD y FTP_PASSPHRASE pueden almacenarse como valores cifrados AES-256-GCM usando el formato enc:.
Generar una clave de cifrado
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
Almacenar la clave en el llavero del sistema operativo (recomendado para instalaciones locales)
npm run build
npm run store-key -- <your-64-char-hex-key>
El servidor carga la clave desde el Llavero de macOS, el Administrador de Credenciales de Windows o el Servicio Secreto de Linux cuando esté disponible.
Alternativamente, configure la clave globalmente en el entorno del proceso:
export FTP_ENCRYPTION_KEY=<your-64-char-hex-key>
No coloque FTP_ENCRYPTION_KEY junto a las credenciales cifradas en la misma configuración local de MCP a menos que su entorno de implementación no le ofrezca un mecanismo separado de almacenamiento de secretos.
Cifrar un valor
npm run build
FTP_ENCRYPTION_KEY=<your-64-char-hex-key> npm run encrypt-env -- <plaintext-value>
Si la clave ya está disponible desde el llavero del sistema operativo o el entorno de shell:
npm run encrypt-env -- <plaintext-value>
Herramientas disponibles
| Herramienta | Descripción |
|---|---|
list-directory | Listar el contenido de un directorio remoto |
download-file | Descargar un archivo; el contenido binario se devuelve como base64 |
upload-file | Cargar contenido de texto o binario codificado en base64 |
create-directory | Crear un directorio |
delete-file | Eliminar un archivo |
delete-directory | Eliminar un directorio |
rename-file | Renombrar o mover un archivo o directorio |
edit-file | Reemplazar texto exacto en un archivo de texto remoto |
append-file | Anexar contenido a un archivo, creándolo si es necesario |
Las llamadas a herramientas devuelven structuredContent legibles por máquina, y las nueve herramientas anuncian esquemas de salida. La versión 1.2.2 introdujo un shim de compatibilidad que garantiza que los esquemas anunciados usen el dialecto JSON Schema 2020-12 requerido por los clientes MCP actuales.
Notas de seguridad
- Prefiera SFTP cuando esté disponible; usa cifrado SSH y autenticación por clave sin configuración de certificado FTPS.
- Use
FTP_SECURE=truesolo para servidores FTPS que usan la ruta del protocolo FTP. - Use cifrado de credenciales cuando una configuración de cliente contenga credenciales en texto plano.
- Las transferencias FTP y SFTP pueden usar archivos temporales locales de corta duración para operaciones de carga/descarga/anexado; esos archivos se eliminan durante la limpieza después de cada operación.
Solución de problemas de compilaciones de Windows
- Confirme que Node.js 18.14 o más reciente y npm estén instalados.
- Ejecute
npm install. - Ejecute
npm run buildonpx tsc. - Inicie el servidor compilado con
node build/index.js.
Licencia
MIT
