mcpField
S
SRIFT

SRIFT

リモート
srift.appファイル・ストレージ02 週間前に更新
リポジトリ公式サイト

SRIFT について

SRIFTは、人とAIエージェント向けの分散型ファイル転送・メッセージサービスです。暗号化されたピアセッションに加え、CLIとMCPツールでファイル共有やセッション管理を行えます。

主な機能

  1. 01ピアツーピアのファイル共有
  2. 02AES-256-GCMによるセッション暗号化
  3. 03セッション内のチャットとファイル転送
  4. 04CLIによる共有リンク作成
  5. 05Peerknockによるエージェント検索と通信

活用シーン

  1. 01エージェントのサンドボックスから成果物を送信
  2. 02ピアセッションでファイルやメッセージを交換
  3. 03エージェントから他のエージェントを検索・連絡

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 エージェントのための分散型エンドツーエンド暗号化ファイル転送、チャット、通話

npm version License: MIT Node.js Version MCP Registry Smithery Glama Encryption: AES-256-GCM Zero Telemetry

分散型、設定不要、トークン不要のエンドツーエンド暗号化ピアツーピアのファイル転送、チャット、通話を実現します。人間同士、人間と 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_sharefilePath | 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_sessionsessionName?(string)、roomSecret?(string)ホストの役割で新しいピアセッションを開始し、ルームコードと URL を返します。
srift_join_sessionsessionId(string)、username?(string)、roomSecret?(string)ピアとして既存のセッションへの参加をリクエストします。
srift_session_statusなしアクティブなセッションの状態、役割、接続中のピア、保留中の参加リクエストを取得します。
srift_close_sessionなしアクティブなルームを閉じ、ピアチャネルを終了し、暗号化キーを安全に消去します。
srift_approve_jointempUserId(string)ホスト制御:保留中のユーザー参加リクエストを承認します。
srift_reject_jointempUserId(string)、reason?(string)ホスト制御:保留中のユーザー参加リクエストを拒否します。
srift_kick_useruserId(string)ホスト制御:アクティブなユーザーをセッションルームから退出させます。
srift_send_filefilePath(string)セッション内のピアにファイルを提供します(エンドツーエンド暗号化された中継、またはブラウザ間の WebRTC)。
srift_accept_transferfileId(string)、saveDir?(string)受信したファイル提供を承諾し、ローカルディスクにストリーミングします。
srift_list_transfersなし進捗率、速度(KB/s)、ETA を含むアクティブな転送を一覧表示します。
srift_send_chatmessage(string)アクティブなセッションにエンドツーエンド暗号化されたチャットメッセージを送信します。
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 エージェント同士の会話

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> …
トピック仕組み
IDsrift: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 で動作します):
    1. 直接 WebRTC(ブラウザー↔ブラウザー)は短い先行時間を確保し、転送ごとに 1 つの接続を使います。ICE は 4 つの事業者の公開 STUN と、設定済みのすべてのプロバイダー(Cloudflare、自前の coturn、Metered、静的設定)からの短時間有効な TURN 認証情報(GET /v1/ice)を並行して使用します。受信者がファイル全体を受け取ったと確認するまで、送信は完了しません。
    2. エンドツーエンド暗号化リレーは、直接経路の接続が遅い、または失敗した場合に引き継ぐため、転送が NAT 越えを待つことはありません。直接転送が失敗した場合は、すでに受信したバイトからリレー経由で続行します。リレーチャンクは 256 KB で、確認応答にはスライディングウィンドウを使用します(古いクライアントでは 48/64 KB 形式を使用します)。ローカルでの測定では、リレー経路は約 8~13 MB/s で動作しました。
    3. WebTorrent:任意で、デフォルトではオフです(ブラウザーでのオプトイン)。SRIFT 独自のトラッカーはセッションのメンバーにのみ提供します(公開トラッカーはオプトイン方式で、シードされるバイト列は暗号化されていないため、SRIFT_PUBLIC_TRACKERS=1 を設定します)。
    4. HTTPS セッションストリーム:ネットワークが WebSocket をブロックする場合(Upgrade を削除するプロキシなど)、ブラウザーは同じ動作の通常の HTTPS に切り替えます。
  • ブラウザーでの受信:受信ファイルはブラウザー独自のダウンロード機能に直接送られるため、ダウンロードフォルダーに、受信中の状態で表示されます。また、ディスク上にファイルサイズ分の容量が一度だけ必要です(測定値:ブラウザー間で 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_PORT3822ローカルのバックグラウンドデーモンのポート
SRIFT_BASE_URLhttp://127.0.0.1:3822SDK クライアントがデーモンに接続する際に使用するベース URL
SRIFT_NO_UPDATE_CHECK01に設定すると、自動更新チェックを無効にします
SRIFT_LINK_PASSWORD—シェルの履歴に残さずにquick-share --encrypt/getで使用するパスワード
SRIFT_NO_HISTORY01に設定すると、作成したリンクを~/.srift/history.jsonlに記録しません
SRIFT_NO_EMBEDDED01に設定すると、プロセス内デーモンへのフォールバックを無効にします(サンドボックス向け)
HTTPS_PROXY / NO_PROXY—プロキシ(http://、https://、socks5://)。すべての場所で適用されます
NODE_EXTRA_CA_CERTS—TLS を検査するプロキシのルート CA を信頼します
SRIFT_PK_HOME~/.srift/peerknockPeerknock の ID とデータのディレクトリ
SRIFT_PK_RELAYhttps://srift.appPeerknock のリレー(複数指定する場合はカンマ区切り)
SRIFT_PK_EPHEMERAL01に設定すると、Peerknock の会話を RAM のみに保持します
SRIFT_PK_PASSPHRASE—Peerknock の ID ファイルを暗号化します(PBKDF2-SHA256 + AES-256-GCM)
SRIFT_PK_TRANSPORTwspollに設定すると、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 にはありません)。


🔗 リンクとリソース

公式掲載先
サービスリンク
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 をインストールします
任意のエージェント(スキル)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 を自分でインストールするエージェントは、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.jsonMCP レジストリマニフェスト
ローカル開発
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 authenticationnpmの2要素認証人がnpm publishを実行する必要があります。自動化する場合は、2要素認証のバイパス権限を持つ詳細なトークンのみを使用してください。
403 too similar to existing packageタイポスクワッティングフィルター別の名前またはスコープ付きの名前を選んでください
npm warn publish "bin[srift]" ... was invalid and removedbinのパスに先頭の./があった"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"のエントリーを残してください
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はレジストリの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 — ディレクトリ
ディレクトリエントリー備考
Smitherysrift/sriftMCP のインストール元として最大です。server.json を読み取ります。現在、バッジのエンドポイントは 500 エラーを返すため、README では掲載ページにリンクする shields.io バッジを使用しています。
Glama掲載済みMCP メタデータを含む公開リポジトリを自動でインデックス化します
awesome-mcp-serversPR 提出済み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 分。

値
ビルド VME2_HIGHCPU_32(32 vCPU / 32 GB)、100 GB ディスク
ビルドヒープ8192 MB(BUILD_HEAP_MB)
Cloud Run4 GiB / 2 CPU、最小インスタンス数 1
ランタイムヒープ3072 MB — コンテナの上限より意図的に低く設定し、OOM による強制終了ではなく V8 が GC を実行するようにします
BunBUN_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/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。

代わりに zero-retention と military-grade AES-256-GCM を使用してください。製品の主張として「zero-knowledge」は使用しません。通常のクイック共有リンクは TLS のみ(--encrypt を使用してください)であり、4.2 より古いピアではセッション ID から導出したキーにフォールバックするため、サーバーがそのキーを知っています。4.2 以降のピアでは、デバイス間の ECDH P-256 と HKDF キーを使用します。


📄 ライセンス

MIT License © SRIFT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。