mcpField
R
Receipt — sign an agent's work, verify it offline

Receipt — sign an agent's work, verify it offline

リモート
github.com/ecstaticaセキュリティ03 日前に更新
リポジトリ

Receipt — sign an agent's work, verify it offline について

Receiptは、エージェントや購入者が成果物に署名し、オフラインで検証するためのPythonツールです。Ed25519署名でファイルのハッシュとタスク、エージェントの情報を結び付け、ネットワークなしで改ざんを検出します。

主な機能

  1. 01Ed25519署名付きレシートの発行
  2. 02レシートとファイルハッシュのオフライン検証
  3. 03署名対象フィールドの変更検出
  4. 04正規化JSONによる署名

活用シーン

  1. 01納品ファイルとレシートの一致確認
  2. 02ネットワークなしでのレシート確認
  3. 03ファイルやレシートの改変検出

MCP 対応

stdioのMCPサーバーとして、MCPクライアントに `issue_receipt` と `verify_receipt` ツールを提供します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://receipt.whirlwindcorp.com/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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
mcpbggbank-receipt.mcpb

ツール

詳細

receipt

エージェントが行った作業に署名します。誰でもオフラインで検証できます。

レシートは、エージェント、タスク、ファイルを Ed25519 署名で結び付けます。検証にアカウント、チェーン、ネットワーク、または当方の許可は必要ありません。ファイルの文字を1つ変えるか、レシートのフィールドを1つ変えると、検証に失敗します。

これはエージェント経済における、最小限の実用的なものです。支払いの仕組みは、証明の仕組みより先に登場しました。x402 では1億3,800万件の支払いが行われましたが、エージェントの仕事の大半は、資金提供を受けておらず、独立した第三者による評価も受けていません。

インストール

git clone https://github.com/ecstatica/ggbank-receipt
cd ggbank-receipt
python3 -m pip install --user cryptography

cryptography 以外の依存関係はありません。Python 3.10 以降が必要です。

使い方

# 1. your agent's key (Ed25519, private key mode 0600)
python3 receipt.py keygen --out ~/.agent.key

# 2. sign a receipt over the artifact the agent delivered
python3 receipt.py issue \
  --key ~/.agent.key \
  --artifact report.pdf \
  --task q-1042 \
  --agent VOID-9 \
  --amount 25 \
  --out q-1042.receipt.json

# 3. anyone can verify it, offline
python3 receipt.py verify --receipt q-1042.receipt.json --artifact report.pdf
OK   signature valid · issuer QRs56MmYfzwtOAih…
OK   artifact matches 04002a7e5527bbad…
     deliver · VOID-9 · task q-1042 · 25.0 GG · 2026-10-25T11:56:24Z

ファイルと一緒にレシートを送ります。購入者はコマンドを1つ実行するだけで、そのファイルがエージェントの生成したものであり、その後変更されていないことを確認できます。

証明できること、できないこと

証明できること: この鍵が、指定されたフィールドを含むこのアーティファクトのハッシュに、この時点で署名したこと、そしてその後何も変更されていないことです。

証明できないこと: 作業の品質や、その鍵が特定の人物のものであることです。品質は別途判断するものであり、本人確認も別途主張するものです。

MCP サーバーとして使う(エージェントが実際に呼び出す方法)

mcp_server.py は、JSON-RPC over stdio を使用します。これは Claude Code、Cursor、Codex、Hermes、およびほとんどのエージェントフレームワークがすでに使っているプロトコルです。ツールは2つです:issue_receipt、verify_receipt。ネットワークは不要で、依存関係は cryptography のみです。

{"mcpServers": {"receipt": {"command": "python3", "args": ["/abs/path/mcp_server.py"]}}}
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"issue_receipt",
 "arguments":{"artifact_path":"/tmp/report.pdf","agent":"VOID-9","task":"q-1042","amount_gg":25}}}
→ {"ok": true, "receipt": {...}}

往復検証済みです:issue_receipt → verify_receipt は ok: true を返します。金額を変更すると、ok: false, reason: "signature: InvalidSignature" を返します。

レシートに含まれる内容

{
 "spec": "ggbank.receipt/1",
 "verb": "deliver",
 "agent": "VOID-9",
 "task": "q-1042",
 "artifact": {"name": "report.pdf", "sha256": "04002a7e…", "bytes": 18422},
 "amount_gg": "25.000000",
 "fee_gg": "0.125000",
 "issued_at": "2026-10-25T11:56:24Z",
 "issuer": "<base64 public key>",
 "nonce": "…",
 "signature": "<base64>"
}

正規化された JSON(キーをソートし、空白を含まない)に署名するため、署名対象のバイト列はどの言語でも再現できます。金額フィールドには浮動小数点数ではなく、10進数の文字列を使用します。

改ざん検知テスト済み

python3 receipt.py verify --receipt tampered.json     # FAIL signature: InvalidSignature
python3 receipt.py verify --receipt good.json --artifact edited.pdf
                                                      # FAIL artifact: hash mismatch

ライセンス

MIT。

コメント

MCP は初めてですか?

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

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