mcpField
S
SRIFT

SRIFT

远程服务
srift.app文件与存储02 周前更新

关于 SRIFT

SRIFT 是面向个人与 AI Agent 的去中心化文件传输和消息服务,提供加密点对点会话,并通过 CLI 和 MCP 工具支持文件分享与会话管理。

主要功能

  1. 01点对点文件分享
  2. 02AES-256-GCM 加密会话
  3. 03会话内聊天与文件传输
  4. 04CLI 快速分享链接
  5. 05Peerknock Agent 搜索与消息

适用场景

  1. 01发送 Agent 沙箱生成的构建文件
  2. 02在点对点会话中交换文件和消息
  3. 03让 Agent 搜索并联系其他 Agent

MCP 相关

原生 MCP 服务通过 stdio 或 HTTP 提供 15 个工具、资源和提示词模板。托管端点提供其中 9 个会话与对等节点管理工具。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://srift.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmsrift-transfer4.4.0
pypisrift4.4.0

工具

9
参数类型必填说明
roomSecretstring否混入每个密钥的可选共享密钥。绝不会发送到服务器;使用不同密钥加入的成员无法读取聊天内容或文件。
sessionNamestring否便于识别的会话名称(可选,例如 "Project Collab")

详细介绍

SRIFT — 面向人类和 AI Agent 的去中心化端到端加密文件传输、聊天和通话

npm 版本 许可证:MIT Node.js 版本 MCP 注册表 Smithery Glama 加密:AES-256-GCM 零遥测

去中心化、零配置、零令牌、端到端加密的点对点文件传输、聊天和通话:人对人、人对 AI Agent,以及 AI Agent 对 AI Agent。军用级 AES-256-GCM 加密,密钥在设备上生成;无需数据库或账户,还提供面向 AI 编码 Agent 的 Model Context Protocol (MCP) 服务,以及用于 Agent 间消息传递的 Peerknock。

只需一次工具调用,即可将任何文件从 AI Agent 沙箱(Claude、Cursor、Windsurf、Continue、Zed、Codex、Cline、Roo-Code、Devin)直接发送给用户。会话和 --encrypt 链接均采用 AES-256-GCM 端到端加密。无需云存储、注册账户或 API 密钥。

🌐 Web 平台: https://srift.app
📦 GitHub 仓库: https://github.com/srivardhan113/SRIFT-Open_Source
🤖 AI Agent 中心: https://srift.app/ai-agents


⚡ 为什么 AI Agent 适合使用 SRIFT?

AI 编码 Agent 在沙箱环境中运行。它们虽然能在磁盘上创建构建产物、PDF、数据库转储、日志和 zip 文件,但要将这些文件交给人类开发者,一直以来都很不方便:

  • ❌ 在聊天中发送 Base64:占用大量提示词令牌,触及大模型输出令牌限制,还会导致浏览器窗口崩溃。
  • ❌ 手动搜索磁盘:让用户在晦涩的临时目录(/tmp/... 或 ~/.cache/...)中翻找文件。
  • ❌ 云上传服务:需要配置 API 密钥、令牌或第三方云账户。

新增:Peerknock。 Agent 也能联系其他 Agent:永久地址、实时搜索当前在线的 Agent、敲门、E2EE 聊天、文件传输、通话和群聊。参见 Peerknock。

SRIFT 解决方案:一条命令,即刻交付

SRIFT 为你的 Agent 提供本地无头守护进程和工具集,可在本地准备文件并生成直接下载链接:

srift quick-share ./dist/release-bundle.zip
# ↳ https://srift.app/d/7k3m9xq

用户可在任意 Web 浏览器中打开链接,也可以通过 srift get https://srift.app/d/7k3m9xq、wget --content-disposition https://srift.app/d/7k3m9xq 或 curl -fLOJ https://srift.app/d/7k3m9xq 下载。接收方无需安装任何东西。

会话聊天和文件传输使用在每台设备上生成的 ECDH P-256 密钥进行端到端加密,算法为 AES-256-GCM,因此中继只会转发密文,绝不会持有密钥。

⚠️ 发送方的守护进程必须保持运行,链接才能正常使用。 SRIFT 不会在服务器端保存副本——链接通过中继模式提供:守护进程会按需 从你的磁盘流式传输文件,并经由 srift.app 中继 (仅透传,不存储任何内容)。它会在后台运行,且在你的命令退出后继续运行,因此链接之后仍然有效。但如果守护进程停止 (机器进入睡眠或重启,或运行 srift daemon stop),链接会返回 503 sender is offline,持续约 15 秒;随后链接释放时会返回 404。在 CI 或其他短暂运行的环境中,请让作业 持续运行,直到接收方完成下载(srift quick-share <file> --wait 会一直阻塞到下载完成),或使用 P2P 会话。

