ffl-mcp
Give AI a "send file" capability via P2P (Local-first)
ffl-mcp (local-only)
MCP server for ffl. Let AI share anything for you.
Backed by ffl, which turns any file/folder into an HTTPS link.
This is a minimal MCP server that shells out to ffl / ffl.com locally.
No file contents are sent to the LLM; the model only triggers local ffl.
This demo shows collaborative debugging: Claude on the left shares a local environment (DB + logs) via P2P link, Claude on the right downloads and diagnoses the error. In this scenario, the two Claudes represent different people working on separate machines.
Table of Contents
Installation
⚡ Short URLs for convenience
- 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/*is a redirect to GitHub. Use the direct GitHub URLs below if you prefer.
Windows — GUI Installer
Download and run ffl-mcp-setup.exe from the latest release.
No command line needed — the installer registers ffl-mcp with Claude Desktop and Claude Code automatically.
Linux / macOS — one-liner
curl -fsSL https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/install.sh | bash
Downloads the platform binary from the latest GitHub release and runs ffl-mcp install to register with Claude. Falls back to uvx automatically if no binary is available for your platform.
Windows — one-liner (PowerShell)
iwr -useb https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/install.ps1 | iex
Downloads ffl-mcp.exe from the latest GitHub release and registers it with Claude.
uvx (no binary, requires uv)
uvx --from git+https://github.com/nuwainfo/ffl-mcp install
Targets can be controlled with --target (default: all):
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --target claude-desktop,codex-cli
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --print
If Claude Code CLI is installed, the installer also runs claude mcp add automatically (user scope).
If Codex CLI is installed, the installer also runs codex mcp add automatically.
For other MCP clients or custom config paths, pass the file:
uvx --from git+https://github.com/nuwainfo/ffl-mcp install --config /path/to/claude_desktop_config.json
Run directly (development)
Prereq: uv installed.
# optional: override embedded ffl.com (APE) or use "ffl" on PATH
export FFL_BIN="$HOME/bin/ffl.com"
chmod +x "$FFL_BIN"
# 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
MCP Config (manual JSON)
{
"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"
}
}
}
}
Tools
Sharing
| Tool | Input |
|---|---|
fflShareText(text, name?, ...) | Plain text |
fflShareBase64(dataB64, name?, ...) | Binary data (base64-encoded) |
fflShareFile(path, name?, ...) | Single local file or folder |
fflShareFiles(paths, name?, ...) | Multiple files (ffl auto-zips them into one download) |
Common options for all share tools:
| Option | Default | Description |
|---|---|---|
e2ee | False | End-to-end encryption |
qrInTerminal | False | Return ASCII QR art (qrCode in response) |
authUser / authPassword | — | HTTP Basic Auth to protect the link |
maxDownloads | 1 | Stop serving after N downloads (P2P only) |
timeoutSeconds | 1800 | Inactivity timeout in seconds (P2P only) |
recipientAuth | — | pickup (6-digit code), pubkey (RSA), pubkey+pickup, or email (OTP) |
pickupCode | auto | Specific pickup code for pickup mode |
recipientPublicKey | — | Path to .fflpub file for pubkey mode |
recipientEmail | — | Email(s) for email OTP mode, comma-separated |
alias | — | Custom link alias e.g. my-release (requires Standard+ account) |
receipt | — | Email notification when recipient downloads |
receiptConfirm | — | Require recipient confirmation before download; pass a message or "" |
forceRelay | False | Disable WebRTC, route all traffic through tunnel |
upload | — | Upload to FFL server instead of P2P — e.g. "1 day", "6 hours" (requires Standard+ account) |
resumeUpload | False | Resume an interrupted upload |
proxy | — | Proxy URL e.g. socks5://127.0.0.1:9050 |
Additional options for fflShareFile / fflShareFiles:
| Option | Default | Description |
|---|---|---|
preview | False | Append ?preview=true to the link — recipient's browser opens in preview mode showing a file list before downloading. Recommended for folders and multi-file shares. |
exclude | — | Glob or regex patterns to exclude, comma-separated — e.g. *.pyc,__pycache__ or re:\.env$ |
vfs | False | Expose as VFS server (vfs:// URI) — fflShareFile only |
preferredTunnel | — | Set preferred tunnel for this and future runs — cloudflare, ngrok, bore, etc. |
Response fields: sessionId, link, pid, qrCode? (ASCII art when qrInTerminal=True), debugLogPath?
Downloading
fflDownload(url, outputPath?, resume?, authUser?, authPassword?,
recipientAuth?, pickupCode?, recipientPrivateKey?, proxy?)
-> {ok, returncode, outputPath?, transferMode?, transferInfo?, message?, ...}
Downloads from FastFileLink URLs (WebRTC P2P when possible, HTTP fallback) or any HTTP(S) URL (works like wget).
transferMode | Meaning |
|---|---|
webrtc_p2p | Direct peer-to-peer (fastest) |
http_fallback | HTTP relay when WebRTC fails |
http_direct | Regular HTTP download (non-FastFileLink URL) |
For authenticated links: pass recipientAuth + pickupCode (pickup mode) or recipientPrivateKey (pubkey mode).
Keygen
fflKeygen(name?) -> {ok, returncode, output}
Generates an RSA keypair for passwordless pubkey recipient auth:
<name>.fflpub— share with the sender (pass asrecipientPublicKey)<name>.fflkey— keep private (pass asrecipientPrivateKeywhen downloading)
Session Management
fflListSessions()— list active share sessionsfflStopSession(sessionId)— terminate a sessionfflGetSession(sessionId)— get session detailsfflGetSessionEvents(sessionId, limit=50)— retrieve webhook events
Notes
FFL_USE_STDIN=1avoids writing text/base64 payloads to disk.FFL_RUN_MODE=pythonruns the Core.py CLI (requiresFFL_CORE_PATH).FFL_USE_HOOK=1starts a local webhook server and passes it tofflfor real-time link/progress events.FFL_DEBUG=1saves ffl output to a temp log file; path returned asdebugLogPath. SetFFL_DEBUG=/path/to/log.txtto use a fixed path.ALLOWED_BASE_DIRrestrictsfflShareFile/fflShareFilesto a specific directory.
Testing
# 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
WSL2 Users
If you encounter TLSError([0x6300]) errors, run this command to disable Windows interop for .com files:
sudo sh -c 'echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop'
This allows ffl.com (APE binary) to run natively on Linux instead of being executed through Windows.
Похожие серверы
Kone.vc
спонсорMonetize your AI agent with contextual product recommendations
Twenty CRM
Interact with the Twenty CRM API through chat-based tools.
WordPress MCP
A Model Context Protocol (MCP) server that gives AI agents full control over WordPress sites. 46 tools for posts, pages, media, SEO, comments, redirects, blocks, patterns, TablePress, and more.
Linear MCP Server
Interact with the Linear API to manage issues, projects, and teams programmatically.
TaskWarrior MCP Server
An MCP server for managing tasks with the command-line tool TaskWarrior.
Enzyme
Enzyme turns your Obsidian or markdown vault into a semantic graph that AI can explore. It maps your tags, links, and folder patterns into entities, tracks when you last engaged each thread, and generates catalysts—questions tuned to surface what's latent in your notes.
Apple Notes MCP
MCP server for Apple Notes with semantic search and CRUD operations. Claude searches, reads, creates, updates, and manages your Apple Notes through natural language.
ClickUp
Integrate AI assistants with ClickUp for productivity and project management.
Linear MCP Server
An MCP server for interacting with the Linear API, allowing AI agents to manage issues, projects, and teams.
Sperax Ecosystem MCP
MCP server and plugin for Sperax Protocol – USDs, SPA, veSPA & Demeter on Arbitrum. Listed on Anthropic's official MCP Registry.
Excel
Excel manipulation including data reading/writing, worksheet management, formatting, charts, and pivot table