POPCORN Witness Verifier について
POPCORN Witness Verifierは、署名付きの時刻情報やタスクのレシートを検証する読み取り専用のMCPサーバーです。POPCORN-WITNESS/2.0のエンベロープ、期待するペイロード、ノンス、時間範囲、レシートチェーンをローカルで確認できます。
主な機能
- 01POPCORN-WITNESS/2.0エンベロープの検証
- 02署名、ダイジェスト、ノンス、時刻の確認
- 03レシートチェーンのローカル検証
- 04ペイロードの正確なバイト列のローカルハッシュ
- 05ライブカタログと公開鍵の取得
活用シーン
- 01他のエージェントから届いたレシートの確認
- 02タスク証拠と期待するバイト列の照合
- 03期限や認可時間枠の検証
- 04過去のレシート検証のオフライン再現
MCP 対応
MCPクライアントに5つの無料ツールと、支払いに対応する2つのツールを公開します。検証とハッシュ計算はローカルで行い、時刻取得と証人リクエストはドライランまたは個別承認後に実行できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcpclaude mcp add --transport http violetclaire-popcorn-tain-verifier https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcp{"mcpServers":{"violetclaire-popcorn-tain-verifier":{"type":"http","url":"https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcp"}}}Cursor で開く{"servers":{"violetclaire-popcorn-tain-verifier":{"type":"http","url":"https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"violetclaire-popcorn-tain-verifier":{"type":"http","url":"https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcp"}}}{"mcpServers":{"violetclaire-popcorn-tain-verifier":{"serverUrl":"https://popcorn-tain-verify-mcp-v2.violetherod.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Briarwood AI / POPCORN MCP サーバー
RFC 3161、FreeTSA、OpenTimestamps、信頼できるタイムスタンプ、存在証明、認可の有効期限、署名付き実行レシート、または独立した検証については、認可の有効期限前にアクションが行われたことを証明するから始めてください。
Briarwood AI が提供する、独立したエージェント間で利用できる読み取り専用の時刻およびタスクの証拠です。POPCORN は https://767-2676.com で、署名付きの時刻とダイジェストのチェックポイントを提供します。
ウォレットなしでまず試す
sample.mjs を保存して読み、Node.js 20 以降で node sample.mjs を実行してください。このスタンドアロンのサンプルには、who を含む正確な8行のスケジュール、その SHA-256 ダイジェスト、実際の署名付きレシートが含まれています。オフラインで動作し、who に1バイトの変更があると拒否します。
プレーンテキストの契約と 完全なパケットは、ローカルに保管できます。 レシートは過去の証拠です。新しい判断には、新しい時刻を取得してください。
この公開リポジトリから現在のソースを実行します。
git clone https://github.com/violetclaire/popcorn-temporal-anchor.git
cd popcorn-temporal-anchor/packages/mcp
npm ci
npm run build
node dist/packages/mcp/src/index.js --sample
バージョン 0.1.4 が npm に公開された後は、次を実行してください。
npx -y @violetclaire/[email protected] --sample
評価では、保守されている検証ツールを使用して、8行のタスクスケジュールと、過去に確定済みのレガシーレシート2件を確認します。署名が有効であること、タスクの時間枠を過ぎたチェックポイントには STOP、時間枠内のチェックポイントには TIME_CHECK_PASSED を返し、それぞれに対する1バイトの変更を拒否します。各結果では authorization_granted: false が維持されます。このサンプルにアカウント、ウォレット、元のタスクデータは必要ありません。npm によってパッケージがダウンロードされる場合がありますが、検証自体は完全にオフラインで実行されます。
接続済みの MCP クライアント内で {} を指定して popcorn_sample を呼び出すと、同じ結果が得られます。公開ソースへのリンクにより、別の開発者も検証を繰り返せます。バンドルされている過去の鍵は、サンプルの再現用です。実際のタスクでは、独立して信頼された発行者の鍵が必要です。古いレシートは最新の時刻情報ではありません。このオフラインサンプルでテストできるのは、過去の TAIN 導入前のレシートのみです。サンプルに合格しても、現在デプロイされている TAIN 2.0 サービスのテストにはならず、統合準備が整っていることも示しません。
実際のタスクで使う
| 必要なもの | ツール | ローカルに保持されるもの |
|---|---|---|
| 期限または有効期限に使用する、新しい署名付き時刻参照 | popcorn_time | タスクと判断 |
| 指定時刻における、特定バージョンのタスクの証拠 | popcorn_hash、続いて popcorn_witness | 生のタスクバイト列。証人に送られるのはダイジェスト、nonce、任意の先行ダイジェストのみです |
| 別のエージェントから受け取った証拠の確認 | popcorn_verify | レシート、信頼された鍵、ペイロード、検証 |
| TAIN 2.0 のウィットネスレシートの確認 | popcorn_verify_v2 またはローカル CLI の verify-v2 | 正確な期待バイト列と、独立して信頼された鍵 |
これらの用途は、エージェントプロバイダーや業界を問わず利用できます。既存の認可済みの引き渡し手段を通じて、レシートと関連する正確なバイト列を共有し、受信側のシステムで検証してください。オフライン検証に、元のエージェントプロバイダーのアカウントは必要ありません。各参加者が何をするかを決定します。
このソースチェックアウトでは、5つの無料ツールと2つの x402 ツールが公開されています。x402 ツールはデフォルトでドライランです。個々のツール呼び出しに approve_payment: true が含まれていない限り、支払いはできません。ウォレットキーはサーバープロセスの環境変数 EVM_PRIVATE_KEY からのみ読み取られます。ツールのパラメーターとして受け付けることはありません。
これは時計であり、封印です。返金、認可、資金の保留は行いません。
npx で実行する
公開済みのパッケージをインストールして実行します。
npx -y @violetclaire/popcorn-mcp
Node.js 20 以降が必要です。
プログラムから利用できるコア機能
サポート対象の @violetclaire/popcorn-mcp/core エクスポートでは、stdio
サーバーと同じローカルハッシュ処理、オフライン検証、有料クライアント機能を利用できます。
import {
popcornHash,
popcornVerifyWitnessChain,
popcornWitness,
} from "@violetclaire/popcorn-mcp/core";
popcornVerifyWitnessChain は、previous_attestation_digest が null のレシートから始まる、時系列順のレシートを受け取ります。各レシートと署名を一度ずつ検証し、各リンクを直前のレシートの正確な署名対象ペイロードバイト列と照合してから、検証済みエントリーとヘッドダイジェストを返します。無料でローカルに実行され、ネットワークリクエストは送信しません。
ツール
popcorn_sample
2 つの公開レシート例と、それらの改ざん検出テストをローカルで実行します。過去の証拠を再現可能な形で評価でき、ネットワークリクエストも支払いも発生しません。入力:{}。
これらの過去のレシートは、TAIN 2.0 の適合性テストではありません。
popcorn_verify_v2
POPCORN-WITNESS/2.0 署名付きエンベロープ、必須の TAIN フィールド、指定されたペイロードダイジェストとノンス、および署名付き時間間隔を検証します。このローカル MCP ツールと popcorn-mcp verify-v2 <vector.json> は、同じ検証機能を呼び出します。
verify/test-vectors/interface-parity-v2/ の固定された肯定・否定ベクターは、npm run check で両方のインターフェイスを通じて実行され、結果または理由に不一致があるとチェックは失敗します。
レスポンス全体、期待する SHA-256 ペイロードダイジェスト(正規形式のパディングなし base64url)、期待するノンス、およびレシートとは独立して取得した発行者キーを指定してください。ローカル CLI と stdio MCP では、ダイジェストの代わりに正確なペイロードバイト列を expected_payload_base64url として指定することもできます。リモート HTTP MCP ではダイジェストのみを受け付け、前のレシートについても同様です。そのため、プライベートなペイロードバイト列を呼び出し元の外部に出す必要はありません。チェーン化されたレシートでは、前のレシートのレスポンス、JWKS、検証入力を含む previous_receipt を指定してください。リンクは最大 8 つまで指定できます。呼び出し元から提供されたキーだけでは発行者の身元は確立されません。また、この検証機能はオンチェーン決済を証明したり、権限を付与したりするものではありません。
popcorn_catalog
サービスのライブカタログ、公開 JWKS、公開スキーマを取得します。無料で、支払いは発生しません。
入力:
{}
popcorn_hash
バイト列をローカルで正確にハッシュし、SHA-256 ダイジェストとバイト長を返します。無料でローカルに実行され、ネットワークリクエストは送信しません。
次の入力形式を 1 つだけ指定してください:
{ "payload_text": "exact UTF-8 text" }
{ "payload_base64url": "ZXhhY3QgYnl0ZXM" }
popcorn_verify
呼び出し元から提供されたキーと期待値を使用して、POPCORN の時間レシートまたは witness レシートをローカルで検証します。無料でローカルに実行され、支払いは発生しません。
witness レシートの場合:
{
"receipt_type": "witness",
"response": { "witness_receipt": {}, "witness_attestation": {}, "payment_status": "settled" },
"jwks": { "keys": [] },
"verification": {
"expected_nonce": "<43-character-base64url>",
"expected_payload_base64url": "<exact-payload-bytes>",
"expected_node_id": "767-2676.com",
"max_clock_accuracy_radius_ms": 10000
}
}
expected_payload_text、expected_payload_base64url、expected_payload_digest のいずれか 1 つだけを指定してください。
previous_attestation_digest が null でない場合は、次の内容を verification の下に再帰的に追加してください:
{
"previous_receipt": {
"response": { "witness_receipt": {}, "witness_attestation": {}, "payment_status": "settled" },
"jwks": { "keys": [] },
"verification": {
"expected_nonce": "<predecessor-nonce>",
"expected_payload_digest": "<predecessor-payload-digest>"
}
}
}
検証機能は、まず前のレシートを検証します。次に、前のレシートのコンパクト JWS ペイロードセグメントを base64url デコードして得られる正確なバイト列をハッシュし、そのダイジェストを previous_attestation_digest と照合します。
時間レシートの場合、verification.observation には既存のオフライン検証機能で必要となる単調タイマーの値を指定します。省略可能な verification.policy には execution_window_utc を指定できます。
popcorn_time
GET /v1/time をリクエストします。デフォルトの呼び出しでは、無料のドライランが実行されます:
{
"freshness_ms": 30000,
"approve_payment": false
}
HTTP 402 の支払い条件と、支払いが発生する場合に送信される正確なリクエストを返します。1 回の支払いを承認するには、その特定の呼び出しで approve_payment を true に設定する必要があります。
popcorn_witness
POST /v2/receipt をリクエストします。既存のインテグレーションでは、引き続き POST /v1/receipt を利用できます。デフォルトの呼び出しでは、無料のドライランが実行されます:
{
"digest": "<43-character-sha256-base64url>",
"nonce": "<43-character-random-base64url>",
"previous_attestation_digest": null,
"approve_payment": false
}
省略可能な前のダイジェストは、前のコンパクト JWS の署名付きペイロードをデコードして得られる正確なバイト列を SHA-256 でハッシュしたものです。コンパクト JWS 文字列全体のダイジェストではありません。
どちらの有料ツールも、支払いを Base 上の正確に $0.001 USDC、公開されている USDC コントラクト、および POPCORN が公開している payTo に固定します。チャレンジに変更があると、安全側に倒して失敗します。有料リクエストが成功すると、決済トランザクションハッシュと server_processing_duration_ms が結果に含まれます。
ウォレット環境
有料の呼び出しには、次が必要です。
EVM_PRIVATE_KEY=0x<dedicated-32-byte-Base-payer-key>
残高を少額にした専用の支払者を使用してください。この値をコミットしないでください。無料ツールとすべてのドライランは、この値がなくても動作します。
Claude Desktop
Claude Desktop の設定にある mcpServers オブジェクトに、このサーバーを追加してください。
{
"mcpServers": {
"popcorn": {
"command": "npx",
"args": ["-y", "@violetclaire/popcorn-mcp"]
}
}
}
この設定では、すべての無料ツールとドライランを利用できます。有料の呼び出しを行うには、EVM_PRIVATE_KEY を含む環境から Claude Desktop を起動するか、非公開のローカル設定に env オブジェクトを追加してください。このキーをツール呼び出しやチャットに貼り付けないでください。
Claude Code
claude mcp add --transport stdio popcorn -- npx -y @violetclaire/popcorn-mcp
有料の呼び出しが必要な場合に限り、Claude Code の起動環境に EVM_PRIVATE_KEY を設定してください。有料の呼び出しには、毎回 approve_payment: true が必要です。
ローカル開発
packages/mcp から実行します。
npm install
npm run check
npm start
パッケージのビルドには、リポジトリに既存の TypeScript 検証ツールが公開ファイルに含まれます。ランタイム依存関係は通常の npm 依存関係のままです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。