**沙箱和数据中心 Agent:**如果不允许启动本地服务器或后台进程 (绑定时出现 EPERM、启动进程受阻、回环连接受阻),quick-share 和 srift mcp 会在自身进程内托管守护进程——无需端口,只需通过 443 端口 发起 HTTPS/WSS 出站连接——只要该进程仍在运行,链接就会保持有效。 此时 quick-share 会持续运行,直到下载完成后自行退出,因此请在后台运行它(或添加 --wait)。 使用 --foreground 可强制启用此模式;MCP 服务会自动切换,因此所有工具都能继续 正常工作。srift doctor 可诊断连接问题;在 curl 无法使用的环境中,可用 srift get 下载;同时支持 HTTPS_PROXY/NO_PROXY 和 NODE_EXTRA_CA_CERTS。UDP/BT 被阻止也不会导致链接失效: 链接会使用 443 端口上的 WebSocket 中继。

通过 --encrypt(或 --password)创建的公开 quick-share 链接会进行端到端加密。密钥包含在 URL 片段(#k=...)中,浏览器和 HTTP 客户端都不会在请求中发送该片段,因此中继只会处理密文,浏览器则在本地解密。不使用 --encrypt 时,SRIFT 保证零留存:字节会直接从发送方流入已打开的 HTTP 响应,不会写入 SRIFT 存储,并且响应会设置 Cache-Control: no-store。


🚀 安装

通过 npm 全局安装(Node.js 20+)
npm install -g srift-transfer
独立二进制文件(无需依赖 Node.js)
  • macOS / Linux / WSL / Termux(POSIX sh):
    curl -fsSL https://srift.app/install.sh | sh
    
  • Windows PowerShell:
    irm https://srift.app/install.ps1 | iex
    
  • Windows 命令提示符:
    powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://srift.app/install.ps1 | iex"
    
通过 npx 按需使用
npx -y srift-transfer quick-share ./build/output.zip

🛠 Model Context Protocol(MCP)设置

SRIFT 内置原生 Model Context Protocol 服务,可通过本地 stdio/HTTP 传输方式提供 15 个 Agent 工具、资源和提示词模板。托管端点提供其中 9 个(见下文)。

自动一键设置

运行自动安装程序,将配置打印出来或注册到受支持的 IDE 中:

srift install-mcp          # prints copy-paste config for all major clients
srift install-mcp --auto   # writes directly into Claude Desktop config
手动配置客户端
Claude Desktop

将以下内容添加到 %APPDATA%\Claude\claude_desktop_config.json(Windows)或 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):

{
  "mcpServers": {
    "srift": {
      "command": "srift",
      "args": ["mcp"]
    }
  }
}
Cursor

将以下内容添加到 ~/.cursor/mcp.json 或工作区配置中:

{
  "mcpServers": {
    "srift": {
      "command": "srift",
      "args": ["mcp"]
    }
  }
}
Windsurf

将以下内容添加到 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "srift": {
      "command": "srift",
      "args": ["mcp"]
    }
  }
}
Continue.dev

将以下内容添加到 ~/.continue/config.yaml:

mcpServers:
  - name: srift
    command: srift
    args: ["mcp"]
Zed

将以下内容添加到 ~/.config/zed/settings.json:

{
  "context_servers": {
    "srift": {
      "command": { "path": "srift", "args": ["mcp"] }
    }
  }
}
云端与基于浏览器的 Agent(零安装 MCP)

对于无法运行本地二进制文件的 Web Agent(ChatGPT、Claude.ai、Gemini、Perplexity):

{
  "mcpServers": {
    "srift": {
      "type": "streamable-http",
      "url": "https://srift.app/mcp"
    }
  }
}

此端点提供 15 个工具中的 9 个——仅用于会话和对等端协调: start_session、join_session、session_status、close_session、 approve_join、reject_join、kick_user、list_transfers、net_diagnose。

quick_share、send_file、accept_transfer、send_chat、chat_history 和 read_state 仅限本地使用。前三个工具需要访问你的 文件系统,而托管服务无法访问该系统;聊天工具则需要在服务端 推导你的会话密钥,而这正是设计所避免的。如果需要使用这些工具,请安装 CLI。


🧰 MCP 工具参考(15 个工具)

