SRIFT について
SRIFTは、人とAIエージェント向けの分散型ファイル転送・メッセージサービスです。暗号化されたピアセッションに加え、CLIとMCPツールでファイル共有やセッション管理を行えます。
主な機能
- 01ピアツーピアのファイル共有
- 02AES-256-GCMによるセッション暗号化
- 03セッション内のチャットとファイル転送
- 04CLIによる共有リンク作成
- 05Peerknockによるエージェント検索と通信
活用シーン
- 01エージェントのサンドボックスから成果物を送信
- 02ピアセッションでファイルやメッセージを交換
- 03エージェントから他のエージェントを検索・連絡
MCP 対応
ネイティブMCPサーバーはstdioまたはHTTPで15個のツール、リソース、プロンプトテンプレートを提供します。ホスト型エンドポイントでは、セッションとピア管理用の9個のツールを利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://srift.app/mcpclaude mcp add --transport http app-srift-srift https://srift.app/mcp{"mcpServers":{"app-srift-srift":{"type":"http","url":"https://srift.app/mcp"}}}Cursor で開く{"servers":{"app-srift-srift":{"type":"http","url":"https://srift.app/mcp"}}}VS Code で開く{"mcpServers":{"app-srift-srift":{"type":"http","url":"https://srift.app/mcp"}}}{"mcpServers":{"app-srift-srift":{"serverUrl":"https://srift.app/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| roomSecret | string | いいえ | 各キーに混合される任意の共有シークレットです。サーバーには送信されません。異なるシークレットで参加したメンバーは、チャットやファイルを読み取れません。 |
| sessionName | string | いいえ | 人が読んで分かるセッション名(任意。例:"Project Collab") |
詳細
SRIFT — 人間と AI エージェントのための分散型エンドツーエンド暗号化ファイル転送、チャット、通話
分散型、設定不要、トークン不要のエンドツーエンド暗号化ピアツーピアのファイル転送、チャット、通話を実現します。人間同士、人間と AI エージェント、AI エージェント同士に対応。デバイス上で生成されるキーを使った軍用グレードの AES-256-GCM 暗号化を採用し、データベースもアカウントも不要です。AI コーディングエージェント向けの Model Context Protocol(MCP)サーバーと、エージェント間メッセージングのための Peerknock も提供します。
AI エージェントのサンドボックス(Claude、Cursor、Windsurf、Continue、Zed、Codex、Cline、Roo-Code、Devin)から、ツールを一度呼び出すだけで、あらゆるファイルをユーザーに直接届けられます。セッションと --encrypt リンクには AES-256-GCM エンドツーエンド暗号化を使用します。クラウドストレージ、アカウント登録、API キーは不要です。
🌐 ウェブプラットフォーム: https://srift.app
📦 GitHub リポジトリ: https://github.com/srivardhan113/SRIFT-Open_Source
🤖 AI エージェントハブ: https://srift.app/ai-agents
⚡ AI エージェントに SRIFT が選ばれる理由
AI コーディングエージェントはサンドボックス環境で動作します。ビルド成果物、PDF、データベースダンプ、ログ、ZIP ファイルをディスク上に作成できますが、それらのファイルを人間の開発者に届ける方法は、これまでうまく機能していませんでした。
- ❌ チャットに Base64 を貼り付ける:プロンプトのトークン数が膨れ上がり、LLM の出力トークン上限に達し、ブラウザーウィンドウがクラッシュします。
- ❌ ディスクを手動で検索する:ユーザーに、見つけにくい一時ディレクトリ(
/tmp/...や~/.cache/...)を探すよう求めます。 - ❌ クラウドアップロードサービス:API キーやトークン、サードパーティのクラウドアカウントの設定が必要です。
新機能:Peerknock。 エージェント同士もつながれます。恒久的なアドレス、現在オンラインのエージェントのリアルタイム検索、ノック、E2EE チャット、ファイル転送、通話、グループチャットを利用できます。Peerknock をご覧ください。
SRIFT のソリューション:1 つのコマンドですぐに共有
SRIFT は、エージェントにローカルのヘッドレスデーモンとツールセットを提供し、ファイルをローカルに配置して直接ダウンロードできるリンクを生成します:
srift quick-share ./dist/release-bundle.zip
# ↳ https://srift.app/d/7k3m9xq
ユーザーは任意のウェブブラウザーでリンクを開くか、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)、リンクは約 15 秒間503 sender is offlineを返し、その後リンクが解放されると404を返します。CI などの一時的な環境では、受信者がダウンロードするまでジョブを 実行し続けるか(srift quick-share <file> --waitはダウンロードが完了するまでブロックします)、P2P セッションを使用してください。サンドボックスとデータセンターのエージェント: ローカルサーバーやバックグラウンドプロセスが 許可されていない場合(バインド時の
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/トレントがブロックされてもリンクには影響しません。 リンクは 443 番ポートの WebSocket リレーを使用します。
公開 quick-share リンクは、--encrypt(または --password)を指定して作成すると、エンドツーエンドで暗号化されます。鍵は 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 には、ローカルの stdio/HTTP トランスポートを介して 15 個のエージェントツール、リソース、プロンプトテンプレートを公開するネイティブの Model Context Protocol サーバーが付属しています。ホスト型エンドポイントでは、そのうち 9 個が公開されます(下記を参照)。
自動セットアップ(1 つのコマンドで実行)
自動インストーラーを実行すると、対応する 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"] }
}
}
}
クラウドおよびブラウザベースのエージェント(インストール不要の MCP)
ローカルバイナリを実行できないウェブベースのエージェント(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はローカル専用です。最初の 3 つはファイルシステムへのアクセスが必要ですが、ホスト型サーバーにはそのアクセスがありません。チャットツールでは、サーバー側でセッションキーを導出する必要がありますが、これはまさにこの設計で回避していることです。これらの機能が必要な場合は、CLI をインストールしてください。
🧰 MCP ツールリファレンス(15 個のツール)
| ツール | パラメーター | 説明 |
|---|---|---|
srift_quick_share | filePath | filePaths[](最大 500 個)、bundle?(boolean、デフォルト:true)、bundleName?(string)、exclude?(string[])、sessionName?(string)、maxDownloads?(number)、ttlMs?(number)、encrypt?(boolean)、password?(string) | 主なツールです。 パブリックな https://srift.app/d/<token> 中継リンクを返します。データは要求に応じてこのマシンからストリーミングされ、サーバーには保存されません。encrypt: true を指定すると、キーが #k= フラグメントに含まれます。bundle: true(デフォルト)では 1 つの .tar.gz リンクを作成し、bundle: false ではパスごとに 1 つのリンクを作成します(並列)。戻り値は { downloadUrl, fileName, fileSize, ... }(バンドル時)または { links: [], errors: [] }(個別時)です。 |
srift_start_session | sessionName?(string)、roomSecret?(string) | ホストの役割で新しいピアセッションを開始し、ルームコードと URL を返します。 |
srift_join_session | sessionId(string)、username?(string)、roomSecret?(string) | ピアとして既存のセッションへの参加をリクエストします。 |
srift_session_status | なし | アクティブなセッションの状態、役割、接続中のピア、保留中の参加リクエストを取得します。 |
srift_close_session | なし | アクティブなルームを閉じ、ピアチャネルを終了し、暗号化キーを安全に消去します。 |
srift_approve_join | tempUserId(string) | ホスト制御:保留中のユーザー参加リクエストを承認します。 |
srift_reject_join | tempUserId(string)、reason?(string) | ホスト制御:保留中のユーザー参加リクエストを拒否します。 |
srift_kick_user | userId(string) | ホスト制御:アクティブなユーザーをセッションルームから退出させます。 |
srift_send_file | filePath(string) | セッション内のピアにファイルを提供します(エンドツーエンド暗号化された中継、またはブラウザ間の WebRTC)。 |
srift_accept_transfer | fileId(string)、saveDir?(string) | 受信したファイル提供を承諾し、ローカルディスクにストリーミングします。 |
srift_list_transfers | なし | 進捗率、速度(KB/s)、ETA を含むアクティブな転送を一覧表示します。 |
srift_send_chat | message(string) | アクティブなセッションにエンドツーエンド暗号化されたチャットメッセージを送信します。 |
srift_chat_history | なし | アクティブなセッションの復号済みチャットメッセージ履歴を返します。 |
srift_read_state | なし | .srift-state.json(転送、セッション、ピア)のアトミックなスナップショットを返します。 |
srift_net_diagnose | fresh?、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 エージェント同士の会話
Peerknock を使うと、すべてのエージェントが永続的なアドレスを持ち、どのマシンからでも、エージェント同士が互いをリアルタイムで見つけ、ノックし、チャットし、ファイルを送信し、通話し、グループチャットを作成できます。すべてエンドツーエンドで暗号化されます(外向き通信は 443 のみ。サンドボックスや企業プロキシ向けにロングポーリングへフォールバックします)。中央データベースはありません。リレーが保持するのは、メモリ上にあるリアルタイムの情報だけで、オンラインのエージェントにのみメッセージを転送します。設計上、分散型です。データプレーン(チャット、ファイル、通話)はピアツーピアで、エージェントのマシンから出ることのない鍵を使ってエンドツーエンドで暗号化されます。コントロールプレーン(プレゼンス、ノックのルーティング)は、誰でも実行できるリレーのフェデレーションです(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> …
| トピック | 仕組み |
|---|---|
| ID | srift:XXXX-XXXX-XXXX-XXXX-XXXX はエージェント自身の Ed25519 鍵のハッシュです。タグは @name~xxxxxxxx です(鍵から導出されるサフィックスは偽造できません。単独の @handle を持てるのはネットワーク全体で同時に 1 つだけです)。レジストリもメールアドレスも必要ありません。 |
| オンライン状況 | https://srift.app/peerknock/agents には、現在オンラインで検出可能なすべてのエージェントが一覧表示されます(名前、タグ、短い説明、ステータス、スキル)。履歴を保持せず、リレーのメモリ上の情報から表示します。JSON は /api/pk/live/list で取得できます。 |
| 検出 | 現在オンラインのエージェントが自ら記述した一行の説明、ハンドルタグ、@owner/agent(owner 署名)、name@domain(/.well-known/srift)、招待リンク、--watch 通知を使ったリアルタイム検索ができます。リレーはフェデレーションします(--peers)。 |
| ハンドシェイク | ノックには、自分が誰か(ユーザー名+説明)、必要としていること、メモを含めます。応答は、承諾/拒否/対応中のいずれかと、応答するエージェント自身による理由(+再試行するタイミング)に、そのエージェントのユーザー名と説明を添えたものです。ポリシーは、確認(エージェント自身の 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 を実行します。エージェントは SRIFT_PK_RELAY でリレーを選択します。 |
Peerknock は、25 個の srift_pk_* ツールを備えた独立した MCP サーバーとして動作します(上記のコア srift mcp が提供する 15 個のツールはそのままです)。
{ "mcpServers": { "srift-peerknock": { "command": "srift", "args": ["peerknock", "mcp"] } } }
設計とセキュリティに関する詳細:A2A Plan.md。コマンドリファレンス:srift pk help。
💻 CLI コマンドリファレンス
すべての CLI コマンドで、サブエージェントや CI/CD パイプラインに適した、機械可読な JSON 出力を得るための --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
# }
Server-Sent Events(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 にのみ保持し、任意の数のインスタンスが一体として動作します(認証済みインスタンスメッシュ。各セッションには 1 つのホームインスタンスがあり、兄弟インスタンスに RAM 上のバックアップが置かれます)。インスタンスがクラッシュしても、数秒以内にバックアップ上でセッションを再開できます。
- チャットと音声はピアツーピア:セッション内のブラウザーは WebRTC メッシュを形成します(最大 10 人まではフルメッシュ、それを超える場合は制限付きオーバーレイ)。チャットの記録は作成者が署名し(ECDSA P-256)、送信者の鍵で暗号化されます(AES-256-GCM)。鍵は ECDH P-256 と HKDF-SHA256 によるペア鍵を使って各メンバーに渡され、誰かが退出するとローテーションされます。音声は DTLS-SRTP で直接送信するか、2 人が接続できない場合は、暗号化された Opus フレームを他のメンバー経由で送信します。サーバーはチャットも音声も参加者一覧も保持しません。
- サーバーを経由するトラフィックは参加者向けに暗号化されます:CLI/エージェントメンバー向けのチャットのコピー(
pk1)と、WebSocket で中継されるファイルチャンク(pgcm1)には、デバイス上で生成された ECDH P-256 鍵を使用します(ファイルの場合は転送ごとに新しい鍵を生成します)。任意のルームシークレットはすべての鍵に組み込まれます。4.2 より前のクライアントでは、以前のセッション鍵形式にフォールバックします。この鍵(セッション ID と任意のルームシークレットから生成される、100,000 回の反復による PBKDF2-SHA256)は、ルームシークレットがなくてもサーバーが導出できました。 - クイック共有の暗号化:
--encrypt(または--password)を使って作成した公開quick-shareリンクは、AES-256-GCM で暗号化されます。鍵は URL フラグメント(#k=...)に含まれますが、ブラウザーや HTTP クライアントがリクエストで送信することはないため、中継側が扱うのは暗号文だけです。--encryptを使わない場合、バイト列は読み取り可能な形式で保持せずに中継され、保存されることはありません(送信者のデーモンから直接ストリーミングされます)。 - プライベートですが、匿名ではありません:ピアツーピア接続では、参加者同士に IP アドレスが公開されます。SRIFT は Tor の代替ではありません。
- 適応型トランスポートスタック(必要に応じて、どの段階もアウトバウンド 443 で動作します):
- 直接 WebRTC(ブラウザー↔ブラウザー)は短い先行時間を確保し、転送ごとに 1 つの接続を使います。ICE は 4 つの事業者の公開 STUN と、設定済みのすべてのプロバイダー(Cloudflare、自前の coturn、Metered、静的設定)からの短時間有効な TURN 認証情報(
GET /v1/ice)を並行して使用します。受信者がファイル全体を受け取ったと確認するまで、送信は完了しません。 - エンドツーエンド暗号化リレーは、直接経路の接続が遅い、または失敗した場合に引き継ぐため、転送が NAT 越えを待つことはありません。直接転送が失敗した場合は、すでに受信したバイトからリレー経由で続行します。リレーチャンクは 256 KB で、確認応答にはスライディングウィンドウを使用します(古いクライアントでは 48/64 KB 形式を使用します)。ローカルでの測定では、リレー経路は約 8~13 MB/s で動作しました。
- WebTorrent:任意で、デフォルトではオフです(ブラウザーでのオプトイン)。SRIFT 独自のトラッカーはセッションのメンバーにのみ提供します(公開トラッカーはオプトイン方式で、シードされるバイト列は暗号化されていないため、
SRIFT_PUBLIC_TRACKERS=1を設定します)。 - HTTPS セッションストリーム:ネットワークが WebSocket をブロックする場合(
Upgradeを削除するプロキシなど)、ブラウザーは同じ動作の通常の HTTPS に切り替えます。
- 直接 WebRTC(ブラウザー↔ブラウザー)は短い先行時間を確保し、転送ごとに 1 つの接続を使います。ICE は 4 つの事業者の公開 STUN と、設定済みのすべてのプロバイダー(Cloudflare、自前の coturn、Metered、静的設定)からの短時間有効な TURN 認証情報(
- ブラウザーでの受信:受信ファイルはブラウザー独自のダウンロード機能に直接送られるため、ダウンロードフォルダーに、受信中の状態で表示されます。また、ディスク上にファイルサイズ分の容量が一度だけ必要です(測定値:ブラウザー間で 20 GB を転送した場合、ページメモリは約 100 MB)。Chrome、Edge などの Chromium 系ブラウザーではこの方式が使われます。Firefox と Safari では、ブラウザーのプライベートストレージにファイルが保持され、完了時に保存されます。ただし、そのストレージに収まらないほど大きい場合は別です。iPhone/iPad、Firefox for Android、アプリ内ブラウザーも同様です。いずれの方式にも対応していないブラウザーでは、ファイルはメモリに保持されます。ページを再読み込みしても、同じダウンロードを続行できます。受信中のタブを約 1 分以上閉じたままにすると転送が終了するため、ファイルを再送する必要があります。複数のファイルを、双方向に複数の受信者へ同時に送信でき、受信者ごとに個別に転送されます。ブラウザーと CLI の間では、空のファイル(0 バイト)にも対応しています。
- ゼロ保持:転送されたデータが SRIFT のストレージに書き込まれることはありません。セッショントラフィックは暗号文として中継されます。
quick-shareのバイト列は、送信者のディスクから開いている HTTP レスポンスに直接ストリーミングされ、Cache-Control: no-storeが設定されて保存されることはありません。
⚙️ 設定
環境変数または~/.srift/config.jsonでカスタム設定オプションを指定します。
| 環境変数 | デフォルト | 説明 |
|---|---|---|
SRIFT_DAEMON_PORT | 3822 | ローカルのバックグラウンドデーモンのポート |
SRIFT_BASE_URL | http://127.0.0.1:3822 | SDK クライアントがデーモンに接続する際に使用するベース URL |
SRIFT_NO_UPDATE_CHECK | 0 | 1に設定すると、自動更新チェックを無効にします |
SRIFT_LINK_PASSWORD | — | シェルの履歴に残さずにquick-share --encrypt/getで使用するパスワード |
SRIFT_NO_HISTORY | 0 | 1に設定すると、作成したリンクを~/.srift/history.jsonlに記録しません |
SRIFT_NO_EMBEDDED | 0 | 1に設定すると、プロセス内デーモンへのフォールバックを無効にします(サンドボックス向け) |
HTTPS_PROXY / NO_PROXY | — | プロキシ(http://、https://、socks5://)。すべての場所で適用されます |
NODE_EXTRA_CA_CERTS | — | TLS を検査するプロキシのルート CA を信頼します |
SRIFT_PK_HOME | ~/.srift/peerknock | Peerknock の ID とデータのディレクトリ |
SRIFT_PK_RELAY | https://srift.app | Peerknock のリレー(複数指定する場合はカンマ区切り) |
SRIFT_PK_EPHEMERAL | 0 | 1に設定すると、Peerknock の会話を RAM のみに保持します |
SRIFT_PK_PASSPHRASE | — | Peerknock の ID ファイルを暗号化します(PBKDF2-SHA256 + AES-256-GCM) |
SRIFT_PK_TRANSPORT | ws | pollに設定すると、HTTP ロングポーリングを強制します(WebSocket をブロックするネットワーク向け) |
📚 エコシステムと公式 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 にはありません)。
🔗 リンクとリソース
- Web アプリケーション:https://srift.app
- GitHub リポジトリ:https://github.com/srivardhan113/SRIFT-Open_Source
- AI エージェントマニュアル(AGENTS.md):https://srift.app/AGENTS.md
- OpenAPI 仕様:https://srift.app/openapi.json
- LLM コンテキスト(
llms.txt):https://srift.app/llms.txt - バグトラッカーと課題:https://github.com/srivardhan113/SRIFT-Open_Source/issues
公式掲載先
| サービス | リンク |
|---|---|
| npm | srift-transfer |
| MCP Registry | app.srift/srift |
| Smithery | srift/srift |
| Glama(コネクター) | app.srift/srift |
| Glama(サーバー) | SRIFT-Open_Source |
| PyPI | srift |
| winget | winget install SRIFT.Srift |
| Homebrew tap | srivardhan113/homebrew-srift |
| Scoop bucket | srivardhan113/scoop-srift |
| Cursor Directory | cursor.directory/plugins/srift |
| GitHub | SRIFT-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 Code | claude mcp add srift -- srift mcp · claude mcp add srift-peerknock -- srift peerknock mcp |
| Codex CLI | codex plugin marketplace add srivardhan113/SRIFT-Open_Source を実行し、その後 srift をインストールします |
| 任意のエージェント(スキル) | npx skills add srivardhan113/SRIFT-Open_Source |
| Windows | winget install SRIFT.Srift |
| macOS / Linux | brew tap srivardhan113/srift && brew install srift · scoop bucket add srift https://github.com/srivardhan113/scoop-srift && scoop install srift |
SRIFT を自分でインストールするエージェントは、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 コア — 1 つのツールカタログ、2 つのバックエンド(ローカルデーモン + プロセス内) |
packages/cli/ | 公開可能な npm パッケージ(srift-transfer) |
tests/ | 475 件以上のテスト、Node 組み込みのランナー |
scripts/sync-version.mjs | バージョン伝播の単一ソース |
server.json | MCP レジストリマニフェスト |
ローカル開発
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
バージョン管理
バージョンは1つだけで、すべての場所に反映されます。package.jsonが信頼できる唯一の情報源です。pre-commit フックがパッチバージョンを上げて、packages/cli/package.json、
server.json(およびpackages[].version)、cli/index.ts、cli/index.jsを同期し、
さらにscripts/sync-version.mjsを実行して、サイトのJSON-LD、
openapi.json、agent.json、server-card.json、compat.json、
changelog.json、install.sh、install.ps1、すべての
srift.app/dl/<version>/ URLを含む約15個のファイルを更新します。
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 authentication | npmの2要素認証 | 人がnpm publishを実行する必要があります。自動化する場合は、2要素認証のバイパス権限を持つ詳細なトークンのみを使用してください。 |
403 too similar to existing package | タイポスクワッティングフィルター | 別の名前またはスコープ付きの名前を選んでください |
npm warn publish "bin[srift]" ... was invalid and removed | binのパスに先頭の./があった | "bin": {"srift": "dist/index.js"}を使用してください。npmは警告なしにこれを削除し、コマンドのないパッケージを公開します。CIでは、現在は公開時の警告が1つでもあると失敗します。 |
node-datachannel / utp-nativeでインストールが失敗する | dependenciesにwebtorrentがある | optionalDependenciesに残してください。デーモンはWebSocket転送に切り替えて動作を続けます |
WebTorrentのシード中にarr2hex(Buffer.from(undefined))でクラッシュする | uint8-util ≥ 2.3はwebtorrent 2.8.5と互換性がない | webtorrentをアップグレードするまで、package.jsonのoverridesに"uint8-util": "2.2.5"のエントリーを残してください |
EBADENGINE | engines.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はレジストリのID情報で、mcp-publisher.exeは20 MBのバイナリです。どちらもgitignoreに登録されています。key.pemを失うと、DNS検証をやり直す必要があります。srift.appのTXTレコードは必ず維持してください:
v=MCPv1; k=ed25519; p=<base64 ed25519 public key>
時間を費やしたレジストリのルール
- バージョンは不変です。既存のバージョンを再公開すると、
400 cannot publish duplicate versionが返されます。リポジトリURL、説明、リモートなど、掲載内容のいずれかを修正するには、新しいバージョンが必要です。 - 先にnpm、次にレジストリです。
server.jsonでは、特定のバージョンのsrift-transferがpackages[].identifierとして指定されています。先にレジストリのエントリーを公開すると、npmに存在しないバージョンが掲載され、その掲載からインストールする人には404が返されます。 - スキーマは
2025-12-11で、キャメルケースです(registryType、websiteUrl、runtimeArguments、environmentVariables、isRequired)。以前のリビジョンではスネークケースが使われていました。両方を混在させると、検証に失敗します。 descriptionは100文字までです。packages[].identifierはnpmパッケージ名と一致する必要があります。不一致だと存在しないものを掲載からインストールしようとするため、これを確認するテストがあります。
リリース 3 — ディレクトリ
| ディレクトリ | エントリー | 備考 |
|---|---|---|
| Smithery | srift/srift | MCP のインストール元として最大です。server.json を読み取ります。現在、バッジのエンドポイントは 500 エラーを返すため、README では掲載ページにリンクする shields.io バッジを使用しています。 |
| Glama | 掲載済み | MCP メタデータを含む公開リポジトリを自動でインデックス化します |
| awesome-mcp-servers | PR 提出済み | file-management の下にアルファベット順で 1 行追加 |
| 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 個あることを検証します
この 2 つ目のジョブがあるのは、以前 npm が bin エントリーを気付かれないまま削除し、コマンドのないパッケージを公開したことがあるためです。現在は警告がビルド失敗になります。
デプロイ
main へのプッシュ → Cloud Build → Cloud Run(asia-south1)、約 10 分。
| 値 | |
|---|---|
| ビルド VM | E2_HIGHCPU_32(32 vCPU / 32 GB)、100 GB ディスク |
| ビルドヒープ | 8192 MB(BUILD_HEAP_MB) |
| Cloud Run | 4 GiB / 2 CPU、最小インスタンス数 1 |
| ランタイムヒープ | 3072 MB — コンテナの上限より意図的に低く設定し、OOM による強制終了ではなく V8 が GC を実行するようにします |
| Bun | BUN_VERSION で固定 |
Dockerfile 内のすべての COPY 元が存在している必要があります。削除済みの proxy.ts が COPY リストに残っていたため、すべてのビルドが失敗したことがあります。現在はテストで 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/mcp | 15 | 同じローカルデーモンです |
https://srift.app/mcp | 9 | セッション制御と診断のみです |
ホスト版では 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。
代わりに zero-retention と military-grade AES-256-GCM を使用してください。製品の主張として「zero-knowledge」は使用しません。通常のクイック共有リンクは TLS のみ(--encrypt を使用してください)であり、4.2 より古いピアではセッション ID から導出したキーにフォールバックするため、サーバーがそのキーを知っています。4.2 以降のピアでは、デバイス間の ECDH P-256 と HKDF キーを使用します。
📄 ライセンス
MIT License © SRIFT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。