Deprecated. Deprecated by the publisher: Renamed/superseded by io.github.twzrd-sol/twzrd-agent-intel (repo twzrd-sol/twzrd-trust); the twzrd-mcp GitHub repo no longer exists.
Auto-pay MCP for the TWZRD Trust API: free preflight + x402-paid Solana trust intel
Runs on your machine from its package; the steps are below.
Not assessed yet.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx twzrd-mcp
MCP client config
{
"mcpServers": {
"twzrd": {
"command": "uvx",
"args": [
"twzrd-mcp"
]
}
}
}Don't let your agent sign blind.
Pre-spend trust for agents that buy: the x402 service they are about to pay (Solana, and Base) and the product listing they are about to buy from.
quickCheck is $0.001 (seller wash risk, tier and score; no receipt). Separately, the gate can issue a portable twzrd.payment_decision.v1 record from its own decision, signed locally with your own signer.Not a wallet. Not a payment network. The commerce walkthrough lives in docs/COMMERCE-KIT.md.
Canonical skill (always refresh) • https://intel.twzrd.xyz/skill.md (skill twzrd-trust; the live copy carries its version) · ClawHub twzrd-trust
Spend-control SDK (npm) • twzrd-x402-gate@0.11.5 + seat x402-solana@3.0.1
Live MCP • https://intel.twzrd.xyz/mcp (streamable HTTP; free tools for x402 service checks and product-listing checks)
Shopping check • free check_listing on the hosted MCP · report: https://twzrd.xyz/shopping-check/vuori-kore/
Agent contract • https://intel.twzrd.xyz/llms.txt · https://intel.twzrd.xyz/.well-known/agent.json
Run this one-line command with no wallet, no API key, and no configuration:
curl -fsS https://intel.twzrd.xyz/v1/intel/demo-gate | jq '{verdict: (.steps[] | select(.name == "block_path") | .verdict), approved: (.steps[] | select(.name == "block_path") | .approved), signerInvocations: (.steps[] | select(.name == "block_path") | .signer_invocations), mode, ok}'
Without jq, run: curl -fsS https://intel.twzrd.xyz/v1/intel/demo-gate
Expected output:
{
"verdict": "block",
"approved": false,
"signerInvocations": 0,
"mode": "no_spend",
"ok": true
}
Blocks happen before your signer is invoked (signerInvocations: 0) — zero USDC at risk.
Pre-spend trust for AI agents that buy: check x402 services and product listings before paying.
| You are | Free | Paid |
|---|---|---|
| an agent about to pay an x402 seller | Readiness card (allow, warn or block), wash flags, seller reputation, offline receipt check. | $0.001 quickCheck (seller wash risk, tier and score, no receipt); optional $0.05 trust receipt, a signed V7 receipt when you pay on Solana. |
| an agent about to buy a product from a store | check_listing(product_url, declared_unit_price) against a published listing card, and the Agent Shopping Check report. | Optional $0.001 checkout brief for a buyer-approved Shop Pay checkout. |
Each piece below works alone. Plugged into the hosted checks, they form one pre-spend path.
| Piece | On its own | Plugged in | Install |
|---|---|---|---|
| Hosted checks | Free checks with nothing to install: is this x402 seller safe to pay, and does this store listing match a published card. | The pieces below that screen a payment call it; it is where the decisions and the signed receipts come from. The receipt verifier needs no server. | Add https://intel.twzrd.xyz/mcp to an MCP client |
twzrd-x402-gate | Wraps an x402 client's pay path: asks the hosted checks about the seller before your signer runs, refuses a block (the signer is never invoked), enforces a spend cap, and can issue a twzrd.payment_decision.v1 record from its decision, signed with your own signer. | Decisions come from the hosted checks; pairs with x402-solana or @x402/fetch as the payer. | npm install twzrd-x402-gate |
twzrd-preflight | OpenClaw plugin: assign its wrapped fetch to the client and every 402 that passes through it is checked before a signer can attach payment (enforce and fail-closed by default). | Matches the gate's wrapper and adds OpenClaw tool-call gating, against the hosted checks. Payments outside the wrapped fetch (a ClawRouter proxy, unparsed exec or curl) are not covered. | npm install twzrd-preflight |
twzrd-receipt-verifier | Verifies a TWZRD receipt offline against a published Ed25519 key: no wallet, no API key, no trust in TWZRD's server. | Checks the signed receipts that the hosted checks issue. | npx twzrd-receipt-verifier or pip install twzrd-receipt-verifier |
twzrd-mcp-server / twzrd-mcp | A local MCP client with 6 tools that pays the $0.001 and $0.05 calls itself under a spend cap (a wallet only if you enable paid calls). | Calls the hosted checks; use the hosted MCP directly for the free checks. | npx -y twzrd-mcp-server or pip install twzrd-mcp |
@wzrd_sol/plugin-trustgate, @wzrd_sol/eliza-plugin | Framework seats: a settle hook for facilitators (see docs), a Faremeter payer chooser, and elizaOS actions. | Each seat calls the hosted checks from inside its framework. | npm install @wzrd_sol/plugin-trustgate |
twzrd-agent-intel | The server package behind the hosted checks. Run it yourself behind a firewall; a local run serves a small static snapshot, not live data. | Point a self-hosted instance at live data with its environment variables. | pip install twzrd-agent-intel, then twzrd-agent-intel-mcp |
Seller starters: x402-solana-starter, x402-seller-starter | Cloudflare Worker templates for selling a paid API to agents over x402: x402-solana-starter is the production-style Solana storefront (x402 v2), x402-seller-starter a minimal wedge. | Both default to the TWZRD facilitator. x402-solana-starter also runs a settle guard, advisory and fail-open, that screens payers through the hosted checks. | Deploy button in each repo |
Put them together
curl -fsS https://intel.twzrd.xyz/v1/intel/demo-gate.check_listing + your human approval step. A price above the card is refused; a price below it, or a card with no price, asks a human. Optionally add the paid checkout brief.What TWZRD does not claim
authorizes_spend is always false: a check is evidence for your own spend policy, never permission to spend.More: docs/ECOSYSTEM.md.
This checkout is a public monorepo, not npm install twzrd-x402-gate. CI is
root npm ci then npm run ci (Node 20). Do not npm ci inside
twzrd-x402-gate/ — gate typecheck needs sibling twzrd-log-verifier deps
from the root lockfile.
npm ci
npm run build
npm run typecheck
npm test --workspace=twzrd-x402-gate
npm run gate-eval-refuse --workspace=twzrd-x402-gate
gate-eval-refuse is the hello-world that closes (0 USDC, signer_invocation_count: 0).
It needs egress to https://intel.twzrd.xyz. Artifact dirs (eliza-plugin/,
plugin-trustgate/, twzrd-mcp-server/) are dist/ mirrors — do not try to
build or demo them locally. Hosted MCP: https://intel.twzrd.xyz/mcp.
npm install twzrd-x402-gate@0.11.5 x402-solana@3.0.1
import { twzrd } from "twzrd-x402-gate";
const result = await twzrd.safeFetch("https://merchant.example/paid-endpoint", {
maxSpend: "0.10", // per-call cap AND cumulative budget in USD
allowNetworks: ["solana"], // allowed settlement networks
requireOfferBinding: true, // demand an on-chain verifiable bind-v1 receipt
pay: async ({ url, paymentRequired, selected }) => {
// Your existing x402 client signs here — e.g. @x402/fetch + your signer
return await myWallet.payX402(url, paymentRequired, selected);
},
});
// On block: result.verdict === "block", result.signerInvocations === 0
import { createX402Client } from "x402-solana";
import { createTwzrdBeforePaymentHook } from "twzrd-x402-gate";
const client = createX402Client({
wallet,
network: "solana",
beforePayment: createTwzrdBeforePaymentHook({ refuseWashFlagged: true }),
});
One path. Install twzrd-x402-gate@0.11.5. Free preflight does not enforce; AutoGate on the pay path does.
npm i twzrd-x402-gate@0.11.5 then installTwzrdAutoGatenpx twzrd-cold-start writes a default-deny policy.json from a pinned foreign 402 diet (0 USDC; not a TWZRD bazaar)GET /v1/intel/resources (or listDirectoryCallables) — bazaars list; TWZRD sits besidesignerInvocations === 0quickCheck (tier and score). Separately, the gate can issue a portable twzrd.payment_decision.v1 record from its decision, signed by your own signer (npx twzrd-payment-decision --verify)exportEvidenceBundle / npx twzrd-evidence-bundleRefuse-first demo (0 USDC): npx tsx twzrd-x402-gate/examples/commerce-kit.ts
Cold-start diet (0 USDC): npx twzrd-cold-start
Walkthrough: docs/COMMERCE-KIT.md
GET /v1/intel/resources (resource catalog)GET /v1/intel/merchant_card/{pay_to} (refuse if wash_flagged: true)POST /v1/intel/preflight → ReadinessCard (allow / warn / block)GET /v1/intel/quick/{pay_to} (wash risk, tier, score). Separately, the gate can issue a locally signed twzrd.payment_decision.v1# Free preflight (no signup, no wallet)
curl -s -X POST https://intel.twzrd.xyz/v1/intel/preflight \
-H 'content-type: application/json' \
-d '{"seller_wallet":"46vMcwuC4sK11sB3gkLhyA7J7GEwfkhn5rFyDtihBwqe","price_usdc":0.01,"agent_intent":"preflight"}'
The second lane is for an agent buying a product from a store, not paying an x402 seller. Before it buys, it calls check_listing(product_url, declared_unit_price) on the hosted MCP, which compares the product URL and the asking price with TWZRD's published listing card. The call is free and read-only: it does not fetch the store page, open a checkout, or move money.
# Declared $79 against a card that advertises $78: refused
curl -sS https://intel.twzrd.xyz/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_listing","arguments":{"product_url":"https://checkout.vuoriclothing.com/products/kore-short-ink","declared_unit_price":"79"}}}' \
| sed -n 's/^data: //p' \
| jq '.result.structuredContent | {result, reason, price_check, needs_approval, authorizes_spend}'
Expected output while the reference card is current and advertises $78:
{
"result": "check_failed",
"reason": "phantom_markup_detected",
"price_check": "above_advertised",
"needs_approval": true,
"authorizes_spend": false
}
| You call with | result | price_check | needs_approval |
|---|---|---|---|
| The advertised price | advertised | verified | false |
| A price above it | check_failed (phantom_markup_detected) | above_advertised | true |
| A price below it, including 0 | advertised | discount_unverified | true |
No declared_unit_price | advertised | null (the price is not checked) | false |
| A URL no published card covers | unknown_seller (unknown is not clean) | null | true |
A card past its expires_at | expired | null | true |
price_check: verified means your declared price equals the price on the captured card. It does not mean TWZRD verified the store, the purchase, or delivery.needs_approval: true means a human approves before the agent buys; a card that advertises no price also sets it. needs_approval: false means this check raised no flag. It is not clearance, and with no declared_unit_price the price was not checked at all.check_failed also covers a card that cannot be read or verified, and a declared price that is not a valid non-negative number (price_check: invalid).authorizes_spend is always false: a matching card is evidence for your own spend policy, not permission to spend.What a card is, and what it is not:
One reference card today: Vuori Kore Short, Ink, US. It is an observer card (TWZRD's capture of the store's public pages), not a merchant attestation. Each published card carries an expires_at; after it, check_listing returns expired.
Advertised means a captured page said it. Purchase completion and delivery are not verified.
Read the card and its evidence: get_claim and get_evidence. get_shopping_check returns the Agent Shopping Check report, the same one as https://twzrd.xyz/shopping-check/vuori-kore/ and GET https://intel.twzrd.xyz/v1/shopping-check/vuori-kore.
Check that the card is the one TWZRD published: get_publication returns the publication record as JSON in its text field: verify_key (base64), publication (the digests and a base64 signature) and signed_message (how the signed bytes are built). Base64-decode verify_key to its 32 raw bytes and compare their sha256 with the fingerprint below. This README is the independent pin: skill.md carries the same value but is served by the same host as the key, and a fingerprint taken from the same response proves nothing. Never refresh this value from the live skill.md when re-syncing the mirrors; change it only when the key is deliberately rotated. Then verify the Ed25519 signature over the signed bytes with that key, and check that the sha256 of the text returned by get_claim and get_evidence equals publication.artifact_digest and publication.evidence_digest. A valid signature shows that TWZRD published these bytes; it is not a merchant attestation.
sha256:903d0d041e2d82fc0dd6f5252b4e904121e113e498d00b7385cad6061b4881af
Paid, optional: GET https://intel.twzrd.xyz/v1/intel/checkout-brief ($0.001 USDC via x402) returns a brief tied to the card, with your cart_hash copied in, for a buyer-approved Shop Pay checkout. TWZRD does not check the hash against any cart. The brief carries needs_approval and authorizes_spend: false, and it does not pay the merchant. A product URL that does not match the card, or an expired card, returns 404 before any 402; a declared price above the advertised one returns 409 before any 402.
| Package | Pin | Description |
|---|---|---|
twzrd-x402-gate | @0.11.5 | Spend-control SDK (twzrd.safeFetch) + pre-sign gate hooks |
x402-solana | @3.0.1 | Compatible Solana client seat for the pre-payment gate |
twzrd-receipt-verifier | @^1.4.0 | Standalone offline verifier for Ed25519 V7 receipts (V5 and V6 still verify) |
twzrd-mcp-server | @0.5.7 (this tree) | Local spend-capped auto-pay client (6 tools); prefer hosted MCP |
@wzrd_sol/plugin-trustgate | @^0.3.9 | Eliza / facilitator adapter |
twzrd-log-verifier — not on npm)