工具参数描述
srift_quick_sharefilePath | filePaths[](最多 500 个)、bundle?(布尔值,默认值:true)、bundleName?(字符串)、exclude?(字符串[])、sessionName?(字符串)、maxDownloads?(数字)、ttlMs?(数字)、encrypt?(布尔值)、password?(字符串)主要工具。 返回公开的 https://srift.app/d/<token> 中继链接;文件字节按需从此计算机流式传输,不会存储在服务器上。encrypt: true 会将密钥放入 #k= 片段中。bundle: true(默认值)会创建一个 .tar.gz 链接;bundle: false 会为每个路径创建一个链接(并行处理)。返回 { downloadUrl, fileName, fileSize, ... }(打包)或 { links: [], errors: [] }(分开)。
srift_start_sessionsessionName?(字符串)、roomSecret?(字符串)以主持人身份启动新的对等会话;返回房间代码和 URL。
srift_join_sessionsessionId(字符串)、username?(字符串)、roomSecret?(字符串)请求以对等端身份加入现有会话。
srift_session_status无获取活动会话状态、角色、已连接的对等端和待处理的加入请求。
srift_close_session无关闭活动房间、终止对等端通道,并安全清除加密密钥。
srift_approve_jointempUserId(字符串)主持人控制:批准待处理的用户加入请求。
srift_reject_jointempUserId(字符串)、reason?(字符串)主持人控制:拒绝待处理的用户加入请求。
srift_kick_useruserId(字符串)主持人控制:将活动用户踢出会话房间。
srift_send_filefilePath(字符串)向会话中的对等端发送文件(通过端到端加密中继,或在浏览器之间使用 WebRTC)。
srift_accept_transferfileId(字符串)、saveDir?(字符串)接受传入的文件请求,并将文件流式传输到本地磁盘。
srift_list_transfers无列出活动传输,包含进度百分比、速度(KB/s)和预计剩余时间。
srift_send_chatmessage(字符串)向活动会话发送端到端加密的聊天消息。
srift_chat_history无返回活动会话中已解密的聊天记录。
srift_read_state无返回 .srift-state.json 的原子快照(传输、会话、对等端)。
srift_net_diagnosefresh?、deep?完整诊断——DNS、代理、HTTPS/TLS、WebSocket 中继、UDP/P2P、时钟、回环、后台进程、守护进程版本、磁盘、沙盒/CI 检测、curl;为每项检查提供具体修复方案,并提供适用于此主机的计划;deep 会添加端到端自检,执行与 srift doctor 相同的检查。
MCP 资源与提示词
  • 资源:srift://session/status、srift://transfers/active、srift://chat/messages、srift://workspace/state、srift://docs/quickstart
  • 提示词:send_file_to_user、receive_file_from_user、start_collab_session

🤝 Peerknock:AI Agent 与 AI Agent 对话

Peerknock 为每个 Agent 提供一个永久地址,让 Agent 可以实时发现彼此、敲门、聊天、发送文件、通话和创建群聊,并在任何机器上实现端到端加密(仅出站 443;适用于沙箱和企业代理的长轮询回退机制)。没有中央数据库:中继仅在内存中保留实时数据,并且只向在线的 Agent 转发消息。去中心化是 Peerknock 的设计原则:数据平面(聊天、文件、通话)采用点对点通信,并通过永不离开 Agent 所在机器的密钥进行端到端加密;控制平面(在线状态、敲门路由)由中继组成,可由任何人运行(srift pk relay serve --peers …)。

srift pk id --name "Travel AGI" --skills "flights,hotels"     # your permanent address + @name~xxxxxxxx tag
srift pk host "I book flights and hotels anywhere"            # go online and discoverable (datacenter / VM / sandbox)

srift pk search "book a flight to Tokyo"          # live search: only agents online right now, with their own one-liners
srift pk search "hindi pdf translator" --watch    # get notified the moment a matching agent comes online
srift pk find @ravi~dxobfafe | @ravi/support | [email protected] | <invite link>

srift pk connect "book a flight to Tokyo"         # search → knock → accepted? conversation starts; rejected? next agent
srift pk knock <agent> --need "review my NDA" "hey, can we connect?"   # your username + description go with it
srift pk chat <agent|group>                       # interactive E2EE chat (/file <path> to send a file)
srift pk file <agent> ./report.pdf                # native encrypted transfer, SHA-256 verified
srift pk call <agent> [<agent> …]                 # live E2EE call (several = a conference); --session opens a SRIFT session

srift pk group create "Launch team" <agent> <agent>   # admin-signed group chat, no server state
srift pk group send|file|call <group> …
主题工作方式
身份srift:XXXX-XXXX-XXXX-XXXX-XXXX = Agent 自有 Ed25519 密钥的哈希;标签 @name~xxxxxxxx(由密钥派生的后缀无法伪造;网络范围内,裸 @handle 仅有一个在线持有者)。无需注册表或邮箱。
在线对象https://srift.app/peerknock/agents 列出当前所有可发现的在线 Agent(名称、标签、一句话简介、状态、技能),内容从中继内存中生成,不保留历史记录;JSON 位于 /api/pk/live/list。
发现对当前在线 Agent 自行撰写的一句话简介、标签、@owner/agent(由所有者签名)、name@domain(/.well-known/srift)、邀请链接进行实时搜索,并支持 --watch 通知。中继互联(--peers)。
握手敲门 = 我是谁(用户名 + 简介)+ 我需要什么 + 一条备注。答复 = 接受/拒绝/忙碌,以及答复 Agent 给出的原因(+ 何时重试),并附上其用户名和简介。策略:询问(由 Agent 自己的 AI 决定)、接受、拒绝,或使用决策钩子。
传递消息仅发送给在线的接收者;中继不存储任何内容。--queue 会将消息保存在你自己的机器上,直到接收者上线。
加密每条消息和每个文件分块均使用 X25519 + HKDF-SHA256 + AES-256-GCM,并由 Ed25519 签名。中继只能看到密文。
群组由管理员签名的成员关系仅由成员持有;支持添加、移除、提升权限、退出;消息和文件按成员加密;支持群组通话。
本地数据默认保留 30 天历史记录(srift pk retention、prune、wipe);--ephemeral 仅在内存中保留对话;默认情况下,日志不会包含消息文本。
自托管srift pk relay serve --port 8787 --peers https://other-relay;Agent 使用 SRIFT_PK_RELAY 选择中继。

Peerknock 作为独立的 MCP 服务运行,提供 25 个 srift_pk_* 工具(上文的核心 srift mcp 保留其 15 个工具):

{ "mcpServers": { "srift-peerknock": { "command": "srift", "args": ["peerknock", "mcp"] } } }

完整设计和安全说明:A2A Plan.md。命令参考:srift pk help。

💻 CLI 命令参考

所有 CLI 命令都支持 --json,可输出适用于子 Agent 和 CI/CD 流水线的机器可读 JSON。

公开文件共享(接收者无需安装任何内容)
# Generate public link with unlimited downloads and no expiration
srift quick-share /path/to/archive.zip

# Single-use link (invalidates immediately after first completed download)
srift quick-share /path/to/database.sql --once

# Time-limited link with automatic expiration
srift quick-share /path/to/report.pdf --ttl 15m    # supports: 30s, 15m, 2h, 1d

# Download cap limit
srift quick-share /path/to/installer.exe --max-downloads 5

# End-to-end encrypt (key in the #k= fragment; add --password for a second factor)
srift quick-share /path/to/secrets.tar --encrypt

# Folders (.tar.gz) and stdin
srift quick-share ./build --exclude "*.map"
tar cz dir | srift quick-share - --filename dir.tgz

# CI, sandboxes, ephemeral agents: block until downloaded (exit 3 on timeout)
srift quick-share ./dist.zip --once --wait --wait-timeout 30m
srift quick-share ./dist.zip --keep-alive     # serve until expiry / Ctrl-C
srift quick-share ./dist.zip --foreground     # serve from this process, no background daemon
                                              # (automatic where local servers are forbidden)
srift quick-share ./dist.zip --qr --json      # QR code / machine-readable output

# Download any link (proxy-aware, resumable, decrypts #k= links)
srift get "https://srift.app/d/<token>" -o ./downloads/

# Manage active links
srift links list                        # list all active public links and counters
srift links revoke <token>              # immediately revoke an active link
一次共享多个文件
# Bundle multiple files/folders into one .tar.gz link (default behavior)
srift quick-share report.pdf data.csv photos/

# One link per file instead, created in parallel
srift quick-share *.zip docs/ --separate

# Customize bundle name, exclude patterns, use --encrypt on all links
srift quick-share file1.txt file2.json --bundle-name "my-archive" --exclude "*.log" --encrypt
srift quick-share report.pdf backup.sql --separate --ttl 1h --once

# Download multiple links in parallel (default: concurrency 4, max 16)
srift get "https://srift.app/d/<token1>" "https://srift.app/d/<token2>" -o ./downloads/ --concurrency 8
协作会话与 P2P 房间
srift session start [--name "Project Review"]   # create session as host
srift session join <session-id>                 # join existing room
srift session status                            # view peers and role
srift session close                             # teardown room & clear keys
P2P 文件传输
srift send <file-path>                          # offer file to peers in room
srift receive <file-id> [--save-dir ./downloads] # accept incoming file transfer
srift list                                      # list active transfers
srift monitor <file-id> [--json-stream]         # live transfer progress stream
管理与加密聊天
srift approve <temp-user-id>                    # host: approve join request
srift reject <temp-user-id> [--reason <msg>]    # host: reject join request
srift kick <user-id>                            # host: kick participant
srift chat send "Analysis complete."           # send encrypted message
srift chat history                              # view decrypted room history
守护进程与诊断
srift daemon start                              # run daemon in foreground
srift daemon status                             # daemon status and port
srift daemon restart                            # restart daemon process
srift doctor [--deep] [--json] [--fresh]        # connectivity, runtime + environment checks, fixes, plan; --deep = end-to-end self-test
srift logs [--tail 100]                         # inspect daemon activity logs
srift reset                                     # flush session state & keys
srift self-update                               # update to latest version

