Skip to main content
Glama
rhayalcantara

mcp-ftp-server

README.md
# MCP FTP Server

Servidor MCP (Model Context Protocol) para operaciones FTP. Compatible con **Claude Desktop** y **Claude CLI**.

## Instalación

```bash
# Clonar o copiar el proyecto
cd mcp-ftp-server

# Instalar dependencias
npm install

# Compilar
npm run build
```

## Configuración

### Variables de Entorno (Recomendado)

```bash
FTP_HOST=ftp.tuservidor.com
FTP_PORT=21                    # Opcional, default: 21
FTP_USER=usuario
FTP_PASSWORD=contraseña
FTP_SECURE=false               # true para FTPS
```

### Claude Desktop

Edita tu archivo de configuración:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`  
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "ftp": {
      "command": "node",
      "args": ["/ruta/completa/a/mcp-ftp-server/dist/index.js"],
      "env": {
        "FTP_HOST": "ftp.tuservidor.com",
        "FTP_PORT": "21",
        "FTP_USER": "tu_usuario",
        "FTP_PASSWORD": "tu_contraseña",
        "FTP_SECURE": "false"
      }
    }
  }
}
```

### Claude CLI

**Opción 1**: Variables de entorno en la sesión

```bash
export FTP_HOST=ftp.tuservidor.com
export FTP_USER=usuario
export FTP_PASSWORD=contraseña
claude
```

**Opción 2**: Archivo `.mcp.json` en tu proyecto

```json
{
  "mcpServers": {
    "ftp": {
      "command": "node",
      "args": ["./mcp-ftp-server/dist/index.js"],
      "env": {
        "FTP_HOST": "ftp.tuservidor.com",
        "FTP_USER": "usuario",
        "FTP_PASSWORD": "contraseña"
      }
    }
  }
}
```

**Opción 3**: Configuración global en `~/.claude/settings.json`

```json
{
  "mcpServers": {
    "ftp": {
      "command": "node",
      "args": ["/ruta/absoluta/mcp-ftp-server/dist/index.js"],
      "env": {
        "FTP_HOST": "ftp.tuservidor.com",
        "FTP_USER": "usuario",
        "FTP_PASSWORD": "contraseña"
      }
    }
  }
}
```

## Tools Disponibles

| Tool | Descripción |
|------|-------------|
| `ftp_connect` | Conectar a servidor FTP (opcional si usas env vars) |
| `ftp_disconnect` | Desconectar del servidor |
| `ftp_status` | Ver estado de la conexión |
| `ftp_pwd` | Obtener directorio actual |
| `ftp_cd` | Cambiar de directorio |
| `ftp_list` | Listar archivos y carpetas |
| `ftp_download` | Descargar archivo a local |
| `ftp_upload` | Subir archivo al servidor |
| `ftp_read` | Leer contenido de archivo remoto |
| `ftp_write` | Escribir contenido a archivo remoto |
| `ftp_delete` | Eliminar archivo |
| `ftp_mkdir` | Crear directorio |
| `ftp_rmdir` | Eliminar directorio |
| `ftp_rename` | Renombrar/mover archivo o carpeta |
| `ftp_size` | Obtener tamaño de archivo |

## Ejemplos de Uso

Una vez configurado, puedes pedirle a Claude:

- "Lista los archivos en el servidor FTP"
- "Descarga el archivo config.json del FTP a mi carpeta local"
- "Sube el archivo backup.sql al directorio /backups en el FTP"
- "Lee el contenido del archivo readme.txt del servidor"
- "Crea una carpeta llamada 'proyectos' en el FTP"
- "Muestra el estado de la conexión FTP"

## Características

- ✅ Conexión automática usando variables de entorno
- ✅ Soporte FTPS (FTP sobre TLS)
- ✅ Lectura/escritura de archivos en memoria
- ✅ Creación recursiva de directorios
- ✅ Compatible con Claude Desktop y Claude CLI
- ✅ Manejo de errores descriptivo

## Seguridad

⚠️ **Importante**: Las credenciales FTP se almacenan en texto plano en los archivos de configuración. Asegúrate de:

1. No commitear archivos de configuración con credenciales a git
2. Usar permisos restrictivos en los archivos de configuración
3. Considerar usar FTPS (`FTP_SECURE=true`) para conexiones encriptadas

## Desarrollo

```bash
# Modo desarrollo con recompilación automática
npm run dev

# Compilar
npm run build

# Ejecutar directamente
npm start
```

## Licencia

MIT

TDQS

A3.7/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct FTP operation, from connection management (connect/disconnect/status) to file operations (download/upload/read/write/delete) and directory operations (cd/list/mkdir/rmdir/rename). There is clear separation between similar actions like read (viewing remote text) and download (saving to local filesystem), and between write (writing content to remote) and upload (transferring a local file). No two tools have overlapping purposes.

Naming Consistency5/5

All tools follow a uniform 'ftp_' prefix with a lowercase snake_case verb or command (e.g., ftp_connect, ftp_list, ftp_rename). The naming pattern is predictable and consistent, making it easy to infer functionality from the name.

Tool Count5/5

15 tools is well-scoped for an FTP server, covering connection management, navigation, file transfer, text editing, and directory operations. The count is within the ideal range and each tool earns its place, with no unnecessary or redundant additions.

Completeness5/5

The tool set provides comprehensive lifecycle coverage for FTP operations: connect/disconnect, directory management (pwd, cd, list, mkdir, rmdir), file operations (download, upload, read, write, delete, rename), and meta-operations (size, status). There are no obvious gaps for typical FTP workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive