POPCORN MCP

io.github.violetclaire由 GitHub 帳號 violetclaire 發布v0.1.6更新於 Oct 29, 2026

Witness layer for agents: signed receipts binding a fingerprint to a witnessed time. $0.001.

已驗證Streamable HTTP可網頁執行金融安全與監控

概覽

AI 產生的概覽

POPCORN MCP 讓助理取得帶簽章的目前時間與 SHA-256 摘要憑證,並可離線驗證這些憑證,支援遠端託管或本機執行。

可以做什麼
  • 讀取即時目錄、已發布的驗證金鑰與公開結構定義
  • 對精確位元組計算 SHA-256 摘要與位元組長度
  • 申請帶簽章的目前時間證據,並以隨機數見證某個摘要
  • 用呼叫端提供的金鑰與預期值離線驗證時間或見證憑證
  • 依固定簽發者網址取得的金鑰驗證 TAIN 2.0 證據
  • 執行內建的歷史範例憑證檢查與竄改對照
適用情境
適合需要證明某個精確版本在特定時間已存在、確認某項操作是否發生在授權到期之前,或驗證其他代理轉來的簽章憑證的情境。免費工具與試跑足以評估;付費呼叫僅用於取得新的憑證。
執行需求
可使用遠端 HTTP 端點,或透過 npx 以本機 stdio 程序執行,後者需要 Node.js 20 或更新版本。免費工具與離線驗證不需帳號。付費呼叫需在伺服器程序環境中以 EVM_PRIVATE_KEY 提供專用的 Base 付款金鑰,並在 Base 上持有少量 USDC。
安裝前請注意
付費工具會實際花錢:每份新憑證在 Base 上花費 0.001 USDC,且需在該次呼叫中把 approve_payment 設為 true 並提供呼叫端簽署的付款簽章,不會自動重試。EVM_PRIVATE_KEY 是從環境讀取的钱包金鑰,應使用餘額很少的專用付款帳戶,切勿貼到工具呼叫或聊天中。送到遠端雜湊工具的文字會抵達伺服器,私密內容應在本機雜湊。憑證只是歷史證據而非目前時鐘,驗證也不確立簽發者身分、不證明鏈上結算,也不授予任何權限。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 POPCORN MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.violetclaire%2Fpopcorn-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "popcorn": {
      "type": "http",
      "url": "https://767-2676.com/mcp"
    }
  }
}

README

Briarwood AI / POPCORN MCP server

For RFC 3161, FreeTSA, OpenTimestamps, a trusted timestamp, proof of existence, authorization expiry, a signed execution receipt, or independent verification, start with Proving an action happened before an authorization expired.

Read-only time and task evidence from Briarwood AI, usable across independent agents. POPCORN supplies signed time and digest checkpoints at https://767-2676.com.

Try it first, without a wallet

At the hosted HTTP MCP endpoint, call popcorn_sample with {}. This free check verifies a real historical TAIN 2.0 receipt dated October 14, 2026: genuine.accepted: true, changed_digest_control.accepted: false, and passed: true. It requires no wallet and returns payment_sent: false, current_time_established: false, and authorization_granted: false. It does not independently establish issuer-key trust or check on-chain settlement.

The bundled npm sample below is a separate offline evaluation of historical pre-TAIN receipts.

Save sample.mjs, read it, then run node sample.mjs with Node.js 20 or newer. This standalone sample includes an exact eight-line schedule with who, its SHA-256 digest, and a real signed receipt. It runs offline and rejects a one-byte change to who.

The plain-text contract and full packet can be retained locally. The receipt is historical evidence. Fetch new time for a new decision.

Run the current source from this public repository:

bash
git clone https://github.com/violetclaire/popcorn-temporal-anchor.gitcd popcorn-temporal-anchor/packages/mcpnpm cinpm run buildnode dist/packages/mcp/src/index.js --sample

Run this release's bundled offline sample with:

bash
npx -y @violetclaire/[email protected] --sample

The evaluation checks the eight-line task schedule and two legacy, historically settled receipts with the maintained verifier. It returns valid signatures, STOP for a checkpoint after its task window, TIME_CHECK_PASSED for one inside its window, and a rejected one-byte change for each. Every result retains authorization_granted: false. The sample needs no account, wallet, or original task data. npm may download the package; the verification itself runs entirely offline.

With the npm package or this source checkout running as a local stdio MCP server, call popcorn_sample with {} for this bundled historical result. The hosted HTTP MCP endpoint runs the separate TAIN 2.0 sample described above. The bundled sample's public source links let another developer repeat the check. Its historical keys are for sample reproduction. A real task requires independently trusted issuer keys; an old receipt is not a fresh clock reading. This bundled offline sample tests historical pre-TAIN receipts only. Passing it does not test the currently deployed TAIN 2.0 service or establish integration readiness.

Use it for a real task

NeedToolWhat stays local
A fresh, signed time reference for a deadline or expirypopcorn_timeThe task and decision
Evidence of one exact task version at a stated timepopcorn_hash, then popcorn_witnessRaw task bytes; only the digest, nonce, and optional predecessor digest go to the witness
Check evidence received from another agentpopcorn_verifyThe receipt, trusted keys, payload, and verification
Check a TAIN 2.0 witness receiptpopcorn_verify_v2 or local CLI verify-v2Exact expected bytes and independently trusted keys

These uses apply across agent providers and industries. Share a receipt and the relevant exact bytes through your existing authorized handoff, then let the receiving system verify them. No account at the originating agent provider is required for offline verification. Each participant decides what to do.

This source checkout exposes five free tools and two x402 tools. The x402 tools are dry run by default. They cannot spend unless the individual tool call contains approve_payment: true. A wallet key is read only from EVM_PRIVATE_KEY in the server process environment. It is never accepted as a tool parameter.

This is a clock and a seal. It does not refund, authorize, or hold funds.

Run with npx

Install and run the published package with:

bash
npx -y @violetclaire/popcorn-mcp

Node.js 20 or newer is required.

Programmatic core

The supported @violetclaire/popcorn-mcp/core export exposes the same local hashing, offline verification, and paid client functions used by the stdio server:

ts
import {  popcornHash,  popcornVerifyWitnessChain,  popcornWitness,} from "@violetclaire/popcorn-mcp/core";

popcornVerifyWitnessChain accepts receipts in chronological order, starting with a receipt whose previous_attestation_digest is null. It verifies each receipt and signature once, checks each link against the prior receipt's exact signed-payload bytes, and returns the verified entries plus the head digest. It is free, local, and sends no network request.

Tools

popcorn_sample

Input: {}. The result depends on which server you connect to:

  • Hosted HTTP MCP at https://767-2676.com/mcp: verifies the historical October 14, 2026 TAIN 2.0 receipt and rejects the changed-digest control. It sends no payment and establishes neither current time nor authorization.
  • Local stdio MCP from npm 0.1.5 or this source checkout: checks the bundled eight-line schedule, two historical pre-TAIN receipt examples, and their tamper controls. It makes no network request or payment. These historical receipts are not a TAIN 2.0 conformance test.

popcorn_verify_v2

Verifies a POPCORN-WITNESS/2.0 signed envelope, required TAIN fields, exact expected payload digest and nonce, and the signed time interval. Both this local MCP tool and popcorn-mcp verify-v2 <vector.json> call the same verifier. The fixed positive and negative vectors under verify/test-vectors/interface-parity-v2/ run through both interfaces in npm run check and fail the check on any result or reason mismatch.

Provide the full response, expected SHA-256 payload digest as canonical unpadded base64url, the expected nonce, and issuer keys obtained independently of the receipt. The local CLI and stdio MCP also accept exact payload bytes as expected_payload_base64url instead of a digest; the remote HTTP MCP accepts only a digest, including for predecessor receipts, so private payload bytes need not leave the caller. Supply previous_receipt with its own response, JWKS, and verification inputs for a chained receipt, up to eight links. Caller-supplied keys alone do not establish issuer identity; this verifier does not prove on-chain settlement or grant authority.

popcorn_catalog

Fetches the live service catalog, published JWKS, and public schemas. It is free and sends no payment.

Input:

json
{}

popcorn_hash

Hashes exact bytes locally and returns the SHA-256 digest plus byte length. It is free, local, and sends no network request.

Provide exactly one input form:

json
{ "payload_text": "exact UTF-8 text" }
json
{ "payload_base64url": "ZXhhY3QgYnl0ZXM" }

popcorn_verify

Verifies a POPCORN temporal or witness receipt locally against caller-supplied keys and expected values. It is free, local, and sends no payment.

For a witness receipt:

