mcpField
F
Ffl Mcp – Give Ai A "send File" Capability Via P2p (local First)

Ffl Mcp – Give Ai A "send File" Capability Via P2p (local First)

本地服务
github.com/nuwainfo文件与存储53 天前更新

关于 Ffl Mcp – Give Ai A "send File" Capability Via P2p (local First)

ffl-mcp 是基于 ffl 的本地 MCP 服务,可让 AI 通过 P2P 或 HTTP 链接分享和下载文件。文件内容不发送给 LLM,适用于协作调试及跨设备传递文件。

主要功能

  1. 01分享文本、单个文件、文件夹或多文件
  2. 02通过 P2P 或 HTTP 下载
  3. 03为分享链接设置访问验证与下载限制
  4. 04生成 RSA 密钥用于接收者验证
  5. 05列出、查看和终止分享会话

适用场景

  1. 01把本机日志或数据库文件分享给协作者
  2. 02在不同设备间传递调试文件
  3. 03下载带认证的分享链接

MCP 相关

该 MCP 服务通过本地 ffl-python 调用 ffl,向 MCP 客户端提供分享、下载、密钥生成和会话管理工具。文件内容不会发送给 LLM。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

ffl-mcp(仅限本地)

ffl 的 MCP 服务。让 AI 帮你分享任何内容。

由 ffl 提供支持,可将任意文件/文件夹转换为 HTTPS 链接。

此 MCP 服务会在本地使用 ffl-python 绑定。 不会向 LLM 发送文件内容;模型只会触发本地 ffl。

此演示展示了协作调试:左侧的 Claude 通过 P2P 链接分享本地环境(DB + 日志),右侧的 Claude 下载并诊断错误。在此场景中,两个 Claude 代表在不同机器上工作的不同人员。

ffl-mcp-demo


目录


安装

⚡ 便捷短链接

  • Linux/macOS: curl -fsSL https://fastfilelink.com/mcp/install.sh | bash
  • Windows(脚本): iwr -useb https://fastfilelink.com/mcp/install.ps1 | iex

🔒 fastfilelink.com/mcp/* 会重定向到 GitHub。如果你更喜欢直接访问 GitHub,请使用下方的直接链接。

Windows — 图形界面安装程序

从最新版本下载并运行 ffl-mcp-setup.exe。

它会将此服务注册到 Claude Desktop、Claude Code、Codex 和 Grok Build。

无需使用命令行 — 安装程序会自动将 ffl-mcp 注册到 Claude Desktop 和 Claude Code。

Linux / macOS — 一行命令
curl -fsSL https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/scripts/Install.sh | bash

从最新的 GitHub 版本下载对应平台的二进制文件,并运行 ffl-mcp install,将其注册到 Claude、Codex 和 Grok Build。如果你的平台没有可用的二进制文件,则会自动改用 uvx。

Windows — 一行命令(PowerShell)
iwr -useb https://raw.githubusercontent.com/nuwainfo/ffl-mcp/refs/heads/main/scripts/Install.ps1 | iex

从最新的 GitHub 版本下载 ffl-mcp.exe,并将其注册到 Claude、Codex 和 Grok Build。

uvx(无二进制文件,需要 uv)
uvx --from git+https://github.com/nuwainfo/ffl-mcp install

可通过 --target 控制目标(默认:全部):

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 使用 Claude Code CLI。codex 会写入 Codex 客户端使用的原生 ~/.codex/config.toml 配置。grok-build 会写入 ~/.grok/config.toml,Grok Build 可从 /mcps 重新加载该配置。

旧版目标名称(claude-cli、codex-cli、codex-desktop 和 grok)仍可作为别名使用。安装程序会先为其更改的任何配置创建带时间戳的备份。

若要使用自定义配置路径,请传入文件:

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
Claude Code 云会话

托管在云端的 Claude Code 会话会在全新的容器中启动。若要让每个新会话都能使用 ffl-mcp, 请打开会话标题栏中的云环境菜单,选择 编辑,并将以下内容添加为环境的 设置脚本:

claude mcp add ffl -s user -e FFL_USE_STDIN=1 -- uvx --from git+https://github.com/nuwainfo/ffl-mcp ffl-mcp

设置脚本会在每个新会话启动时运行。在第一个新会话中, 运行 claude mcp list,确认 ffl 服务已注册。

直接运行(开发)

前置条件:已安装 uv。

# 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 配置(手动 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"
      }
    }
  }
}

工具

分享
工具输入
fflShareText(text, name?, ...)纯文本
fflShareBase64(dataB64, name?, ...)二进制数据(Base64 编码)
fflShareFile(path, name?, ...)单个本地文件或文件夹
fflShareFiles(paths, name?, ...)多个文件(ffl 会自动将其打包为一个下载文件)
所有共享工具的通用选项:
选项默认值描述
e2eeFalse端到端加密
qrInTerminalFalse返回 ASCII 二维码图案(响应中的 qrCode)
authUser / authPassword—使用 HTTP Basic Auth 保护链接
maxDownloads1达到 N 次下载后停止提供服务(仅限 P2P)
timeoutSeconds1800无活动超时时间,单位为秒(仅限 P2P)
recipientAuth—pickup(6 位代码)、pubkey(RSA)、pubkey+pickup 或 email(OTP)
pickupCode自动为 pickup 模式指定的取件代码
recipientPublicKey—pubkey 模式下 .fflpub 文件的路径
recipientEmail—email OTP 模式下的邮箱,多个邮箱以逗号分隔
alias—自定义链接别名,例如 my-release(需要 Standard+ 账户)
receipt—收件人下载时发送邮件通知
receiptConfirm—下载前要求收件人确认;传入一条消息或 ""
forceRelayFalse禁用 WebRTC,通过隧道转发所有流量
transport—显式选择 p2p 或 relay。p2p 会覆盖自动检测到的托管沙盒中继配置文件。
preferredTunnel—首选 ffl 隧道,例如 default、default:web、cloudflare、ngrok 或 bore。调用方提供的值会覆盖自动配置文件选择。
port—本地 HTTP 服务端口(默认自动检测)。适用于固定隧道。
inviteFalse在本地浏览器中打开 ffl 邀请页面,并显示生成的共享链接。
enableReportingFalse启用 ffl 诊断错误报告。默认禁用。
upload—上传至 FFL 服务端,而非使用 P2P——例如 "1 day"、"6 hours"(需要 Standard+ 账户)
resumeUploadFalse恢复中断的上传
proxy—代理 URL,例如 socks5://127.0.0.1:9050

fflShareFile / fflShareFiles 的附加选项:

选项默认值描述
previewFalse在返回的链接后附加 ?preview=true,使 ffl 下载页面直接打开完整预览视图,而非普通的浮动卡片。
exclude—要排除的 Glob 或正则表达式模式,以逗号分隔——例如 *.pyc,__pycache__ 或 re:\.env$
pause—在 1 到 99 的百分比处暂停服务端上传。需要 upload。
vfsFalse作为 VFS 服务端公开(vfs:// URI)——仅适用于 fflShareFile
preferredTunnel—为本次及后续运行设置首选隧道——cloudflare、ngrok、bore 等

preview 只会影响返回链接的查询字符串,适用于任何共享(单个文件、文件夹或多个文件)。预览辅助接口(/manifest、/file、/thumb——预览页面背后的清单/缩略图数据)是独立且始终启用的机制:无论是否启用 preview,MCP 都会自动为文件夹共享和多文件共享启动这些接口,而单文件共享则绝不会启动。

托管沙盒策略: 在 ChatGPT Work、Grok Bot、云托管的 Codex 沙盒或 Claude Code 云会话中(Claude Code 网页版 / claude.ai/code,或从 Claude 应用启动的远程会话),应立即使用 forceRelay=True 和 preferredTunnel="default:web"。这些环境可能只允许通过代理进行出站 HTTPS 通信,不支持可用的 UDP/ICE 或原始 TCP 隧道。此规则不适用于本地 Claude Code CLI、本地 Codex CLI、本地 Grok Build 或普通用户设备。

响应字段: sessionId、link、pid、transportDecision、qrCode?(当 qrInTerminal=True 时为 ASCII 图案)、debugLogPath?。transportDecision 会报告所选模式、原因、是否自动选择以及实际生效的 preferredTunnel。

从远程 Agent 分享

fflHowToShareFromRemoteAgent() 提供操作指南,供 Grok Bot 等云托管助手在用户要求分享其自己电脑上的文件或文件夹时使用。它会指示助手在那台电脑上操作,在存在现有 ffl/ffl.com 时使用它,或查找随已安装的 ffl-mcp 或 ffl-python 包附带的运行时,而不依赖固定的内部包路径。本地 Agent(如 Claude Code、Codex 和 Cursor)会直接使用 fflShareFile,无需此工具。

下载
fflDownload(url, outputPath?, resume?, authUser?, authPassword?,
            recipientAuth?, pickupCode?, recipientPrivateKey?, proxy?,
            enableReporting?)
  -> {ok, returncode, outputPath?, transferMode?, transferInfo?, message?, ...}

下载 FastFileLink URL(尽可能使用 WebRTC P2P,否则回退到 HTTP)或任意 HTTP(S) URL(功能类似 wget)。

transferMode含义
webrtc_p2p通过 WebRTC 直接进行点对点传输(最快)
p2p_tcp / p2p_quic通过原始 TCP/QUIC 直接进行点对点传输
http_fallbackP2P 失败时使用 HTTP 中继
http_direct常规 HTTP 下载(非 FastFileLink URL)

对于需要身份验证的链接:传入 recipientAuth + pickupCode(取件模式),或 recipientPrivateKey(公钥模式)。 仅当你想选择启用 ffl 诊断错误报告以便排查问题时,才设置 enableReporting=True。

生成密钥
fflKeygen(name?) -> {ok, returncode, output}

生成用于无密码 pubkey 收件方身份验证的 RSA 密钥对:

  • <name>.fflpub — 分享给发送方(作为 recipientPublicKey 传入)
  • <name>.fflkey — 妥善保管私钥(下载时作为 recipientPrivateKey 传入)
会话管理
  • fflListSessions() — 列出活动分享会话
  • fflStopSession(sessionId) — 终止会话
  • fflGetSession(sessionId) — 获取会话详情
  • fflGetSessionEvents(sessionId, limit=50) — 获取 Webhook 事件

注意事项

  • FFL_USE_STDIN=1 可避免将文本/base64 载荷写入磁盘。
  • 文件夹和多文件预览会启动本地 Webhook 服务,以便 FFL 注册预览路由。
  • FFL_DEBUG=1 会将 ffl 输出保存到临时日志文件;路径通过 debugLogPath 返回。设置 FFL_DEBUG=/path/to/log.txt 可使用固定路径。
  • ALLOWED_BASE_DIR 会将 fflShareFile/fflShareFiles 的操作限制在指定目录内。
  • 安装期间,ffl-mcp 会并行探测 example.com 和 stun.cloudflare.com,最长等待 0.5 秒。如果所有应答都处于合成的 198.18.0.0/15 范围内,它会注册 FFL_NETWORK_PROFILE=synthetic-dns-198-18;之后分享会立即通过 default:web 使用中继,而不再等待 P2P。发生超时、失败、应答不一致或处于普通网络时,不会写入任何配置。
  • 将 --env FFL_NETWORK_PROFILE=p2p 传给 install 可覆盖安装时的检测结果;也可在单次尝试直接 P2P 时,将分享工具的 transport 值设为 p2p。

测试

# 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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。