Check a Base or BNB Chain address before you pay it: on-chain risk reports, EAS attestations.
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
npx -y chainward-mcp-server
MCP client config
{
"mcpServers": {
"chainward": {
"command": "npx",
"args": [
"-y",
"chainward-mcp-server"
]
}
}
}
An automated, adversarially-verified on-chain investigation engine for AI agents on Base.
Decodes · Observatory · Website
ChainWard investigates what AI agents on Base actually do on-chain — and proves it. Its core is an automated pipeline that researches a target, writes a forensic report, and runs that report through a verifier gauntlet that re-checks every numeric claim against the chain before anything publishes. There is no human in the loop between the trigger and the published article. The data is read from a self-hosted Base node, so the ground truth has no third-party RPC dependency.
The interesting engineering here isn't "an LLM writes crypto articles." It's the machinery that stops the LLM from being confidently wrong in public.
POST https://api.chainward.ai/api/risk/check. Base and BNB Chain. A report is a list of flags, each tied to the transactions behind it, never a safety verdict.GET https://api.chainward.ai/api/risk/x402?address=0x… for 0.05 USDC on Base (add &chain=bsc for BNB Chain). Not charged if the check fails. Send paid requests to https://api.chainward.ai directly, not through chainward.ai/api/…. Discovery at /.well-known/x402 and /openapi.json. Verified on PayAPI Market.GET https://api.chainward.ai/api/risk/sanctions?address=0x… for 0.01 USDC. Hold if the address is on the US Treasury SDN list, Not listed otherwise (not a clearance). Any EVM chain.npx -y chainward-mcp-server (packages/mcp-server), listed in the MCP Registry as io.github.saltxd/chainward, or connect by URL to the hosted server at https://api.chainward.ai/mcp (Streamable HTTP, no key).Full API reference: chainward.ai/docs.
One command — pnpm decode:auto <@handle|0xaddress> — resolves the target, then spawns Claude Code headless against an orchestrator prompt that runs a five-phase, multi-subagent pipeline. Each phase is a fresh fan-out of subagents; the orchestrator only dispatches and gates.
decode:auto @target
│
▼
┌─────────────────────────────────────────────────────────┐
│ 1. RESEARCH 3 parallel agents │
│ identity/chain · token economics · utility │
├─────────────────────────────────────────────────────────┤
│ 2. WRITE 1 agent → decode.md + 5-tweet thread │
├─────────────────────────────────────────────────────────┤
│ 3. GAUNTLET 3 parallel verifiers │
│ citation · failure-mode · voice │
├─────────────────────────────────────────────────────────┤
│ 4. DECISION citation + failure-mode block; voice is │
│ advisory. Any FAIL → 1 retry, then halt. │
├─────────────────────────────────────────────────────────┤
│ 5. PUBLISH render OG card → commit → deploy → │
│ poll live URL → post launch tweet │
└─────────────────────────────────────────────────────────┘
│
▼
published decode · or a halt report (nothing ships)
The hard problem with LLM-generated analysis is confident fabrication — a plausible number with no basis. ChainWard's gauntlet is built on three rules, enforced by the orchestrator, that make unsupervised publishing safe:
The result is a pipeline that would rather ship nothing than ship a wrong number. Every published decode has had each of its claims re-derived from chain data by an agent that was trying to fail it.
Investigations the pipeline has published — each claim chain-verified and falsifiable (all decodes →):
packages/decode — the typed decode core, independent of the LLM: target resolution, chain audit, claim-vs-on-chain discrepancy detection, USDC-flow classification, peer clustering, wallet-architecture detection, and survival scoring. Unit-tested (80+ tests).apps/acp-decoder — the same decode core packaged as a service agent on Virtuals' Agentic Commerce Protocol, which has completed a real, paid, on-chain job end-to-end.scripts/auto-decode + scripts/auto-decode-prompts — the orchestrator and the subagent prompts (research, writer, and the three verifiers). The prompts are the most interesting reading in the repo.ChainWard also includes the full-stack platform the engine grew out of: a real-time indexer (Alchemy webhooks → BullMQ → TimescaleDB), an alert pipeline (Discord/Telegram/webhook), a Next.js dashboard, and the public Observatory that tracks agent wallets across Base.
| Path | What it is |
|---|---|
scripts/auto-decode/ | Pipeline entrypoint — spawns the orchestrator |
scripts/auto-decode-prompts/ | Orchestrator + research + verifier-gauntlet prompts |
packages/decode/ | Typed, LLM-independent decode core (80+ tests) |
apps/acp-decoder/ | Decode core as a paid Virtuals ACP service agent |
apps/api/ | Hono API (Node 22) |
apps/web/ | Next.js 15 dashboard, decodes, and Observatory |
packages/indexer/ | BullMQ workers — indexing, alerts, analytics |
packages/db/ | Drizzle ORM schema + migrations (TimescaleDB) |
packages/observatory/ | Aggregate queries behind the public Observatory |
packages/mcp-server/ | MCP server (chainward-mcp-server on npm) |
packages/{sdk,cli}/ | TypeScript client and chainward CLI |
packages/{elizaos,agentkit,virtuals}-plugin/ | Framework integrations |
A Turborepo monorepo, TypeScript end-to-end.
pnpm install
pnpm typecheck # all packages
pnpm build
pnpm dev # API on :8000, web on :3000
pnpm decode:auto @some-agent # run the pipeline (needs a Claude Code token + MCP config)
MIT