json
{  "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  }}

Provide exactly one of expected_payload_text, expected_payload_base64url, or expected_payload_digest.

When previous_attestation_digest is non-null, add this recursively under verification:

json
{  "previous_receipt": {    "response": { "witness_receipt": {}, "witness_attestation": {}, "payment_status": "settled" },    "jwks": { "keys": [] },    "verification": {      "expected_nonce": "<predecessor-nonce>",      "expected_payload_digest": "<predecessor-payload-digest>"    }  }}

The verifier first verifies the predecessor. It then hashes the exact bytes obtained by base64url-decoding the predecessor compact JWS payload segment and compares that digest with previous_attestation_digest.

For a temporal receipt, verification.observation carries the monotonic timer values required by the existing offline verifier. An optional verification.policy can carry execution_window_utc.

popcorn_time

Requests GET /v1/time. The default call is a free dry run:

json
{  "freshness_ms": 30000,  "approve_payment": false}

It returns the HTTP 402 terms and the exact request that would be paid. To authorize one payment, the caller must set approve_payment to true in that specific call.

popcorn_witness

Requests POST /v2/receipt. POST /v1/receipt remains available to existing integrations. The default call is a free dry run:

json
{  "digest": "<43-character-sha256-base64url>",  "nonce": "<43-character-random-base64url>",  "previous_attestation_digest": null,  "approve_payment": false}

The optional predecessor digest is SHA-256 over the exact decoded signed payload bytes of the predecessor compact JWS. It is not a digest of the full compact JWS string.

Both paid tools lock payment to exactly $0.001 USDC on Base, the published USDC contract, and POPCORN's published payTo. A changed challenge fails closed. A successful paid result includes the settlement transaction hash and server_processing_duration_ms.

Wallet environment

Paid calls require:

text
EVM_PRIVATE_KEY=0x<dedicated-32-byte-Base-payer-key>

Use a dedicated payer with a small balance. Do not commit this value. The free tools and all dry runs work without it.

Claude Desktop

Add this server to the mcpServers object in Claude Desktop's configuration:

json
{  "mcpServers": {    "popcorn": {      "command": "npx",      "args": ["-y", "@violetclaire/popcorn-mcp"]    }  }}

That configuration supports all free tools and dry runs. For paid calls, launch Claude Desktop from an environment containing EVM_PRIVATE_KEY, or add an env object to its private local configuration. Never paste the key into a tool call or chat.

Claude Code

bash
claude mcp add --transport stdio popcorn -- npx -y @violetclaire/popcorn-mcp

Set EVM_PRIVATE_KEY in the environment that launches Claude Code only when paid calls are needed. Every paid call still requires approve_payment: true.

Local development

From packages/mcp:

bash
npm installnpm run checknpm start

The package build includes the repository's existing TypeScript verifier in the published files. Runtime dependencies remain normal npm dependencies.

來源:packages/mcp/README.md,提交 0c45f28

工具

7

popcorn_sample

Verify a real receipt for free

Check the public October 14 TAIN 2.0 receipt and a changed-digest control. No inputs, wallet, payment, or outbound request. Historical evidence, not a fresh clock. Bundled sample keys do not independently establish issuer identity.

無需輸入參數。

popcorn_catalog

Read the live catalog, offer, and published verification keys. Free; no payment.

無需輸入參數。

popcorn_hash

Hash public bytes on this remote server. Submitted text reaches the server: hash private work locally instead. Free; no onward request or payment.

輸入參數payload_textpayload_base64url

popcorn_verify

Verify a time or witness receipt using caller-trusted JWKS and expected values. Digest-only for witness payloads. No outbound request or payment. Caller keys do not establish issuer identity; a signature grants no authority.

輸入參數jwks必填response必填receipt_type必填verification必填

popcorn_verify_v2

Verify TAIN 2.0 evidence against keys fetched from the fixed POPCORN issuer URL. Caller jwks is replaced with published keys, including predecessors. Send a digest, never private work. Free; does not grant authority, establish current time, or verify settlement on chain.

輸入參數jwks必填response必填expected_nonce必填expected_node_idprevious_receiptexpected_payload_digest必填max_clock_accuracy_radius_ms

popcorn_time

Request signed current-time evidence. Defaults to a free unpaid 402 challenge. A fresh receipt costs exactly $0.001 USDC on Base. Payment requires owner approval, approve_payment:true, and a caller-signed payment_signature. No server wallet or private key. No automatic retry. Verify evidence and account for client round-trip time before a deadline decision.

輸入參數freshness_msapprove_paymentpayment_signature

popcorn_witness

Witness a SHA-256 digest and fresh caller nonce at a time. Defaults to a free unpaid 402 challenge. One fresh receipt costs exactly $0.001 USDC on Base; requires owner approval, approve_payment:true, and caller-signed payment_signature. Keep work and wallet keys local. No automatic retry. Evidence does not authorize or prove execution of an action.

輸入參數nonce必填digest必填approve_paymentpayment_signatureprevious_attestation_digest

版本歷史

5
  1. v0.1.6最新Oct 29, 2026
  2. v0.1.5Oct 24, 2026
  3. v0.1.4Oct 18, 2026
  4. v0.1.3Sep 16, 2026
  5. v0.1.1Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。