About warden402-mcp
warden402-mcp is an MCP server for checking Base tokens, transactions, and addresses before an AI agent acts. It returns rule-based risk decisions and can apply per-agent spending policies when an agent key is configured.
Key features
- 01Token, transaction, and address risk checks
- 02Block, review, or clear verdicts with reasons
- 03Transaction simulation and approval analysis
- 04Per-agent spending limits and allow/deny lists
- 05Human review holds and kill switch
Use cases
- 01Screen a Base token before a purchase
- 02Check a transaction before signing
- 03Enforce spending rules for agent payments
MCP support
Exposes guard_token, guard_tx, and guard_address to MCP clients. With an agent key, it also provides firewall_check and firewall_status.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y warden402-mcpWARDEN_API_URLOverride the Warden API base (default https://warden402.xyz/api).WARDEN_AGENT_KEYSecretAgent key (wk_...) from warden402.xyz/onboard. Enables firewall_check and firewall_status.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
3Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| address | string | Yes | Token contract address (0x + 40 hex) |
| chainId | number | No | Chain id (default 8453, Base) |
Details
From the project READMEWarden — pre-execution security for AI agents on Base
Before your agent buys a token, signs a transaction or pays an address, ask
Warden. You get block · review · clear with the reasons, a risk score
and — when there is one — the safer thing to sign instead. On top, a per-agent
Firewall enforces a spending policy: allow · hold · deny.
Live at warden402.xyz · public track record at warden402.xyz/track-record
Quick start
MCP (Claude, Cursor, any MCP client) — no key needed:
{
"mcpServers": {
"warden402": {
"command": "npx",
"args": ["-y", "warden402-mcp"],
"env": { "WARDEN_AGENT_KEY": "wk_... (optional, enables firewall tools)" }
}
}
}
Tools: guard_token, guard_tx, guard_address, and with an agent key
firewall_check, firewall_status. → mcp/README.md
SDK (TypeScript, fail-closed):
import { Warden } from "warden402-sdk";
const warden = new Warden({ agentKey: process.env.WARDEN_AGENT_KEY });
await warden.assertSafe(() => warden.token("0xTOKEN")); // throws on block
await warden.protect({ to: payee, amountUsd: 5 }, () => pay()); // runs only on allow
→ sdk/README.md (also LangChain tools)
HTTP:
curl "https://warden402.xyz/api/guard?address=0xTOKEN" # token
curl "https://warden402.xyz/api/guard?type=address&address=0xADDR" # address
curl -X POST https://warden402.xyz/api/guard -H 'content-type: application/json' \
-d '{"type":"tx","from":"0x..","to":"0x..","calldata":"0x.."}' # transaction
50 free guard calls per IP per day, then x402 pay-per-call ($0.01 token/address, $0.02 tx, USDC on Base). Firewall agent keys: warden402.xyz/onboard (free: 1 agent, 1,000 checks/month).
What it checks
| Target | Signals |
|---|---|
| Token | live sell simulation from a real holder (can you get out?), honeypot & taxes, owner powers (mint, set balances, blacklist, upgradeable logic), contract controls, wallet holder concentration (LP / CEX / burn excluded), liquidity, LP lock, deployer reputation, OFAC |
| Transaction | calldata decode (approve, increaseAllowance, EIP-2612 permit, Permit2, setApprovalForAll, transfer); approval target (unlimited approval to an address with no code → block); eth_call simulation (revert, call to non-contract); counterparty OFAC + contract risk; address poisoning on outgoing transfers. Returns remediation — e.g. an exact-amount approval to sign instead |
| Address | OFAC, exposure to sanctioned counterparties, contract risk, identity (verified / named / anonymous) |
Signal data comes from the x402 Bazaar plus Base RPC.
How decisions are made
- No LLM in the decision path. Decision, score and summary are deterministic rules over the collected signals — same input, same verdict.
- Fails safe. A critical signal that can't be fetched is
unknown→degraded: true→ the verdict isreviewat worst, never a falseclear. The SDK and MCP are fail-closed too: no verdict → throw / "do not proceed". - Hard blocks regardless of score: honeypot, sanctioned target, token that can't be sold, poisoned look-alike recipient, unlimited approval to a plain wallet.
- Otherwise: weighted risk ≥ 70 →
block; anyfailor risk ≥ 35 or 2+warns →review; elseclear. - Every verdict is recorded and re-checked later for rugs — the public track record.
Firewall (per agent)
Policy-as-code in front of an agent's value flow: per-call / hourly / daily
spend caps, allow & deny lists, unlimited approvals banned, first payment to a
new counterparty held for a human (approve/reject in /account or via API),
calls-per-minute limit, anomaly multiplier, kill switch, audit log, webhook on
hold. Team accounts sign in with a wallet (SIWE), with roles and plans.
→ FIREWALL.md
Repository
| Path | What |
|---|---|
web/ | The production site and API (Next.js on Vercel): guard, firewall, track record, accounts, x402 payment gate |
packages/core/ | Shared verdict schema + calldata decoder (@warden/core) |
mcp/ | warden402-mcp — stdio MCP server |
sdk/ | warden402-sdk — TypeScript client + LangChain tools |
src/ | Optional standalone Hono API (Node host); a drift test keeps its engine identical to web/ |
tests/ | Vitest: decision engine, calldata decoder, firewall policy, drift guard, web signals |
npm install && npm test # unit tests
cd web && cp .env.example .env.local && npm run dev # site + API on :3000
Deploy notes: DEPLOY.md.
License
MIT — see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.