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.

ffl-mcp-demo


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

HerramientaEntrada
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ónPredeterminadoDescripción
e2eeFalseCifrado de extremo a extremo
qrInTerminalFalseDevuelve arte ASCII QR (qrCode en la respuesta)
authUser / authPassword—Autenticación básica HTTP para proteger el enlace
maxDownloads1Deja de servir después de N descargas (solo P2P)
timeoutSeconds1800Tiempo de espera de inactividad en segundos (solo P2P)
recipientAuth—pickup (código de 6 dígitos), pubkey (RSA), pubkey+pickup o email (OTP)
pickupCodeautoCó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 ""
forceRelayFalseDesactiva 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.
inviteFalseAbre la página de invitación de ffl en un navegador local con el enlace de compartir generado.
enableReportingFalseHabilita 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+)
resumeUploadFalseReanuda una subida interrumpida
proxy—URL de proxy, p. ej. socks5://127.0.0.1:9050

Opciones adicionales para fflShareFile / fflShareFiles:

OpciónPredeterminadoDescripción
previewFalseAñ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.
vfsFalseExpone 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).

transferModeSignificado
webrtc_p2pPeer-to-peer directo sobre WebRTC (más rápido)
p2p_tcp / p2p_quicPeer-to-peer directo sobre TCP/QUIC sin procesar
http_fallbackRetransmisión HTTP cuando P2P falla
http_directDescarga 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 como recipientPublicKey)
  • <name>.fflkey — mantén privada (pasa como recipientPrivateKey al descargar)

Gestión de sesiones

  • fflListSessions() — lista las sesiones de compartición activas
  • fflStopSession(sessionId) — termina una sesión
  • fflGetSession(sessionId) — obtiene detalles de la sesión
  • fflGetSessionEvents(sessionId, limit=50) — recupera eventos de webhook

Notas

  • FFL_USE_STDIN=1 evita 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=1 guarda la salida de ffl en un archivo de registro temporal; la ruta se devuelve como debugLogPath. Establece FFL_DEBUG=/path/to/log.txt para usar una ruta fija.
  • ALLOWED_BASE_DIR restringe fflShareFile/fflShareFiles a 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