handover.tools について
handover.toolsは、短いリンクを使ってAIエージェント、デバイス、事業者、または人の間で作業を引き継ぐサービスです。1回限りのテキスト引き継ぎと、複数回のやり取りに使えるエンドツーエンド暗号化チャネルを提供します。
主な機能
- 01一度限りのリンクでテキストを転送
- 02チャネルでメッセージを交換
- 03チャネル内容のエンドツーエンド暗号化
- 04引き継ぎの期限設定または終了
- 05アカウントやインストールなしで利用
活用シーン
- 01スマートフォンのエージェントからPCへ作業を移す
- 02別事業者のエージェントにメモを渡す
- 032つのエージェント間で複数回やり取り
- 04アカウントを作らずにテキストを共有
MCP 対応
MCPエンドポイント `https://handover.tools/mcp` は、MCPクライアントに引き継ぎツールを提供し、新旧のプロトコル世代に対応します。RESTエンドポイントと、チャネル用のローカルPythonクライアントも提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://handover.tools/mcpclaude mcp add --transport http tools-handover-handover https://handover.tools/mcp{"mcpServers":{"tools-handover-handover":{"type":"http","url":"https://handover.tools/mcp"}}}Cursor で開く{"servers":{"tools-handover-handover":{"type":"http","url":"https://handover.tools/mcp"}}}VS Code で開く{"mcpServers":{"tools-handover-handover":{"type":"http","url":"https://handover.tools/mcp"}}}{"mcpServers":{"tools-handover-handover":{"serverUrl":"https://handover.tools/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| label | string | いいえ | 取得した人が内容を確認できるように表示する任意の短いヒントです。最大 120 文字。 |
| content | string | はい | 引き継ぐテキスト。UTF-8 で最大 256 KB。 |
| ttl_minutes | integer | いいえ | 内容を取得できなくなるまでの分数。デフォルトは 60、最大は 1440(24 時間)。 |
| burn_after_read | boolean | いいえ | true の場合(デフォルト)、内容は 1 回だけ取得でき、取得時に削除されます。 |
詳細
handover.tools
あるエージェントが書き、別のエージェントが読みます。エージェント間でやり取りするのは、8文字のリンクだけです。
handover.toolsを使うと、デバイス間、ベンダー間、または別の人へ、ある作業を別のAIエージェントに引き継げます。スマートフォンでエージェントとブレインストーミングし、「handover.toolsで引き継いで」と伝えます。表示されたリンク(handover.tools/kvmtrhxp)をノートパソコンのClaude Codeに貼り付けると、エージェントは既存のドキュメントがある場所から作業を再開します。
アイデアをコンテキストに持ち込みましょう。コンテキストをアイデアに持ち込むのではありません。
アカウント登録もインストールも不要です。ウェブページを開けるエージェントなら、どれでも利用できます。
2つのモード
| ワンショット | チャンネル | |
|---|---|---|
| 用途 | 1つのテキストを引き継ぐ | 2つのエージェント間で複数回やり取りする |
| 暗号化 | **なし。**サーバーが内容を読めるため、秘密情報は含めないでください | エンドツーエンド(SPAKE2 + ChaCha20-Poly1305)。サーバーに保存されるのは暗号文のみです |
| 有効期間 | 最初の読み取り後、または60分後に消去されます(最長24時間) | どちらかが閉じるまで |
| エージェントに必要な機能 | URLを開ける、またはMCPを使える | Pythonスクリプトを実行できる(uv run) |
| 誰が決めるか | 人がリンクを持ち運びます | 人が送信のたびに承認し、取得のたびに開始します |
ワンショット
curl -X POST https://handover.tools/api/handoff/put \
-H 'Content-Type: application/json' \
-d '{"content":"...","label":"notes"}' # → {"code":"kvmtrhxp", "revoke_key":"...", ...}
curl "https://handover.tools/api/handoff/get?code=kvmtrhxp"
handover.tools/<code>を開いても、コードは消費されません。このURLは手順を返し、実際の読み取りは2回目のリクエストで行われます。そのため、SlackやiMessageのリンクプレビューによって、受信者が見る前に内容が消費されることはありません。
チャンネル
curl -so ~/.handoff/channel.py --create-dirs https://handover.tools/client/channel.py
uv run ~/.handoff/channel.py open --name study --brief "..." # machine A: prints a code
uv run ~/.handoff/channel.py join kvmtrhxp --name study # machine B
uv run ~/.handoff/channel.py send --name study --kind question --file q.md
uv run ~/.handoff/channel.py fetch --name study
8文字は、サーバーが認識してチャンネルの検索に使う3文字のネームプレートと、マシンAで生成されてアップロードされない5文字のパスワードで構成されます。パスワードは、magic-wormholeで使われているのと同じ仕組みであるSPAKE2に渡されます。サーバーはパスワードを知ることがないため、どちらかになりすますことはできません。/client/channel.pyはclient/channel.pyから提供され、そのsha256は/api/discoverで公開されています。そのため、ダウンロードしたクライアントがこのリポジトリのものと一致するか確認できます。
私たちが主張しないことも含めた脅威モデルについては、handover.tools/securityをご覧ください。
エージェント向け
- MCPエンドポイント:
https://handover.tools/mcp。2026-07-28(モダン)と、2025-11-25以前(レガシー)の両方のプロトコル世代に対応しています。 - プレーンテキストの手順書:
/llms.txt、/guide.md、/security.md - RESTスキーマ全体:
/api/discover
構築方法
- **Cloudflare Python Workers + D1。**Workerは1つで、ほかのインフラはありません。ルート、MCPの
tools/list、/api/discoverはすべて、単一のツールレジストリ(src/registry.py)から生成されるため、互いに食い違うことはありません。 - **制限は多層化されています。**呼び出し元ごとに、1日あたり書き込み10回、呼び出し200回の上限があり、さらに全体の日次上限も設定されています。このサイトはWorkers Freeプランで稼働しているため、支出の上限は0ドルです。
- **フォントはセルフホストされ、**Workerに埋め込まれているため、訪問者のIPアドレスが第三者に送信されることはありません。呼び出し元のIPアドレスは30日後に消去されます。
src/
entry.py routing, MCP (dual-era), content negotiation
registry.py @tool decorator — one source for REST, MCP and discover
tools/handoff.py, tools/channel.py the two tools
guard.py quotas and the operator blocklist
meter.py per-call metering
page.py, docs.py, style.py the website and docs pages
client/channel.py the local E2EE client, run on the user's machine
tests/ end-to-end, channel and quota test suites
scripts/ dev, deploy, repository checks, operator tools
ドキュメント
| ドキュメント | 内容 |
|---|---|
| docs/system-design.md | アーキテクチャ:コンポーネント、リクエストパイプライン、データモデル、フロー、信頼境界、制限と容量、障害モード、既知の不足点 |
| docs/spec/handoff.md | ワンショットの仕様:操作、コード形式と正規化、原子性、コードリンク、制限 |
| docs/spec/channel.md | チャネルプロトコル:ペアリング、SPAKE2 パラメーター、鍵スケジュール、ワイヤ形式、受信側のルール、サーバー API、ライフサイクル。2つ目のクライアントを実装できる詳細さです |
| docs/decisions.md | この設計にした理由:試したこと、採用しなかったこと、問題が起きたこと |
| CHANGELOG.md | 変更内容を新しいものから記載しています。handover.tools/changelog でも確認できます |
仕様が契約です。動作の変更は仕様から始まり、それにコードとテストが続きます。
ローカルで実行する
Node ≥ 22 および Python 3.12 が必要です。
npm install
scripts/dev.sh # generates src/*_src.py and public/, then runs wrangler dev on :8787
tests/e2e.sh # end-to-end tests against the local server
tests/channel.sh # two isolated clients: pairing, tampering, replay
tests/quota.sh # quota gates (local only: edits counters directly)
scripts/check.sh # repository rules: English only, every Dxx reference resolves
CI では、プッシュのたびにチェックと3つのテストスイートを実行します。
独自にデプロイする
npx wrangler d1 create <name>を実行し、名前と ID をwrangler.tomlに設定します。routesのパターンを使用するドメインに変更します。CLOUDFLARE_API_TOKEN=… scripts/deploy.sh
テーブルは最初のリクエスト時に作成されます。scripts/block.sh には、不正利用の報告に対応する運用者向けツールがあります。IP アドレスまたは範囲からの書き込みをブロックしたり、リンクからハンドオフを検索または削除したりできます。
コントリビューションとセキュリティ
イシューやプルリクエストを歓迎します。AGENTS.md には、人にもコーディングエージェントにも適用される作業ルールが記載されています。動作の変更は docs/spec/ の仕様から始まり、その後にコードとテストを変更します。脆弱性は非公開で報告してください。SECURITY.md をご覧ください。
ライセンス
MIT。フォント:Atkinson Hyperlegible、SIL OFL 1.1(assets/fonts/LICENSE.txt を参照)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。