TapeAPI: signed BNB Chain reads について
TapeAPIはTapeOutサービスのオンチェーン解決と署名付き呼び出しを提供し、検証可能なAI応答やMCPツール結果を必要とする開発者向けです。署名、レシート、オンチェーンのツール定義を組み合わせ、コンテナ間の暗号化通信にも対応します。
主な機能
- 01署名付き応答と利用レシート
- 02TAP規則に基づくサービス名解決
- 03オンチェーンで固定するMCPツール定義
- 04コンテナ間のエンドツーエンド暗号化通信
活用シーン
- 01AI応答と利用レシートの検証
- 02MCPクライアントへの検証可能なツール結果の提供
MCP 対応
署名とレシート付きの結果をMCPクライアントに提供し、ツール定義をハッシュでオンチェーンに固定します。ローカル検証ツールもあります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.tapeapi.fun/mcpclaude mcp add --transport http brucelanlan-tapeapi https://api.tapeapi.fun/mcp{"mcpServers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}Cursor で開く{"servers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}VS Code で開く{"mcpServers":{"brucelanlan-tapeapi":{"type":"http","url":"https://api.tapeapi.fun/mcp"}}}{"mcpServers":{"brucelanlan-tapeapi":{"serverUrl":"https://api.tapeapi.fun/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
8このツールにパラメーターはありません。
詳細
TapeAPI
AI 呼び出しごとに、署名付きレシートを発行します。 OpenAI または Anthropic 互換の API の前にサイドカーを置くだけで、すべての応答に誰が、どのリクエストに対して、どのバイト列を返し、どの使用量と料金を申告したかを誰でも検証できるレシートが付属します。ユーザーは公式 SDK をそのまま使い、ベース URL だけを変更できます。
TapeAPI は TapeOut の署名付き API レイヤーです。同じオンチェーン ID と署名は、BNB Chain、X Layer、Base 上の MCP ツール、エンドツーエンド暗号化チャネル、グループにも対応します。
中文说明 · ウェブサイト · ドキュメント · ガイド · 仕様 · サンプル · 変更履歴 · ロードマップ · 2.0 へのアップグレード
2.0:デフォルトで標準準拠。 オプションを指定せずに
createTapeAPI()を呼び出すと、TapeOut の公式 TAP に従ってサービスが解決されます。TAP-10 v1.1 §3 から §7 および TAP-11 §2 に従い、すべての読み取りを同一の固定ブロックで行い、チェーンとオーナーに関するノード間の厳密な一致を確認します。また、名前が未登録(not-opened)、有効化されていない、または支払いが切れている(unpaid)場合や、TapeOut のサイトストアまたは支払いコントラクトで SDK が未掲載の実装が実行されている場合(store-changed)には、何も通知しないまま成功とせず、名前付きステータスを返します。TAP-11 と TAP-13 は私たちが草案を作成して提出したもので、編集者は両方を公式リポジトリに Drafts としてマージしました。Draft へのマージは採用を意味しません。TAP-10 と TAP-11 は Drafts であるため、デフォルトの変更には次のルールを適用します。2.x のマイナーリリースでは制約の緩和または新しいステータス名を導入し、制約の強化はまずオプションのプロファイルとして導入してから、3.0 でデフォルトにします。1.x の動作はconform: falseを指定すれば引き続き使用できます(非推奨ですが、2.x の全バージョンで維持されます)。既知の例外が 1 つあります。allChainsを指定しない場合、processor contract#ID は拒否されます。詳細は2.0 へのアップグレードを参照してください。2.0 では、プライベートチャネルとグループに、TAP の編集者から要望のあったtape-channel/およびtape-group/のラベルも使用します。 2.0 の新機能 · 2.0 へのアップグレード
実験的機能、2.0 で初公開:上限付きエージェント。 AI エージェントはコンテナの費用を支払うことができ、その最大損失額はエスクローコントラクトによって固定され、誰でもオンチェーンで確認できます。サービスごとに 1 つのエスクローチャネル、エージェント用の一度限りのセッションキー、上限を超える署名を決して行わないリミッターを用意し、キーと注文記録を暗号化して保管することで、再起動後も注文を再開できます。制限について、率直に説明します。 エスクローコントラクトは監査されておらず、デプロイもされていません。そのため、現時点ではメインネットでこの機能は動作しません。ローカルチェーンとテストでのみ検証されています。また、
@tapeapi/sdk/agentは 2.x の互換性保証の対象外です。上限付きエージェント ステータス:リリース済み、2.4.0。 現在利用できる機能はすべて無料です。TapeAPI はセマンティックバージョニングに従っています。2.0 のドキュメントに沿って書かれたコードは、すべての 2.x リリースで引き続き動作し、1.x には 2.0.0 のリリース後 6 か月間、セキュリティ修正が提供されます。有料の呼び出し(TAPI-22)は実験的で、デプロイされていません。ここにあるものは、第三者による監査を受けていません。セキュリティに関する注意: 1.0.0 から 1.4.0 では、特定のチャンク分割において、ストリーミング AI のレシート検証が、途中で切れたストリームやコンテンツが注入されたストリームを検証済みと報告する可能性がありました。この問題は 1.5.0 で修正されました (リリースノート)。
できること
- 署名付き回答とレシート(1.0 以降、安定版)。すべての回答は、コントラクトの保有者がオンチェーンで委任した鍵によって署名され、リクエストに紐付けられます。AI 呼び出しには、オンチェーンの料金表に基づいて価格が設定された使用レシートも付与されます。 サービスを呼び出す · AI プロバイダー向け
- TapeOut の公式 TAP に準拠した名前解決(2.0 以降、デフォルト)。名前は、固定されたブロックにおいて TAP-10 v1.1 と TAP-11 §2(ドラフト)の規定どおりに解決され、失敗時にはすべて TAP のステータス(
e.data.status)が返されます。1.4 でオプトインのconform: 'tap10'として導入されました。conform: falseを指定すると、2.x でも 1.x の名前解決が維持されます。ステータス名は今後追加されるのみで、2.0 では実験的です。 2.0 へのアップグレード - MCP ツール(1.0 以降、安定版)。レシート付きの署名済み結果と、ハッシュによってオンチェーンに固定されたツール定義を提供します。公開エンドポイント、自分のサーバー用の署名プロキシ、すべての回答をローカルで検証する
tapeapi-mcpがあります。 MCP - プライベートチャネルとグループ(1.0 以降、安定版。仕様のバージョン 2 は
tape-channel/とtape-group/のラベルを使用し、2.0 以降デフォルトです)。リレーまたは ChannelBus を介して、コンテナー間でエンドツーエンド暗号化を行います。 チャネル · グループ - 使用量を検証できるストリーミング AI レシート(1.5 から 1.6)。ストリームが途中で切られたり、コンテンツが追加されたりした場合、ストリーミングレシートは無効になります。オプトインの
requestUsageを指定すると、ストリーミングされた OpenAI Chat の回答の使用量が署名済みストリームに含まれ、回答全体の場合と同様に検証されます(上流側が集計した使用量自体を証明するものではありません)。 ストリーミングの使用量:3 つの方法 - コンテナーエージェント(実験的)。フェーズ 0(1.7):保有者が署名した委任、オファーから受諾までのタスクスレッド、読み取り専用の支払い確認を提供します。新しいコントラクトはなく、強制力もありません。制限付きエージェント(2.0):資金を指定する委任をエスクローチャネルで執行しますが、ローカルチェーンとテストでのみ利用できます。 コンテナーエージェント · 制限付きエージェント
- 米ドル建ての価格、BEM での支払い、コンテナー間のレビュー(2.0、実験的)。プルリクエスト(#52 と #54)として提出した 2 つの TAP ドラフトのリファレンス実装であり、マージされていません。エスクローはデプロイされていないため、呼び出しに料金は発生しません。 以下
2.0 の新機能
2.0 のテーマは 1 つです。TapeOut の公式 TAP プロセスに提出した内容と、TapeOut 自体が規定している内容が、既知の例外(以下)を除き、何も指定しなかったときの SDK の動作になります。すべての破壊的変更と代わりに記述する内容は、1.x から 2.0 へのアップグレードに記載されています。TAPI-20 から TAPI-27 のワイヤーフォーマットと固定定数は変更されないため、2.0 のクライアントはすべての 1.x のマニフェスト、委任、署名済みレスポンス、レシートを検証できます。
デフォルトで標準に準拠
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
// 2.0: TAP-10 / TAP-11 §2 resolution, exactly what conform: 'tap10' did in 1.x
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) })
// 2.0: the 1.x resolution, request for request (deprecated; kept in all of 2.x; one onWarning when the client is made)
const legacy = createTapeAPI({ rpcUrls: rpcUrlsFor(56), conform: false })
| 1.x のデフォルト | 2.0 のデフォルト | |
|---|---|---|
| どの解決仕様を使用するか | TapeAPI 独自の仕様(TAPI-20) | TAP-10 v1.1 §3 から §7、および TAP-11 §2 |
| 読み取りで使用するブロック | 最新の未固定ブロック | TAP-10 のブロックを 1 つ固定し、番号とハッシュで確認 |
| ノード間の合意 | オペレーターの過半数 | すべてのオペレーターが応答し、eth_chainId、ownerOf、およびコントラクト保有者の EIP-1271 呼び出しに合意する必要があります。それ以外は過半数で合意します |
| 一度も開設されていない名前 | マニフェストが有効なら解決します | SITE_STATUS、data.status: 'not-opened' |
| 有効化されていない、または支払い期限が切れた名前 | 解決します | SITE_STATUS、data.status: 'unpaid' |
| TapeOut がサイトストアまたは決済コントラクトをアップグレードした場合 | 警告付きで解決します | CONTRACT_UNKNOWN、data.status: 'store-changed'(パッチリリースで新しい実装がリストされるまで、フェイルクローズします) |
独自のアドレス、ローカルチェーンまたはフォーク、明示的な pin | 許可されます | クライアント作成時に INVALID_ARGUMENT が発生し、conform: false を指定します |
プロセッサーコントラクトの #ID 文字列 | このクライアントのチェーン上で解決されます | allChains: true を指定しない限り、INVALID_ARGUMENT、data.status: 'unsupported'(TAP-11 §2.1 に対する既知の例外) |
| マニフェストの保持期間 | 3,600 秒 | 60 秒 |
TAP-10 と TAP-11 は Drafts として統合されました(統合は採択を意味するものではありません)。そのため、テキストは今後も変更される可能性があります。変更時には、制約の緩和や新しいステータス名は 2.x のマイナーリリースでデフォルトになります。制約の強化はまず新しいオプションのプロファイルとして提供され、3.0 でデフォルトになります。ステータス名が減ることはありません。conform: false は TAP に一切準拠しません。
デフォルトが変更に追従する方法
- メッセージではなく
e.data.statusに基づいて分岐してください。 ステータス名は TAP で使われている小文字の名前です(unsupported、hub-changed、container-mismatchは TapeAPI 独自のものです)。名前が増えることはあっても減ることはなく、2.0 ではdata.statusは実験的な機能です (Draft に準拠しています)。TAP-11 のレビュー期間が未解決の異議なく終了した後、Stable にすることが検討されています。not-openedとunpaidはプロバイダー側での修正が必要です(再試行しないでください)。store-changedは SDK の更新を意味します (暫定措置としてconform: falseを指定してください)。unavailableはノードの問題です(再試行するか、独自のオペレーターを追加してください)。 - コマンドラインも新しい仕様に準拠しています。
tapeapi-verify、tapeapi-mcp、tapeapi-doctorは新しいデフォルトを使用し、どの解決方式を使ったかを示します。また、1.x の解決方式には--no-conformを指定できます。新しいデフォルトでは、tapeapi-doctorは有効化されていない名前を失敗として扱います(デフォルトのクライアントでは解決できません)。--no-conformを指定した場合は、引き続き警告となります。 - エージェントツールキットも同様です。
createAgentKit(@tapeapi/sdk/agent、実験的)は、resolveを指定しなければ、TAP-11 §2 のとおりにエージェントとプロバイダーを解決します。 dev: trueはconform: falseを意味します。 警告は表示されません。開発モードではチェーンの ID はチェックされません。- コストについて。 BNB Smart Chain のデフォルトノードで計測したところ、1 つのサービスを初めて解決する際の JSON-RPC 呼び出しは約 24 回から約 45 回(約 2 倍)に、同じクライアントで再度解決する場合は約 9 回から約 36 回(約 4 倍)になりました。パブリックノードでレート制限がかかる場合は、独自のオペレーターを
rpcUrlsに追加してください。 - 確認方法について。 637 件のケースで差分テストを実施しました。
conform: falseでは、637 件すべてで 1.8.1 のデフォルトと同じリクエストを同じ順序で送信し、同じ結果が得られました(許容される唯一の差分は、非推奨の警告と、chain.channelKeysが報告するバージョン 2 の受信トレイルームです)。当社のサービス11.1013.tapeと12.1013.tapeは、TAP-10 の解決方式でメインネット上で解決できます。どちらも有効化されており、支払い期限は 2036-08-09 です。 - サービスを提供している場合: 2.0 をインストールした環境で
tapeapi-doctor <your name>を実行してください。最初の 7 項目(名前から委譲まで)がすべて合格すれば、2.0 クライアントで解決できます。それ以降の項目は AI サービス向けのため、AI サービスではないサービスは 1.x と同様にai-fieldで失敗します。名前の支払いが期限切れになると、2.0 クライアントにはunpaidと表示され、レシートチェッカーは、支払いが有効だった期間にサービスが署名したレシートをチェックできなくなります。
その他の破壊的変更
- プライベートチャネルとグループでは、デフォルトで TAPI-26 v2 と TAPI-27 v2 を使用します。 TAP 編集者が Draft #12 と #20 のマージ前に求めたとおり、ラベルは
TAP-26/とTAP-27/ではなくtape-channel/とtape-group/で始まります。labels: 'v1'を指定するとバージョン 1 を選択できます(2.x では非推奨ですが、削除されません)。2 つのバージョンには互換性がなく、フェイルオープンすることもありません。不一致がある場合、タイムアウトするか、名前付きの不一致として報告されます(data.labels、data.peerLabels)。グループは作成後ずっと同じバージョンを使用するため、1.x のグループはバージョン 1 のグループとして再開されます。チャネルレコード、リレー、ChannelBus に変更はなく、保有者が再度署名する必要もありません。 TapeAPIErrorからe.dataの各フィールドの非推奨なトップレベルの別名が削除されます。e.data.*を参照してください。各詳細は 1.0 以降すべて含まれています(一覧はアップグレードガイドにあります)。- チャネルモジュールは、独自のオプションや引数の誤りを、他のすべてのモジュールと同様に
INVALID_ARGUMENTとして報告します。 不正な TAPI-26 データは引き続きCHANNEL_INVALIDとなります。
制限付きエージェント(実験的機能。メインネットでは利用できません)
Phase 0(1.7)では、コンテナのために誰がどのタスクを実行できるかを記録しますが、何も強制しません。制限付きエージェントは Phase 1 の機能です。 エージェントはコンテナのために支払いを行えます。コンテナが失う可能性のある最大額はエスクローコントラクトによって固定され、オンチェーンで確認できます。回路の保有者は、エージェントが支払うことのできるサービスごとにエスクローチャネルを 1 つ用意して資金を預け、その 1 つの委任のために作成したキーを、委任の有効期限まで各チャネルのセッションキーとして承認します。エージェントのキーが漏洩したり、不正に動作したりしても、その損失は各チャネルに預けた額までであり、委任に記載されたサービスに対してのみ発生します。
- 検証。
{ enforcement: 'escrow-channel' }を指定したverifyMandateとverifyTaskThreadは、1 つの固定ブロックで上限付きの各チャネルを読み取り、すべての読み取りが条件を満たした場合にのみ、委任が強制可能と報告します。チェーン上で上限が設定されるのは、常にチャネルの残高です(bound: 'channel')。 - 保有者の計画。
holderPlanはチェーンから事実を読み取り、保有者のウォレットから、またはコンテナを介して実行できる、署名されていないapprove、fund、authorizeSessionトランザクションを返します。afterPlanはそれらを読み返し、closeOutは残額を引き出します。セッション履歴により、同じ計画を 2 回実行して同じキーに 2 度資金を預けることを防ぎます。 - エージェント自身の上限。
createSpendLimiterは、チャネル開始時点のclaimedOfに上限額を加えた額を超えるバウチャーには決して署名せず、デフォルトでは上限額の 10% を超える単一の呼び出しも拒否します。 - 再起動。 キーボルト(
passphraseKeyVault:scrypt と XChaCha20-Poly1305)を使用すると、エージェントのセッションキーと、examples/agent-serviceでは注文記録が暗号化されて保管されます。resumeは再起動後に注文を再開しますが、停止、失効、期限切れになった注文は再開しません。 - 配信での金額の説明。 配信には、エージェントが署名した支出明細を添付できます。この明細はチェーンおよび領収書と照合されます。
制限事項。 この機能が依存するエスクローコントラクト(TAPI-22、contracts/src/TapeAPIEscrow.sol)は、どのチェーンでも監査されておらず、デプロイもされていません。また、SDK の監査済みエスクロー一覧は空のため、これらの機能はメインネットでは動作しません。SDK のフェイクチェーン(node --test examples/agent-service/agent-service-spend.test.mjs)と、トランザクションおよびバウチャーについてはローカルのエスクローのコピー(cd contracts && forge test --match-path 'test/Phase1*')で確認しています。この機能は実験的であり、2.x の互換性保証の対象外です。Phase 1 の TAP ドラフトは TapeOutProtocol/TAPs#60 として提出済みです(現在はドラフト PR として公開中)。また、これが依存するエスクローインターフェースは #59 として提出済みです(現在はドラフト PR として公開中)。
2.0 でのその他の実験的機能
- 米ドル建て価格、BEM での支払い(TAPI-22 §3.6、TAP ドラフト #52、公開中のプルリクエスト)。マニフェストではメソッドの価格を米ドルで指定できます。プロバイダーは署名済み見積もりで BEM のレートを提示し、クライアントはバウチャーに署名する前にオンチェーンの参照プールと照合します。また、価格が設定された各回答には署名済みの請求記録が含まれます。メソッドの
priceBEMは、1 回の呼び出しにかかる最大額のままです。usdPricingのないマニフェストでは、従来どおりバイト単位で応答と支払いが行われます。エスクローはデプロイされていないため、請求は発生しません。 - コンテナ間のレビュー(
@tapeapi/sdk/review、TAP ドラフト #54、公開中のプルリクエスト)。レビューはレビュー担当者の保有者または委任者が署名し、証拠がある場合にのみ有効となります。証拠には、レビュー担当者が受け取った署名済み回答、または 2 つのコンテナ間のタスクスレッドがあります。概要では異なるレビュー担当者と保有者の数を数え、金額は数えません。tapeapi-verify review <name>で概要を出力できます。
まずはこちら
| 対象 | 最初の5分で行うこと | ガイド |
|---|---|---|
| AI プロバイダーまたはリレー(new-api、ゲートウェイ、独自モデル) | examples/new-api-sidecar で docker compose up を実行し、ホルダーコンソールで料金表を公開して、ユーザーのベース URL をサイドカーに設定したら、tapeapi-doctor <your name> を実行します | AI プロバイダー向け |
| MCP サーバーの作成者 | サーバーの前に署名プロキシを配置し、コンソールでマニフェストを公開します | MCP サーバーを Tape Out する |
| アプリ開発者 | 以下の例を実行し、createVerifyingFetch で AI のレシートを確認します。チャンネルとグループは examples/group-chat から開始します | サービスを呼び出す · チャンネル · グループ |
| 1.x からのアップグレード | コード内で conform、labels、トップレベルの TapeAPIError エイリアス、CHANNEL_INVALID を検索します。独自のアドレスまたはローカルチェーンを使用する箇所には conform: false を追加します | 2.0 へのアップグレード |
| TapeOut 回路のホルダー | 回路のコンテナを開いて名前を有効化し、サービスキーを生成して、委任に署名し、コンソールでマニフェストを公開します | サービスを実行する |
| Claude、Cursor、その他の MCP ユーザー | コネクターとして https://api.tapeapi.fun/mcp を追加します | MCP |
| コンテナ用エージェントを雇用する、または構築する方(実験的) | チェックアウトしたリポジトリで node examples/agent-service/hire.mjs を実行し、各手順でウォレットに何への署名が求められるかを確認します | コンテナエージェント |
試してみる
署名付きの応答。 公開サービス 11.1013.tape は、BNB Chain のブロックを指定した無料の読み取りに8回応答します。
curl -s https://api.tapeapi.fun/tapeapi/v1/bnbUsd -H 'content-type: application/json' -d '{"id":"1","params":{}}'
curl は署名付きエンベロープを表示しますが、検証はしません。SDK は検証します。まだ npm では公開されていないため、GitHub リリースからインストールします(Node.js 20 以降)。
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz
サーバーパッケージ(@tapeapi/server:プロバイダー、AI サイドカー、MCP プロキシ)は、この SDK に依存していますが、こちらも npm では公開されていないため、単独でインストールすると404エラーになります。両方を1つのコマンドでインストールしてください。
npm install https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-server-2.4.0.tgz。
// try.mjs: node try.mjs
import { createTapeAPI, rpcUrlsFor } from '@tapeapi/sdk'
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) }) // nodes of 3 distinct operators; most reads need 2 to agree,
// ownerOf and eth_chainId need all 3 (strict)
const service = await api.resolve('11.1013.tape') // TAP-10 / TAP-11 §2: one pinned block, opened, activated
const { result, verified } = await api.call(service, 'bnbUsd', {})
console.log(result.bnbUsd, verified) // true only after the signature checked out
解決に失敗すると、e.data.status に理由が TAP 独自の表現で示されます。
try {
await api.resolve('11.1013.tape')
} catch (e) {
if (e.data?.status === 'not-opened' || e.data?.status === 'unpaid') { /* the provider's to fix: do not retry */ }
else if (e.data?.status === 'unavailable') { /* a node did not answer or disagreed: retry */ }
else throw e
}
ローカルサービス、ローカルチェーン、または独自のデプロイ。 開発モードでは dev 以外のオプションは不要です。TapeOut チェーンではないチェーンを使う場合は conform: false が必要です。そうしないと createTapeAPI() は INVALID_ARGUMENT で停止します。
const dev = createTapeAPI({ dev: true }) // a local http:// service without an on-chain manifest
const local = createTapeAPI({ // an anvil chain with your own TapeOut contracts
rpcUrls: ['http://127.0.0.1:8545'], allowSingleNode: true, allowHttp: true,
chainId: 31337, hub: HUB, factory: FACTORY, siteRegistry: SITE_REGISTRY,
conform: false, // the 1.x resolution; deprecated, kept in 2.x
})
AI のレシート。 createVerifyingFetch を公式の OpenAI SDK に組み込みます(npm install openai。Anthropic SDK も fetch を受け取ります)。42.1013.tape をプロバイダーの TapeOut 名に置き換えてください。
import OpenAI from 'openai'
import { createTapeAPI, rpcUrlsFor, ai } from '@tapeapi/sdk'
const api = createTapeAPI({ rpcUrls: rpcUrlsFor(56) })
const service = await api.resolve('42.1013.tape') // the AI provider's name (an example)
const { baseUrl } = service.manifest.ai.endpoints.find((e) => e.format === 'openai-chat')
const client = new OpenAI({
baseURL: baseUrl, // the address the provider published on chain
apiKey: process.env.API_KEY, // your key with that provider, as before
fetch: ai.createVerifyingFetch({ api, service }), // checks every receipt; a bad one throws
})
const r = await client.chat.completions.create({ model: 'gpt-4o-mini', messages: [{ role: 'user', content: 'Hello' }] })
console.log(r.choices[0].message.content)
外部プロバイダーはまだオンチェーンに料金表を公開していないため、これは examples/ai-proxy のリファレンスサイドカー(ローカル開発モード)に対して実行しました。実際のプロバイダーでは名前だけを変更します。
Claude Code と Codex は、レシートを自分で読み取ることができません。ローカルの検証プロキシを実行し、接続先として指定してください。
# Terminal 1 (it keeps running). 42.1013.tape is an example name: put your AI provider's TapeOut name here
npx -y --package=https://github.com/BruceLanLan/tapeapi/releases/download/v2.4.0/tapeapi-sdk-2.4.0.tgz tapeapi-verify 42.1013.tape
# Terminal 2, macOS or Linux
ANTHROPIC_BASE_URL=http://127.0.0.1:8790 claude
OPENAI_BASE_URL=http://127.0.0.1:8790/v1 codex # Codex (or base_url in config.toml)
# Terminal 2, Windows PowerShell
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:8790"; claude
$env:OPENAI_BASE_URL="http://127.0.0.1:8790/v1"; codex
tapeapi-verify は、使用した解決方法を示す resolution: 行を出力します。--no-conform を指定すると、1.x の解決方法が使われます。そのまま実行すると、tapeapi-verify 42.1013.tape は停止します。この名前は例であり、その名前で公開されているサービスはありません。プロバイダーを使わずにレシートの検証を最初から最後まで確認するには、このリポジトリをチェックアウトし、ルートで依存関係を一度インストールしてから、ローカルトライアルを実行してください(キー不要、回路不要、費用不要)。
git clone https://github.com/BruceLanLan/tapeapi.git && cd tapeapi
npm ci --no-audit --no-fund
node examples/relay-trial/trial.mjs
AI サービスを自分で実行しますか? ゼロから稼働まで をご覧ください。プロバイダーのチェッカー tapeapi-doctor(実験的)も同じリリースパッケージに含まれています。
MCP。 同じ8つの読み取りが https://api.tapeapi.fun/mcp のツールとして利用でき、すべての結果に署名付きレシートが付いています。
claude mcp add --transport http tapeapi https://api.tapeapi.fun/mcp
インストールは一切不要です。プレイグラウンド では、ブラウザー上で SDK が動作します。
全体の仕組み
flowchart LR
client["Client<br/>official SDK, Claude Code, Codex"]
sidecar["Signing sidecar or MCP proxy<br/>(you run it)"]
upstream["Your API or MCP server"]
chain[("On chain: BNB Chain, X Layer, Base<br/>identity, manifest, price table, signer delegation")]
client -- "request" --> sidecar
sidecar -- "same bytes" --> upstream
sidecar -- "answer + signed receipt" --> client
sidecar -. "published once by the holder" .-> chain
client -. "verify against" .-> chain
| レイヤー | 内容 | 仕様 |
|---|---|---|
| アイデンティティ | TapeOut 回路の ERC-6551 コンテナです。回路を保有する人がサービスを所有します。回路を譲渡すると、サービスも一緒に移転します。TAP-10 と TAP-11 §2 の定めに従って解決されます。 | TAPI-20、TAP-11(ドラフト) |
| マニフェスト | コンテナのオンチェーンサイトにある .well-known/tapeapi.json です。エンドポイント、メソッド、AI 料金表、MCP ツール定義のハッシュ、署名鍵、および保有者による鍵の委任が記載されています。 | TAPI-20 |
| 署名付きの応答とレシート | すべての応答に署名が付与され、リクエストに紐付けられます。AI 呼び出しには使用レシートが発行されます。 | TAPI-21、TAP-13(ドラフト) |
| チャネルとグループ | リレーまたは ChannelBus を介したエンドツーエンド暗号化です。中継者に見えるのは暗号文のみです。 | TAPI-26 v2、TAPI-27 v2 |
レシートが証明すること、証明しないこと
レシートは、誰が回答したか(回路の所有者がオンチェーンで委任した鍵)、どのリクエストバイトに対して、 どのレスポンスバイトを返したか、そしてどの利用量と料金が申告されたかを、オンチェーンの料金表に基づいて証明します。
実際にどのモデルが動作したかは証明しません。プロバイダーが、より安価なモデルの回答を、より高価なモデルのものとして表示する可能性があります。署名が加えるのは、説明責任です。レシートは否認できないため、 スポットチェックプローブを実行して結果を公開する人は、証拠を残すことになります。
ステータスとコミットメント
- 稼働中、無料、登録不要: 公開サービス
api.tapeapi.fun(8 メソッド)、その MCP エンドポイント、公開リレーrelay.tapeapi.fun(relaySend、relayHandshake、relayRecv)、 ChannelBus、およびウェブサイトの コンソール、レシートチェッカー、 プレイグラウンド、ステータスページ。 - 利用可能、自分で実行: AI 署名サイドカーと new-api パッケージ、MCP 署名プロキシ、
tapeapi-verify、tapeapi-mcp、スポットチェックプローブ、SDK の 1 回の呼び出しによるグループ配信(deliverGroupUpdate)。 - 実験段階、未デプロイ: 有料呼び出しとエスクロー(TAPI-22、§3.6 に米ドル建ての価格と BEM での支払いを記載)、サービスディレクトリ、回路検証済みメソッド(TAPI-25)。
- 実験段階、SDK 内: コンテナーエージェント(
@tapeapi/sdk/agent:1.7 以降でフェーズ 0、2.0 以降で制限付きエージェント、ローカルチェーンのみ)とレビュー(@tapeapi/sdk/review、2.0 以降)。これらは 2.x の互換性保証の対象外です。 - 2.0 が保証すること: 2.0 のドキュメントに準拠して書かれたコードは、すべての 2.x リリースで引き続き動作します。
@experimentalまたは@internalとマークされたものを除き、すべて Stable です。これにはdata.status、SiteStatus、svc.conformが含まれます。これらは Draft に従います。TAP-10 と TAP-11 は Draft であるため、デフォルトでは、その文面に沿って 2.x のマイナーリリースでルールを 1 つ追加し、制約を緩和するか新しいステータス名を導入します。制約を強化する場合は、まずオプションのプロファイルとして導入し、3.0 でデフォルトにします。conform: falseとlabels: 'v1'は非推奨ですが、2.x のすべてのリリースで維持されます。1.x は 2.0.0 のリリース後 6 か月間、セキュリティ修正を受け取ります。1.x からの移行については、 2.0 へのアップグレードをご覧ください。 - 行わないこと: サイドカーを誰かのためにホストすること(ユーザーの API キーを扱うため、自分で実行します)、トークンの発行、上流プロバイダーの禁止事項や地域制限を回避する支援(TapeAPI は上流プロバイダーの規約に従うプロバイダー向けです)。
- チェーン: すべての用途に BNB Chain(chainId 56)を使用し、決済を実行するチェーンもここだけです。X Layer(196)と Base(8453)は読み取り専用です。ID、解決、レシート、MCP チェックに使用します。X Layer には独立した RPC オペレーターが 2 社しかなく、2.0 のデフォルトでは、厳密な読み取りのたびに両者の応答が必要です。
- 第三者による監査はありません。 テストは、JavaScript テストスイート(
npm test)、コントラクトテスト(forge test)、およびすべての署名、ハッシュ、エンコーディングを対象とする独立した Python 実装(python3 spec/vectors/verify.py)です。これら 3 つは、プッシュのたびに CI で実行されます。2.4.0 のリリースコミットでは、このリポジトリでnpm testを実行すると、JavaScript テスト 2,230 件が実行されます。2,227 件が成功し、3 件がスキップされ、失敗はありません。
プライバシーについて率直に
- 保護される情報: チャネルとグループのコンテンツ(エンドツーエンド暗号化)。AI の受領証にはハッシュのみが含まれます。また、SDK または
tapeapi-verifyを通じて送信されたリクエストには、128 ビットのランダムな空白が付加されるため、短いプロンプトをそのハッシュから確認することはできません。MCP 検証リンクには、デフォルトでハッシュのみが含まれます。SDK のbusPrivacyReader(実験的)は ChannelBus 全体を読み取り、ローカルでフィルタリングするため、ノードからあなたのルームを見ることはできません。 - 隠されない情報: サービスは処理対象の情報(リクエスト、IP アドレス、API キー)を認識します。パブリック RPC ノードは、あなたの IP アドレスと、確認しているサービスを認識します。リレーとチェーンは、チャネルのルーム、タイミング、サイズを認識します。将来の支払いを含め、チェーン上の情報はすべて公開されます。
allChainsは 2.0 でもデフォルトで無効です。有効にすると、他のチェーンのパブリックノードにクエリが送信されるためです。このため、processor contract#ID 文字列はデフォルトで拒否されます(TAP-11 §2.1 に対する既知の例外です。2.0 へのアップグレードを参照してください)。
手数料
必須のプロトコル手数料はありません。デフォルトでは 1% の保守費用が設定されていますが、プロバイダーはこれを無効にできます。オペレーターには手数料を切り替える機能はありません。この費用が適用されるのは有料チャネルの精算時のみで、プロバイダーの取り分から支払われるため、ユーザーの価格は変わりません。プロバイダーは、コントラクトの上限である 20% まで、より高い割合を設定することもできます。有料呼び出しのエスクローはデプロイされていないため、現在、呼び出しに料金は発生しません。AI プロバイダーはこれまでどおり、オフチェーンでユーザーに請求します。マニフェストに記載された価格は公開されますが、精算はされません。監査に回るエスクローは、まず BEM を保有し、必要に応じて USDT ペッグと WBNB を保有する計画です(TAPI-22 §3.5)。docs/FEES.mdを参照してください。
仕様
以下は TapeAPI 独自の仕様であり、TAP ではありません。TapeOut は、標準をエディターが採番する TAP として、TAP-01 に基づき TapeOutProtocol/TAPs で公開しています。その一部について、14 件の TAP ドラフトを提出しました。内訳は、2026-09-30 と 2026-10-01 に 8 件、2026-10-04 と 2026-10-05 にコンテナーエージェント形式に関する 2 件、2026-10-08 に 2 件(支払いバウチャー、レビュー)、2026-10-13 に 2 件(エスクローチャネル、制約付きエージェント)です。うち 2 件は Draft としてマージされ(TAP-11、TAP-13)、12 件はオープンなプルリクエストです。このうち 3 件(#54、#59、#60)は現在ドラフト PR のため、エディターの審査待ちキューには入りません。さらに 1 件の Information ドラフトである #61(プライバシーマップ)も提出済みで、現在ドラフト PR としてオープンです。エディターが審査するのは形式であり、内容の是非ではありません(TAP-01 §4)。したがって、Draft にマージされても採用されたことにはなりません。TAPI-20 から TAPI-27 まで(TAPI-26 と TAPI-27 のバージョン 2 を含む)は、2.x の互換性の約束の基盤として引き続き有効です。
| 私たちの仕様 | ドラフト(プルリクエスト) | 2026-10-21 時点の状況 |
|---|---|---|
| TAPI-20(コア:§3.1 から §3.4、§3.6、§3.10) | サービスの識別情報とマニフェスト、#8 | 2026-10-01 に TAP-11 としてマージ済み、ドラフト。2.0 のデフォルトは §2 の記述どおりに解決されます |
| TAPI-21 | 署名付きレスポンス、#10 | 2026-10-04 に TAP-13 としてマージ済み、ドラフト |
| TAPI-26(v2) | プライベートチャネル、#12 | オープン。編集者の要望に沿った tape-channel/ ラベルを使用し、2.0 のデフォルトです |
| TAPI-20 §3.8、TAPI-21 | MCP ツールのバインディング、#16 | オープン。必要なドラフト(TAP-11、TAP-13)はドラフトとしてマージ済みです |
| TAPI-23 | 独立したサービスからのアテステーション付き読み取り、#18 | オープン。必要なドラフト(TAP-11、TAP-13)はドラフトとしてマージ済みです |
| TAPI-27(v2、フォーマット 1 のみ) | プライベートグループ、#20 | オープン。編集者の要望に沿った tape-group/ ラベルを使用し、2.0 のデフォルトです |
| TAPI-20 §3.9、TAPI-21 §3.5 | AI 利用レシート、#26 | オープン。#25 での編集者の回答を受けて改訂済みです |
| TAPI-20 §3.2(証明モード、参考情報) | 証明検証済みの読み取り、#28 | オープン |
| コンテナエージェントの要件とタスクメッセージ、フェーズ 0(TAPI 仕様なし) | #47 | オープン |
| サービスマニフェストのエージェントメンバー(#41 のリスティング部分) | #49 | オープン |
| TAPI-22 §3.1、§3.2、§3.6 | 支払いバウチャー:価格は米ドル、決済は BEM、#52 | オープン |
TAPI 仕様なし(@tapeapi/sdk/review) | コンテナ間の証拠に基づくレビュー、#54 | オープン(ドラフト PR) |
| TAPI-22 §3.3 から §3.5(エスクローインターフェース) | コンテナサービスへの支払い用エスクローチャネル(標準)、#59 | オープン(ドラフト PR) |
| コンテナエージェント、フェーズ 1:制約付きエージェント(TAPI 仕様なし) | エスクローチャネルによって適用されるコンテナエージェントの要件、フェーズ 1、#60 | オープン(ドラフト PR) |
| TAPI 仕様なし(情報提供用ドラフト) | コンテナサイト、メッセージ、サービスのプライバシーマップ(情報提供)、#61 | オープン(ドラフト PR) |
| TAP-11 の編集 | verifyingContract に関するセキュリティ注記 #35 と中国語訳 #36;TAP-26/ ラベルへの言及の削除 #51;priceBEM が呼び出しごとの上限であること、およびエスクローのチェーンに関する 2 文 #53;resolved で終わるメインネットのベクトルを含む、最新の状態に更新されたリファレンス実装 #55 | #35 と #36 は 2026-10-04 にマージ済み;#51、#53、#55 は編集者の対応待ちです |
| TAP-13 の編集 | 予約名に関する文言、#46;リファレンス実装のセクションにある古い文 #56 | #46 は 2026-10-05 にマージ済み;#56 は編集者の対応待ちです |
TAPI-22(§3.1 から §3.6 以外)、TAPI-24、TAPI-25 はまだ提出されていません。編集者が他のドラフトに番号を割り当てたら、それらへの参照名を変更します。
| 仕様 | タイトル | ステータス |
|---|---|---|
| TAPI-1 | Stable(vN)を含む、TapeAPI のドキュメント処理とステータス | Draft |
| TAPI-20 | AI 価格表とマルチチェーン名を含む、サービス ID とマニフェスト | Stable(v1);§3.5 Experimental |
| TAPI-21 | AI 利用レシートを含む、署名付きレスポンスエンベロープ | Stable(v1) |
| TAPI-22 | 従量課金:バウチャーとエスクロー;カストディ資産(§3.5、BEM を最初にサポート)および BEM で支払う米ドル建て価格(§3.6) | Experimental |
| TAPI-23 | 独立したプロバイダーによる相互検証を伴う、アテステーション付き読み取り | Stable(v1) |
| TAPI-24 | インテント RFQ | Withdrawn |
| TAPI-25 | 回路検証済みメソッド | Experimental |
| TAPI-26 v2 | コンテナ間のプライベートチャネル、tape-channel/ ラベル | Stable(v2)、2.0 以降の SDK のデフォルト |
| TAPI-27 v2 | 最大 32 個のコンテナによるプライベートグループ(Experimental Format 2 では最大 128 個)、tape-group/ ラベル | Stable(v2)、2.0 以降の SDK のデフォルト |
| TAPI-26、TAPI-27 | 2 つの仕様のバージョン 1:凍結された TAP-26/… および TAP-27/… ラベルを使用した同一の仕様 | Stable(v1);2.x では labels: 'v1'(非推奨) |
仕様は英語と日本語の併記です。英語版が正式なものです。**TAPI-1 および TAPI-20 から TAPI-27 は、TAP 番号ではなく TapeAPI 独自のドキュメント名です。**バージョン 1 の TAP-26/… および TAP-27/… ラベルのように、旧名称を含む凍結済みの定数は変更されません。バージョン 1 は Stable(v1)のままとなり、バージョン 2 が Stable になってから 12 か月が経過する前に廃止されることはありません(TAPI-1 §4.1)。
リポジトリ
sdk/ @tapeapi/sdk(解決、呼び出し、検証、AI レシート、チャネル、グループ、MCP、コンテナエージェント、レビュー)・
server/ @tapeapi/server(プロバイダー、AI サイドカー、MCP プロキシ)・
contracts/(ChannelBus、Experimental のエスクローとディレクトリ)・
spec/(仕様、テストベクトル、Python 検証ツール)・examples/・
conformance/・site/(ウェブサイト)・docs/。
コントラクトアドレスは概要に記載されています。
セキュリティ上の問題は、SECURITY.mdに記載されている方法で非公開に報告してください。Issue やプルリクエストを歓迎します。CONTRIBUTING.mdと行動規範をご確認ください。
ライセンス
コードは MIT ライセンスです(LICENSE):contracts/、sdk/、server/、examples/、conformance/、scripts/、site/。
spec/ の仕様は CC0-1.0 ライセンスです(LICENSE-SPEC)。
クレジット
TapeOut のサービスレイヤーというアイデア、「DeWEB はウェブサイト、TapeSend はメッセージング、TapeAPI はサービス」は、**@Theairresearch**によるものです。2026-10-05 から、第三者に支払う直接の現金費用を差し引いた TapeAPI の四半期収益の 10% を、恒久的に同氏に還元します(定義は BUSINESS.md を参照)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。