twzrd-mcp-server / twzrd-mcp — pre-spend seller reputation for Solana x402
Check a seller wallet and requested resource before you pay over Solana x402. Free tools return allow / warn / block; optional paid tools buy deeper reputation evidence or a signed V6 receipt with explicit spend caps. TWZRD scores observed wallet and payment behavior. It does not prove a person, company, or autonomous agent identity.
Prefer the zero-install hosted Agent Intelligence MCP. Use this package only when you want local auto-pay for paid intel.
// Recommended — 22 tools, no wallet, nothing to install
{ "mcpServers": { "twzrd": { "url": "https://intel.twzrd.xyz/mcp" } } }
# Local auto-pay client — 6 tools; wallet only if you enable paid calls
npx -y twzrd-mcp-server # Node
pip install twzrd-mcp # Python
- npm (Node):
twzrd-mcp-server - PyPI (Python):
twzrd-mcp - Agent Intelligence: https://intel.twzrd.xyz · repo: twzrd-sol/twzrd-trust
Which surface do I want?
| Surface | Tools | Wallet | Use when |
|---|---|---|---|
https://intel.twzrd.xyz/mcp (hosted) |
22 | No | Default. Seller preflight, resource evaluation, reputation, receipts, watches, and observed-market research. |
twzrd-mcp-server / twzrd-mcp (this package) |
5 | Only for paid | You want quick_trust / full_trust auto-paid locally with caps. |
Start with hosted twzrd_demo_gate for a zero-setup, no-spend transcript of
the block path: a recorded example, not a live run. The hosted MCP is also listed on Smithery.
The 6 local client tools
| Tool | Cost | What |
|---|---|---|
preflight |
free | allow / warn / block + trust score for a seller you're about to pay |
merchant_card |
free | seller graph card — wash_flagged: true → don't pay (locked sequence step 2) |
wallet_lookup |
free | facilitators + counterparty breadth for a wallet |
verify_receipt |
free | offline-verify a wallet's cNFT receipt (Ed25519 vs genesis authority 2ELSDxLkb7dYrN6EUG69tNtULAq4Fo7WPvXyrZPmuFif) — trust no server |
quick_trust |
$0.001 | quick tier + score for any wallet |
full_trust |
$0.05 | full trust intel + signed V6 receipt |
quick_trust/full_trustbuy intel on any wallet (you look risky ones up on purpose) — they don't refuse a target. Usepreflightto vet a wallet you're about to pay elsewhere.
Happy path (seller-first)
- Free
preflighton the seller's receive wallet. block→ don't pay. Done, $0 spent.- Free
merchant_cardon the same wallet —wash_flagged: true→ don't pay. warn→ first paid hop is $0.001quick_trust. Optional V7: $0.05full_trust.allow+ clean card + small spend → pay. Keep the receipt; scores decay, so re-check stale decisions.
Install & config
Paid tools are opt-in on both runtimes: they sign only when you set
TWZRD_MCP_PAYMENTS_ENABLED=1 and provide a wallet key. For free tools, omit
both — the server runs read-only and never signs. Spend is bounded by per-call and
session caps.
Before any Solana signature the Node server runs twzrd-x402-gate@0.11.4 wash
default (Python twzrd-mcp 0.2.2 does the same merchant_card check on the 402
payTo): abort iff wash_flagged===true, and fail closed if intel cannot answer
(timeout, 5xx/429, unreadable body): an outage is never read as clean. That is
the paying-client brake, not a Path A shop.
Python — pip install twzrd-mcp
{ "mcpServers": { "twzrd": {
"command": "twzrd-mcp",
"env": {
"TWZRD_RPC_URL": "<your dedicated Solana RPC url>",
"TWZRD_WALLET_KEYPAIR": "/path/to/solana-keypair.json",
"TWZRD_MCP_PAYMENTS_ENABLED": "1",
"TWZRD_MAX_USDC_PER_CALL": "0.05",
"TWZRD_MAX_USDC_TOTAL": "1.00"
}
}}}
Node — npx -y twzrd-mcp-server
{ "mcpServers": { "twzrd": {
"command": "npx", "args": ["-y", "twzrd-mcp-server"],
"env": {
"TWZRD_RPC_URL": "<your dedicated Solana RPC url>",
"TWZRD_WALLET_SECRET_KEY": "<base58 Solana secret>",
"TWZRD_MCP_PAYMENTS_ENABLED": "1",
"TWZRD_MAX_USDC_PER_CALL": "0.05",
"TWZRD_MAX_USDC_TOTAL": "1.00"
}
}}}
| Env var | Default | Meaning |
|---|---|---|
TWZRD_MCP_PAYMENTS_ENABLED |
unset (off) | set 1 to arm paid tools — required on both runtimes |
TWZRD_WALLET_SECRET_KEY (Node) / TWZRD_WALLET_KEYPAIR (Python) |
— | signer for paid tools |
TWZRD_MAX_USDC_PER_CALL |
0.05 |
per-call spend cap |
TWZRD_MAX_USDC_TOTAL |
1.00 |
cumulative session spend cap |
TWZRD_RPC_URL |
none — required for paid tools | Solana RPC. Paid tools refuse to arm without it: the public RPC is rate-limited and loses x402 races (stale blockhash / sponsored feePayer between the 402 challenge and the signed retry), and a rejected settle can still move USDC. Free tools need no RPC. The Solana Foundation public endpoints (api.mainnet-beta, api.devnet and api.testnet .solana.com, trailing dots ignored) and any URL with a /public path segment are refused, by the Node server and by the Python client; other shared public RPCs are not detected, so choose a dedicated one. TWZRD_ALLOW_PUBLIC_RPC no longer enables a refused URL. The Python client also refuses hosts it cannot read exactly as the Node parser does: IDN hosts (Unicode or xn--), IPv4 not written as a dotted quad (such as 127.1), and hosts with unusual characters; give it an ASCII hostname. |
Safety
- Opt-in payments — paid tools sign only with
TWZRD_MCP_PAYMENTS_ENABLED=1; a wallet key alone never arms spending. - Spend caps — per-call and session caps enforced in the payment selector before any signature. Caps use the mint's true decimals, never merchant-declared
extra.decimals. A mismatched declaration is refused. A malformed cap env (e.g."$0.05") falls back to the default; it never becomes NaN and disables the cap. - Known-asset only — pay only known USD-pegged stables (USDC/USDT); unknown SPL mints are refused.
- Identifiable recipient — a challenge with no
payTois refused. - Solana-only — a non-
exact/ non-solana:challenge is refused, never mis-signed. - Single-shot retry — at most one signed retry per tool call; a second 402 is surfaced, not silently re-paid.
- Free tools never enter the payment path.
Verify receipts offline (trust no one)
full_trust returns a portable Ed25519-signed V6 receipt. Verify it without
trusting any TWZRD server — new receipts use issuer key
twzrd-receipt-ed25519-v2; legacy v1 keys remain verify-only during the
bounded compatibility rollout.
(Ak5SQwHpuQAqU7ty7ZWX7qgF39A9yi72c22KNn8sHzvS), pinned at
https://intel.twzrd.xyz/.well-known/twzrd-receipt-pubkey:
npx twzrd-receipt-verifier <receipt.json> --pubkey Ak5SQwHpuQAqU7ty7ZWX7qgF39A9yi72c22KNn8sHzvS
Development
npm run build && npm run demo lists tools and runs a free preflight from source
(no spend by default). For the operator-authorized $0.001 settle proof, set
TWZRD_DEMO_PAID=quick, provide a wallet key, and pin both caps to 0.001
(see examples/agent-drop-in.mjs).
Links: Agent Intelligence · hosted MCP · llms.txt · llms-full.txt · OpenAPI
License: MIT
Metadata
Release files for twzrd-mcp 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| twzrd_mcp-0.2.3.tar.gz | 11.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| twzrd_mcp-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.7 kB
Release files / twzrd_mcp-0.2.3.tar.gz
| Download URL | twzrd_mcp-0.2.3.tar.gz |
|---|---|
| Size | 11.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
05d6e523a518f3ed1ed6257b4cdaa0c44d8d57ffd2ad29458c06fbed1dc147b8
|
|
BLAKE2b-256 checksum How to use checksums |
1abae83cf6c6b117b169fcd8ab9034488d0eefd39fc3a7ee4bc356bdea0e37a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / twzrd_mcp-0.2.3-py3-none-any.whl
| Download URL | twzrd_mcp-0.2.3-py3-none-any.whl |
|---|---|
| Size | 12.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4607c0d7d4763d556b7d6f222d5db3b7e7b43761b5f8b74f6b80079f7d6203aa
|
|
BLAKE2b-256 checksum How to use checksums |
ed80fe903daec68627b424542614d27d8d0531d2cc471db0c5d088fbec7b6196
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|