ffl-mcp
Dale a la IA la capacidad de "enviar archivos" a través de P2P (primero local)
Documentación
ffl-mcp (solo local)
Servidor MCP para ffl. Permite que la IA comparta cualquier cosa por ti.
Respaldado por ffl, que convierte cualquier archivo/carpeta en un enlace HTTPS.
Este servidor MCP utiliza el enlace ffl-python localmente.
No se envían contenidos de archivos al LLM; el modelo solo activa ffl local.
Esta demo muestra depuración colaborativa: Claude a la izquierda comparte un entorno local (BD + registros) mediante un enlace P2P, Claude a la derecha descarga y diagnostica el error. En este escenario, los dos Claude representan a personas diferentes trabajando en máquinas separadas.
Tabla de contenidos
Instalación
⚡ URLs cortas por conveniencia
- Linux/macOS:
curl -fsSL https://fastfilelink.com/mcp/install.sh | bash- Windows (script):
iwr -useb https://fastfilelink.com/mcp/install.ps1 | iex🔒
fastfilelink.com/mcp/*es una redirección a GitHub. Usa las URLs directas de GitHub a continuación si lo prefieres.
Windows — Instalador GUI
Descarga y ejecuta ffl-mcp-setup.exe desde la última versión.
Registra el servidor con Claude Desktop, Claude Code, Codex y Grok Build.
No se necesita línea de comandos: el instalador registra ffl-mcp con Claude Desktop y Claude Code automáticamente.
Linux / macOS — una línea
curl -fsSL https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/scripts/Install.sh | bash
Descarga el binario de la plataforma desde la última versión de GitHub y ejecuta ffl-mcp install para registrarlo con Claude, Codex y Grok Build. Recurre automáticamente a uvx si no hay binario disponible para tu plataforma.
Windows — una línea (PowerShell)
iwr -useb https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/scripts/Install.ps1 | iex
Descarga ffl-mcp.exe desde la última versión de GitHub y lo registra con Claude, Codex y Grok Build.
uvx (sin binario, requiere uv)
uvx --from git+https://github.com/nuwainfo/ffl-mcp install
Los objetivos se pueden controlar con --target (predeterminado: todos):
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --target claude-desktop,claude-code,codex,grok-build
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --print
claude-code usa la CLI de Claude Code. codex escribe la configuración nativa de ~/.codex/config.toml utilizada por los clientes de Codex. grok-build escribe ~/.grok/config.toml, que Grok Build puede recargar desde /mcps.
Los nombres de objetivos heredados (claude-cli, codex-cli, codex-desktop y grok) siguen siendo aceptados como alias. El instalador primero crea una copia de seguridad con marca de tiempo de cualquier configuración que modifique.
Para rutas de configuración personalizadas, pasa el archivo:
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --config /path/to/claude_desktop_config.json
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --codex-config /path/to/codex/config.toml
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --grok-config /path/to/grok/config.toml
Ejecutar directamente (desarrollo)
Requisito previo: uv instalado.
# optional safety: restrict file sharing to a directory
export ALLOWED_BASE_DIR="$HOME/Downloads"
# optional: use stdin for text/base64 instead of temp files
export FFL_USE_STDIN=1
uvx --from git+https://github.com/nuwainfo/ffl-mcp ffl-mcp
Configuración MCP (JSON manual)
{
"mcpServers": {
"ffl": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nuwainfo/ffl-mcp", "ffl-mcp"],
"env": {
"ALLOWED_BASE_DIR": "/Users/you/Downloads",
"FFL_USE_STDIN": "1"
}
}
}
}
Herramientas
Compartir
| Herramienta | Entrada |
|---|---|
fflShareText(text, name?, ...) | Texto plano |
fflShareBase64(dataB64, name?, ...) | Datos binarios (codificados en base64) |
fflShareFile(path, name?, ...) | Un solo archivo o carpeta local |
fflShareFiles(paths, name?, ...) | Múltiples archivos (ffl los comprime automáticamente en una sola descarga) |
Opciones comunes para todas las herramientas de compartir:
| Opción | Predeterminado | Descripción |
|---|---|---|
e2ee | False | Cifrado de extremo a extremo |
qrInTerminal | False | Devuelve arte ASCII QR (qrCode en la respuesta) |
authUser / authPassword | — | Autenticación básica HTTP para proteger el enlace |
maxDownloads | 1 | Deja de servir después de N descargas (solo P2P) |
timeoutSeconds | 1800 | Tiempo de espera de inactividad en segundos (solo P2P) |
recipientAuth | — | pickup (código de 6 dígitos), pubkey (RSA), pubkey+pickup o email (OTP) |
pickupCode | auto | Código de recogida específico para el modo pickup |
recipientPublicKey | — | Ruta al archivo .fflpub para el modo pubkey |
recipientEmail | — | Correo(s) electrónico(s) para el modo OTP email, separados por comas |
alias | — | Alias de enlace personalizado, p. ej. my-release (requiere cuenta Standard+) |
receipt | — | Notificación por correo electrónico cuando el destinatario descarga |
receiptConfirm | — | Requiere confirmación del destinatario antes de la descarga; pasa un mensaje o "" |
forceRelay | False | Desactiva WebRTC, enruta todo el tráfico a través del túnel |
port | — | Puerto del servidor HTTP local (detección automática por defecto). Útil con túneles fijos. |
invite | False | Abre la página de invitación de ffl en un navegador local con el enlace de compartir generado. |
enableReporting | False | Habilita el informe de errores de diagnóstico de ffl. Deshabilitado por defecto. |
upload | — | Sube al servidor FFL en lugar de P2P — p. ej. "1 day", "6 hours" (requiere cuenta Standard+) |
resumeUpload | False | Reanuda una subida interrumpida |
proxy | — | URL de proxy, p. ej. socks5://127.0.0.1:9050 |
Opciones adicionales para fflShareFile / fflShareFiles:
| Opción | Predeterminado | Descripción |
|---|---|---|
preview | False | Añade ?preview=true al enlace devuelto, para que la página de descarga de ffl se abra directamente en su vista de vista previa completa en lugar de la tarjeta flotante normal. |
exclude | — | Patrones glob o regex para excluir, separados por comas — p. ej. *.pyc,__pycache__ o re:\.env$ |
pause | — | Pausa la subida del servidor en un porcentaje del 1 al 99. Requiere upload. |
vfs | False | Expone como servidor VFS (URI vfs://) — solo fflShareFile |
preferredTunnel | — | Establece el túnel preferido para esta y futuras ejecuciones — cloudflare, ngrok, bore, etc. |
preview solo afecta la cadena de consulta del enlace devuelto y funciona para cualquier
compartición (archivo único, carpeta o múltiples archivos). Las rutas sidecar de vista previa
(/manifest, /file, /thumb — los datos de manifiesto/miniatura detrás de esa
página de vista previa) son un mecanismo separado, siempre activo: MCP los inicia
automáticamente para comparticiones de carpetas y múltiples archivos independientemente de preview,
y nunca para comparticiones de archivo único.
Campos de respuesta: sessionId, link, pid, qrCode? (arte ASCII cuando qrInTerminal=True), debugLogPath?
Descargar
fflDownload(url, outputPath?, resume?, authUser?, authPassword?,
recipientAuth?, pickupCode?, recipientPrivateKey?, proxy?,
enableReporting?)
-> {ok, returncode, outputPath?, transferMode?, transferInfo?, message?, ...}
Descarga desde URLs de FastFileLink (WebRTC P2P cuando es posible, respaldo HTTP) o cualquier URL HTTP(S) (funciona como wget).
transferMode | Significado |
|---|---|
webrtc_p2p | Peer-to-peer directo sobre WebRTC (más rápido) |
p2p_tcp / p2p_quic | Peer-to-peer directo sobre TCP/QUIC sin procesar |
http_fallback | Retransmisión HTTP cuando P2P falla |
http_direct | Descarga HTTP normal (URL que no es de FastFileLink) |
Para enlaces autenticados: pasa recipientAuth + pickupCode (modo de recogida) o recipientPrivateKey (modo de clave pública).
Establece enableReporting=True solo cuando quieras optar por el informe de errores de diagnóstico de ffl para la resolución de problemas.
Generación de claves
fflKeygen(name?) -> {ok, returncode, output}
Genera un par de claves RSA para la autenticación de destinatario sin contraseña pubkey:
<name>.fflpub— comparte con el remitente (pasa comorecipientPublicKey)<name>.fflkey— mantén privada (pasa comorecipientPrivateKeyal descargar)
Gestión de sesiones
fflListSessions()— lista las sesiones de compartición activasfflStopSession(sessionId)— termina una sesiónfflGetSession(sessionId)— obtiene detalles de la sesiónfflGetSessionEvents(sessionId, limit=50)— recupera eventos de webhook
Notas
FFL_USE_STDIN=1evita escribir cargas útiles de texto/base64 en el disco.- Las vistas previas de carpetas y múltiples archivos inician un servidor webhook local para que FFL pueda registrar rutas de vista previa.
FFL_DEBUG=1guarda la salida de ffl en un archivo de registro temporal; la ruta se devuelve comodebugLogPath. EstableceFFL_DEBUG=/path/to/log.txtpara usar una ruta fija.ALLOWED_BASE_DIRrestringefflShareFile/fflShareFilesa un directorio específico.
Pruebas
# Unit + binary tests (no network needed)
python -m unittest discover -s tests -p "*Test.py" -v
# All tests including share/download round-trips (requires network)
FFL_INTEGRATION_TESTS=1 python -m unittest discover -s tests -p "*Test.py" -v