{
  "markdown": "<div align=\"center\">\n\n<img src=\"images/logo.png\" alt=\"Tereno\" width=\"150\" />\n\n# tereno-mcp\n\n### 🛡️ Check before you act — an MCP server for Base, over x402\n\n**Ask what it costs before you pay for it.** Free catalog, pricing and receipt\ntools work with no wallet and no signup; paid answers settle per call in USDC,\nand reusing an answer another agent already paid for costs less.\n\n<br/>\n\n[![npm version](https://img.shields.io/npm/v/tereno-mcp?style=for-the-badge&color=0052FF&logo=npm)](https://www.npmjs.com/package/tereno-mcp)\n[![MCP](https://img.shields.io/badge/MCP-registry-8B5CF6?style=for-the-badge)](https://registry.modelcontextprotocol.io)\n[![Base](https://img.shields.io/badge/Base-0052FF?style=for-the-badge&logo=coinbase&logoColor=white)](https://base.org)\n[![x402](https://img.shields.io/badge/x402%20%C2%B7%20USDC-2775CA?style=for-the-badge)](https://www.x402.org)\n\n[![license](https://img.shields.io/npm/l/tereno-mcp?style=flat-square&color=green)](./LICENSE)\n[![no dependencies](https://img.shields.io/badge/dependencies-none-brightgreen?style=flat-square)](./package.json)\n[![free tier](https://img.shields.io/badge/free%20tools-no%20wallet-success?style=flat-square)](#-free-no-wallet-needed)\n\n```bash\nnpx -y tereno-mcp\n```\n\n</div>\n\n---\n\n## ⚡ Why this exists\n\nAn agent that reads a contract, signs a transaction or scrapes a page is acting\non information it cannot verify. Most tools answer *what* something is. None of\nthem tell you how long that answer stays true.\n\n`tereno-mcp` puts [Tereno](https://www.tereno.xyz) inside any MCP client. Every\npaid answer comes back with the evidence behind it, the limits of that evidence,\nand **the block it stops being valid at**.\n\n- **No API key, no signup.** The agent's wallet *is* the identity.\n- **Price before payment.** `tereno_price` tells you the cost and whether the\n  answer already exists, without a wallet and without committing to anything.\n- **Cheaper when shared.** Deterministic answers are reused across agents: the\n  first caller pays to compute, everyone after pays the reuse price.\n\n## 🚀 Install\n\nAdd it to any MCP client — Claude Desktop, Claude Code, Cursor, Cline, Windsurf:\n\n```json\n{\n  \"mcpServers\": {\n    \"tereno\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tereno-mcp\"]\n    }\n  }\n}\n```\n\nRestart the client. Nothing else to configure — the free tools work immediately.\n\n## 🆓 Free, no wallet needed\n\n| Tool | The question it answers |\n|---|---|\n| 📖 `tereno_catalog` | What can Tereno answer, what does it cost, how long does each answer stay valid? |\n| 🏷️ `tereno_price` | What would *this exact call* cost right now — and does the answer already exist? |\n| 🧾 `tereno_receipt` | What did a settled call actually charge: tier, list price, credit applied, price paid? |\n\n`tereno_price` is the one worth knowing about. It names the reuse tier out loud:\n\n```\nhit      another agent already paid to compute this and it is still fresh\npartial  the durable half survived; only the expired part is recomputed\nmiss     nothing to reuse — this call computes it, and the next asker pays less\n```\n\n## 💳 Paid per call\n\n| Tool | Price | The question it answers |\n|---|---:|---|\n| 🚦 `transaction_intent_guard` | $0.005 | **Is this safe to sign?** Simulation, gas, balance and allowance deltas, unlimited-approval flags |\n| 🛡️ `contract_guard` | $0.001–3 | Is this contract safe to interact with? (code, proxy, pause) |\n| 🕵️ `contract_change` | $0.001–2 | Did it change since last look? (rug-pull-after-audit detector) |\n| 🪙 `token_metadata` | $0.001–3 | What token is this, really? (name, symbol, decimals, supply) |\n| 🧬 `contract_interface` | $0.001–2 | ERC-20? NFT? Proxy? One bounded probe |\n| ⛽ `chain_snapshot` | $0.001–2 | Latest Base block, base fee and suggested gas, zero parameters |\n| 📄 `web_compile` | $0.001–5 | Public URL → bounded Markdown with resolved links, citations and a reusable artifact |\n| 🔎 `evidence_artifact` | $0.001–3 | Can this public artifact be reused? Provenance, field validity, recomputation input |\n| 🤝 `demand_pledge` | free | Name a capability you would pay for. Credit only after the same wallet pays for it later |\n\nCalling a paid tool returns a `402` carrying the payment challenge in\n`error.data.paymentRequired`, the payable resource URL in `error.data.resource`,\nand the terms (network, asset, amount, `payTo`) in `error.data.offer`.\n\n**Over stdio you cannot pay by retrying the tool call.** stdio has no headers in\neither direction, so there is nowhere for a `PAYMENT-SIGNATURE` to travel back\nthrough. Two ways to settle, both of which leave **this package never touching a\nprivate key**:\n\n- **Pay the resource over HTTP.** Sign `error.data.paymentRequired` with your\n  x402 client and send the signed request to `error.data.resource`. It returns\n  the same payload the tool would have, receipt included, billed once.\n- **Use the remote server instead of this package.** If your client supports\n  remote MCP, point it at `https://www.tereno.xyz/api/mcp`. That transport does\n  have headers, so signing the challenge and retrying the same tool call is the\n  normal flow and everything stays inside MCP.\n\n> 🔒 `transaction_intent_guard` is never cached, shared or resold. An unsigned\n> transaction is intent, and it stays with the wallet that paid for it.\n\n## ⚙️ Configuration\n\n| Env | Default | Purpose |\n|---|---|---|\n| `TERENO_WALLET` | — | Base address announced before payment, so a challenge can be bound to the wallet that will settle it. Optional. |\n| `TERENO_BASE_URL` | `https://www.tereno.xyz` | Point at another Tereno deployment. |\n| `TERENO_TIMEOUT_MS` | `45000` | Upstream request timeout. |\n| `TERENO_EVIDENCE_INSTALLATION_ID` | — | Optional stable random id for this MCP installation. It is hashed only when resolving evidence received from another agent; never use a wallet or secret. |\n\n## 🔐 What this package does and does not do\n\nIt is a **stdio transport** in front of the hosted endpoint at\n[`/api/mcp`](https://www.tereno.xyz/api/mcp). Messages are forwarded verbatim, so\nthe tool list, the prices and the payment challenge all come from the same place\nan HTTP agent sees — and this package needs no release when a capability changes.\n\nThe one thing it translates is payment, and the translation is lossy in one\ndirection. Over HTTP the challenge arrives in a response header and the caller\nretries with a `PAYMENT-SIGNATURE` header. stdio has neither, so the challenge is\nfolded into the JSON-RPC error payload where a client can still reach it, while\nthe signature has no way back in. That is why a paid call is settled against the\nresource URL rather than by retrying the tool, and why a client that speaks\nremote MCP should prefer the hosted endpoint.\n\n**No private key is ever read, stored or transmitted.** There are no\ndependencies, and the whole thing is one readable file — [read it](./bin/tereno-mcp.mjs)\nbefore you let it run on your machine.\n\nIf your client supports remote MCP servers, skip this package and point it\nstraight at `https://www.tereno.xyz/api/mcp`.\n\n## 🌱 How it stays cheap — the cooperative layer\n\nTereno is a **shared-cache coordination layer**, not just an API. The first agent\nto pay for a given piece of verified work seeds it for the whole network; every\nlater agent that reuses that answer pays less, and the seeder earns a small,\nnon-transferable credit that discounts its own future calls.\n\nSafety is a public good with a private cost. By making the first computation earn\nfrom every reuse, the network turns *\"I paid to check this contract\"* into *\"I\nlowered the price of checking it for everyone, and my own checks got cheaper.\"*\n\n> The honest fine print: rewards are **non-transferable credits**, capped per\n> artifact. They fund your agent's budget, they are not yield.\n\nDiscovery, scoring, reputation, pricing and the global cache live in the closed\nTereno backend. This server and its SDK\n([`tereno-client`](https://www.npmjs.com/package/tereno-client)) are the public,\nopen interface to it.\n\n## 🤝 Support & community\n\n- 💬 **Questions / setup** → [Tereno Discord](https://discord.gg/YsgGSRBxn)\n- 🐛 **Bugs** → [issues](https://github.com/tereno-xyz/tereno-mcp/issues) · ⚠️ never paste private keys or `.env`\n- 🔒 **Vulnerabilities** → [report privately](https://github.com/tereno-xyz/tereno-mcp/security/advisories/new)\n\n## 🔗 Links\n\n[Live catalog](https://www.tereno.xyz/api/v1/capabilities) ·\n[OpenAPI](https://www.tereno.xyz/openapi.yaml) ·\n[MCP registry entry](https://registry.modelcontextprotocol.io/v0/servers?search=tereno) ·\n[plugin-tereno for ElizaOS](https://github.com/RobMartello/plugin-tereno) ·\n[tereno-client SDK](https://www.npmjs.com/package/tereno-client)\n\n---\n\n<div align=\"center\">\n\n**[tereno.xyz](https://www.tereno.xyz)** · Verdicts before signatures, for agents on Base.\n\n</div>\n",
  "bytes": 8808,
  "sha": "d751521fe7e9fa75d4f38a57b4e7256d65cbf61444406423470374d3f926b562",
  "repo_slug": "tereno-xyz/tereno-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_xyz_tereno_tereno_786cccef/readme"
}