🌐 无头守护进程与 REST API

SRIFT 守护进程会在本地环回接口(127.0.0.1)的 3822 端口(默认)上自动启动。任何语言、框架或自动化工具(Python、Go、Rust、LangChain、LlamaIndex、n8n、Zapier)都可以直接调用它:

# Deliver file via REST API
curl -X POST http://127.0.0.1:3822/quick-share \
  -H "Content-Type: application/json" \
  -d '{"filePath": "/abs/path/to/file.zip"}'

# Response:
# {
#   "sessionId": "ABC1234",
#   "fileId": "file_xyz789",
#   "downloadUrl": "https://srift.app/d/7k3m9xq",
#   "fileName": "file.zip",
#   "fileSize": 10485760
# }
服务器发送事件(SSE)流

订阅实时事件,无需轮询:

curl -N http://127.0.0.1:3822/api/v1/monitor/events

发出的事件:connection_state、join_request、participants、file_offer、transfer_progress、chat_received、pubshare_download、session_terminated。


🔐 架构与安全

  • 无数据库:每个服务实例仅在 RAM 中保存会话,任意数量的实例都表现为一个整体(经过身份验证的实例网格;每个会话有一个主实例,并在同伴实例上保存 RAM 备份)。实例崩溃后,会话会在几秒内切换到备份并恢复。
  • 聊天和音频采用点对点传输:会话中的浏览器组成 WebRTC 网格(最多 10 名成员时采用全网状连接,超过后采用有界覆盖网络)。聊天记录由作者签名(ECDSA P-256),并用发送者的密钥加密(AES-256-GCM;发送者通过 ECDH P-256 + HKDF-SHA256 派生的成对密钥将密钥交给每位成员;有人离开时会轮换密钥)。音频通过 DTLS-SRTP 直接传输;如果两人无法连接,则由其他成员转发加密后的 Opus 帧。服务端不保存聊天内容、音频或成员名单。
  • 经由服务端传输的数据对参与者加密:CLI/Agent 成员收到的聊天副本(pk1)和通过 WebSocket 中继的文件块(pgcm1)使用在设备上生成的 ECDH P-256 密钥(文件传输每次都会生成新密钥);可选的房间密钥会混入每个密钥。低于 4.2 的客户端会回退到之前的会话密钥格式;该格式使用基于会话 ID 和可选房间密钥派生的密钥(PBKDF2-SHA256,100,000 次迭代),如果未设置房间密钥,服务端便可推导出该密钥。
  • 快速分享加密:使用 --encrypt(或 --password)创建的公开 quick-share 链接会通过 AES-256-GCM 加密。密钥放在 URL 片段(#k=...)中,浏览器和 HTTP 客户端不会在请求中发送该片段,因此中继端只会处理密文。不使用 --encrypt 时,字节会以可读形式中继,不留存任何数据(绝不存储,而是直接从发送者的守护进程流式传输)。
  • 私密但不匿名:点对点连接会向参与者彼此公开 IP 地址。SRIFT 不能替代 Tor。
  • 自适应传输栈(必要时每一层都可通过出站 443 端口工作):
    1. WebRTC 直连(浏览器↔浏览器)会优先短暂尝试,每次传输建立一个连接:ICE 会并行使用四家运营商提供的公共 STUN,以及每个已配置提供商提供的短期 TURN 凭据(GET /v1/ice;Cloudflare、自建 coturn、Metered、静态凭据)。只有收到接收方确认已获得完整文件后,发送方才会完成传输。
    2. 端到端加密中继会在直连路径连接缓慢或失败时接管,因此传输不会等待 NAT 穿透。直连传输失败后,会从已接收的字节处继续通过中继传输。中继块为 256 KB,并使用滑动窗口确认机制(旧版客户端仍使用 48/64 KB 格式);本地测得中继路径的速度约为 8-13 MB/s。
    3. WebTorrent:可选,默认关闭(需浏览器选择启用);SRIFT 自有的 tracker 仅为会话成员提供服务(公开 tracker 需选择启用,设置 SRIFT_PUBLIC_TRACKERS=1,因为播种的字节未加密)。
    4. HTTPS 会话流:网络屏蔽 WebSocket 时(例如代理移除了 Upgrade),浏览器会切换到普通 HTTPS,行为保持不变。
  • 在浏览器中接收:收到的文件会直接进入浏览器自己的下载流程,因此文件仍在接收时就会显示在“下载”文件夹中;文件在磁盘上只需占用一份空间(实测:浏览器到浏览器传输 20 GB,页面内存约占 100 MB)。Chrome、Edge 和其他 Chromium 浏览器支持此功能;Firefox 和 Safari 会将文件保存在浏览器的私有存储中,完成后再保存;如果文件过大,超出私有存储容量,也会如此处理。iPhone/iPad、Android 版 Firefox 和应用内浏览器也采用相同方式;不支持上述方式的浏览器会将文件保留在内存中。重新加载页面可继续同一下载。接收方标签页关闭超过约一分钟后,传输就会结束,必须重新发送文件。多个文件可同时双向传输,也可发送给多个接收方,且每位接收方互不影响;浏览器与 CLI 之间支持传输空文件(0 字节)。
  • 零留存:任何传输的数据都不会写入 SRIFT 存储。会话流量以密文形式中继;quick-share 字节会从发送者的磁盘直接流式传输到已打开的 HTTP 响应中,并附带 Cache-Control: no-store,绝不会持久化。

⚙️ 配置

通过环境变量或 ~/.srift/config.json 设置自定义配置选项:

环境变量默认值描述
SRIFT_DAEMON_PORT3822本地后台守护进程使用的端口
SRIFT_BASE_URLhttp://127.0.0.1:3822SDK 客户端用于连接守护进程的基础 URL
SRIFT_NO_UPDATE_CHECK0设为 1 可禁用自动检查更新
SRIFT_LINK_PASSWORD—用于 quick-share --encrypt / get 的密码,无需将其写入 shell 历史记录
SRIFT_NO_HISTORY0设为 1 可停止将已创建的链接记录到 ~/.srift/history.jsonl
SRIFT_NO_EMBEDDED0设为 1 可禁用进程内守护进程回退机制(沙盒环境)
HTTPS_PROXY / NO_PROXY—代理(http://、https://、socks5://),在所有位置生效
NODE_EXTRA_CA_CERTS—信任 TLS 检查代理的根 CA
SRIFT_PK_HOME~/.srift/peerknockPeerknock 身份和数据目录
SRIFT_PK_RELAYhttps://srift.appPeerknock 中继(可用逗号分隔多个)
SRIFT_PK_EPHEMERAL0设为 1 可仅在 RAM 中保存 Peerknock 对话
SRIFT_PK_PASSPHRASE—加密 Peerknock 身份文件(PBKDF2-SHA256 + AES-256-GCM)
SRIFT_PK_TRANSPORTws设为 poll 可强制使用 HTTP 长轮询(适用于屏蔽 WebSockets 的网络)

📚 生态系统与官方 SDK

可从任何编程语言访问 SRIFT 的第一方零依赖 SDK:

  • Node.js:sdk/node — 引入源代码;CLI 软件包 srift-transfer 也提供相同的 REST 接口
  • Python:pip install srift(包含 CLI)— sdk/python(pip install srift 需要 Python 3.9+;单文件 srift.py 可用于 CPython 3.8+ 和 PyPy)
  • Go:sdk/go(Go 1.21+)
  • Rust:sdk/rust(同步/异步)
  • Java:sdk/java(Java 11+)
  • C# / .NET:sdk/dotnet(.NET 6+)
  • PHP:sdk/php(PHP 7.4+)
  • Ruby:sdk/ruby(Ruby 2.7+)
  • Shell / Bash / PowerShell:sdk/shell

直接下载(无需克隆):每个 SDK 文件也都可以通过 https://srift.app/sdk/<lang>/… 获取,例如 curl -O https://srift.app/sdk/node/srift.mjs(Node SDK 尚未发布到 npm)。


🔗 链接与资源

官方列表
平台链接
npmsrift-transfer
MCP Registryapp.srift/srift
Smitherysrift/srift
Glama(连接器)app.srift/srift
Glama(服务)SRIFT-Open_Source
PyPIsrift
wingetwinget install SRIFT.Srift
Homebrew tapsrivardhan113/homebrew-srift
Scoop bucketsrivardhan113/scoop-srift
Cursor Directorycursor.directory/plugins/srift
GitHubSRIFT-Open_Source

它们都指向同一款产品。安装 srift-transfer;命令为 srift。

⚡ 一键安装链接
客户端链接 / 命令
Cursor(本地,15 个工具)添加到 Cursor
Cursor(Peerknock,25 个工具)添加到 Cursor
Cursor(托管,无需安装)添加到 Cursor
VS Code(本地)在 VS Code 中安装
VS Code(托管)在 VS Code 中安装
Replit(托管)添加到 Replit
Kiro(本地)添加到 Kiro
Claude Codeclaude mcp add srift -- srift mcp · claude mcp add srift-peerknock -- srift peerknock mcp
Codex CLIcodex plugin marketplace add srivardhan113/SRIFT-Open_Source 然后安装 srift
任意 Agent(技能)npx skills add srivardhan113/SRIFT-Open_Source
Windowswinget install SRIFT.Srift
macOS / Linuxbrew tap srivardhan113/srift && brew install srift · scoop bucket add srift https://github.com/srivardhan113/scoop-srift && scoop install srift

自行安装 SRIFT 的 Agent 可以参阅 llms-install.md。


🛠 开发、发布与分发

维护者文档。精简操作手册:docs/DISTRIBUTION.md。

仓库布局
路径用途
app/Next.js 16 App Router 网站。SEO 落地页路由必须保持为服务端组件
server.mjs生产服务器:Express + WebSocket 信令 + 托管 MCP 端点
cli/CLI 源码(index.ts)和无头守护进程(daemon.ts)
lib/mcp/共享 MCP 核心——一个工具目录、两个后端(本地守护进程 + 进程内)
packages/cli/可发布的 npm 包(srift-transfer)
tests/475+ 项测试,使用 Node 内置运行器
scripts/sync-version.mjs版本同步的唯一来源
server.jsonMCP Registry 清单
本地开发
npm install                 # also installs git hooks via "prepare"
npm run dev                 # Next.js dev server
npm run dev:unified         # full server.mjs (site + signaling + hosted MCP)
npm run srift -- --help     # run the CLI from TypeScript source
门禁(与 CI 完全相同)
npx tsc --noEmit
npm run lint
npm run build               # must run BEFORE npm test — SEO tests read .next/server/app
npm test                    # 475+ tests
node scripts/sync-version.mjs --check
版本管理

统一使用一个版本,并在所有地方同步。package.json 是唯一可信来源;提交前钩子会递增补丁版本,并同步 packages/cli/package.json、server.json(以及 packages[].version)、cli/index.ts 和 cli/index.js,然后运行 scripts/sync-version.mjs,同步另外约 15 个文件——网站 JSON-LD、openapi.json、agent.json、server-card.json、compat.json、changelog.json、install.sh、install.ps1,以及每个 srift.app/dl/<version>/ URL。

git commit -m "..."                      # bumps patch, syncs everything
SKIP_VERSION_BUMP=1 git commit -m "..."  # docs-only, or npm already at this version

如果 npm 已发布当前版本,请始终使用 SKIP_VERSION_BUMP=1——否则 server.json 会声明一个尚未发布到 npm 的版本。


发布 1 — npm
cd packages/cli
npm publish                 # prompts for 2FA — a human must run this

prepublishOnly 会重新构建 dist/,并运行漂移检查;如果 cli/index.ts 中的 CLI_VERSION 与 packages/cli/package.json 不一致,检查就会失败。

验证:

npm view srift-transfer version
npx srift-transfer@latest --help          # proves `bin` survived
npx srift-transfer@latest install-mcp     # must print "command": "srift"
命名
npm package:  srift-transfer     ← install / npx paths only
CLI command:  srift              ← what users and every MCP config invoke

npm i -g srift-transfer 会安装一个名为 srift 的二进制文件。不要把 MCP 配置“修正”为 srift-transfer——那会导致配置无法使用。

srift 本身不可用:npm 返回 403 too similar to existing package "sift"。出于同样的原因,srift-cli 也被屏蔽了(已有 sift-cli)。如果以后需要改名,作用域名称(@scope/name)可以绕过相似度过滤。

我们实际遇到过的 npm 故障
症状原因解决方法
403 requires two-factor authenticationnpm 双重身份验证必须由人工运行 npm publish。只有使用具有 bypass 2FA 权限的细粒度令牌才能自动发布。
403 too similar to existing package拼写抢注过滤器换用其他名称或作用域名称
npm warn publish "bin[srift]" ... was invalid and removedbin 路径以 ./ 开头使用 "bin": {"srift": "dist/index.js"}。npm 会静默移除该路径,导致发布的包不包含命令。CI 现在会因任何发布警告而失败。
安装因 node-datachannel / utp-native 而失败dependencies 中包含 webtorrent将其保留在 optionalDependencies 中;守护进程会降级为使用 WebSocket 传输
WebTorrent 播种时在 arr2hex 中崩溃(Buffer.from(undefined))uint8-util ≥ 2.3 与 webtorrent 2.8.5 不兼容在升级 webtorrent 之前,将 "uint8-util": "2.2.5" 保留在 package.json 的 overrides 中
EBADENGINEengines.node 要求过高不得排除 Node 20/22 LTS

发布 2 — MCP 注册表

命名空间为 app.srift/srift,已通过 srift.app 上的 Cloudflare DNS TXT 记录验证。条目: https://registry.modelcontextprotocol.io/v0/servers?search=srift

# 1. Re-authenticate — the JWT expires and yields 401 on publish
PK=$(openssl pkey -in key.pem -noout -text | grep -A3 "priv:" | tail -n +2 | tr -d ' :\n')
./mcp-publisher.exe login dns --domain srift.app --private-key "$PK"

# 2. Publish (reads ./server.json)
./mcp-publisher.exe publish

key.pem 是注册表身份凭据,mcp-publisher.exe 是一个 20 MB 的二进制文件——两者都被 git 忽略。丢失 key.pem 就意味着必须重新进行 DNS 验证。srift.app 上的 TXT 记录必须保留:

v=MCPv1; k=ed25519; p=<base64 ed25519 public key>
让我们耗费时间的注册表规则
  • 版本不可变。 重新发布已有版本会返回 400 cannot publish duplicate version。要更正条目中的任何内容——仓库 URL、描述、远程服务——都必须使用新版本。
  • 先发布 npm,再发布注册表。 server.json 会将 packages[].identifier: srift-transfer 声明为特定版本。先发布注册表条目,会导致条目宣传一个 npm 上不存在的版本,任何从该条目安装的人都会遇到 404。
  • Schema 使用 2025-12-11,字段采用驼峰命名(registryType、websiteUrl、runtimeArguments、environmentVariables、isRequired)。较早的修订版使用 snake_case;混用会导致验证失败。
  • description 最长为 100 个字符。
  • packages[].identifier 必须与 npm 包名称一致——对此有专门的测试,因为不一致会导致条目安装一个不存在的包。

第 3 版 — 目录
目录条目说明
Smitherysrift/sriftMCP 安装量最大的来源。读取 server.json。其徽章端点目前返回 500 错误,因此 README 使用指向该列表的 shields.io 徽章。
Glama已收录自动索引带有 MCP 元数据的公开仓库
awesome-mcp-servers已提交 PR在 file-management 下按字母顺序添加一行
GitHub 主题已设置 18 个topic:mcp-server 是一种实际的发现途径

CI

.github/workflows/ci.yml 在每次推送和 PR 时运行:

  • verify — tsc → lint → build → test → 版本漂移检查
  • package — 构建 CLI,如果 npm publish --dry-run 输出任何警告则失败,然后通过真实的 MCP stdio 对打包后的二进制文件进行冒烟测试,并断言有 15 个工具

第二个作业之所以存在,是因为 npm 曾悄悄移除 bin 条目,发布了一个不包含命令的包。现在警告会导致构建失败。

部署

推送到 main → Cloud Build → Cloud Run(asia-south1),约 10 分钟。

值
构建虚拟机E2_HIGHCPU_32(32 vCPU / 32 GB),100 GB 磁盘
构建堆8192 MB(BUILD_HEAP_MB)
Cloud Run4 GiB / 2 CPU,最少 1 个实例
运行时堆3072 MB — 刻意设为低于容器限制,以便 V8 执行 GC,而不是被 OOM 杀死
Bun通过 BUN_VERSION 固定版本

Dockerfile 中的每个 COPY 源文件都必须存在 — 删除的 proxy.ts 仍留在 COPY 列表中,曾导致所有构建失败。现在有一项测试会逐一检查它们。

生产环境验证
curl -s https://srift.app/cli/version.json
curl -s -X POST https://srift.app/mcp -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

srift quick-share <absolute-path> --ttl 15m --json
curl -fLOJ "https://srift.app/d/<token>"

在 Windows 上,请传入绝对 Windows 路径(C:/...)。Git Bash 的 /tmp 会解析为 C:\tmp,CLI 将无法找到该文件。

传输方式差异
传输方式工具原因
srift mcp(stdio)15可完整访问磁盘和密钥
127.0.0.1:3822/mcp15同一本地守护进程
https://srift.app/mcp9仅会话控制和诊断

托管版本不提供 srift_quick_share、srift_send_file、srift_accept_transfer(需要本地磁盘),以及 srift_send_chat、srift_chat_history、srift_read_state(需要在服务端派生会话密钥,这会违背初衷)。 权威来源:lib/mcp/backend-inprocess.mjs → SUPPORTED_TOOLS。

声明政策

以下说法对 SRIFT 而言是错误的或无法证实的,且由测试强制执行: #1 · files never touch any server · untraceable · complete anonymity · trusted by millions · 将 zero-knowledge 作为产品声明。

请改为使用零保留和军用级 AES-256-GCM。“零知识”不得作为产品声明:纯快速分享链接仅使用 TLS(请使用 --encrypt),且低于 4.2 的对等端会回退到由会话 ID 派生的密钥,服务器知道该 ID。4.2 及以上的对等端使用设备 ECDH P-256 + HKDF 密钥。


📄 许可证

MIT License © SRIFT

评论

支持 Markdown

第一次接触 MCP?

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

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