web3-agents-mcp
Provides tools to discover, inspect, and verify on-chain AI agents registered via ERC-8004 on Ethereum mainnet.
Provides tools to discover, inspect, and verify on-chain AI agents registered via ERC-8004 on OP Mainnet.
Provides tools to discover, inspect, and verify on-chain AI agents registered via ERC-8004 on Polygon PoS.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@web3-agents-mcp look up agent #1 on Base"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
web3-agents-mcp
Discover, inspect, and verify on-chain AI agents — from any MCP client.
An MCP (Model Context Protocol) server that bridges
ERC-8004 agent identity, reputation, and
validation registries into tool calls any AI agent can make. One server, every supported
chain — each tool takes a chain argument.
📋 Table of contents
Related MCP server: AgentStamp
🤔 Why
AI agents are starting to hire, pay, and delegate to other agents. ERC-8004 ("Trustless Agents") gives them an on-chain trust layer — identity, reputation, and validation registries on 20+ EVM chains — but until now an LLM agent had no way to read it from inside its tool loop.
web3-agents-mcp closes that gap. Before your agent trusts a counterparty, it can ask: Who owns this agent? Is its registration file authentic? What feedback has it received — and from whom? Has anyone independently validated its work?
🚀 Quickstart
npx web3-agents-mcpPre-publish: run from a checkout instead —
pnpm install && pnpm build && node dist/server/index.js
Claude Code:
claude mcp add web3-agents -- npx web3-agents-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"web3-agents": {
"command": "npx",
"args": ["web3-agents-mcp"]
}
}
}Any other MCP client: spawn npx web3-agents-mcp as a child process and speak MCP
over stdio. The server never opens a network port.
💬 Example prompts
Once connected, just ask your agent naturally:
"Which chains does the web3-agents server support?"
"Look up ERC-8004 agent #1 on Base — who owns it and what does it do?"
"Is agent #42's registration file cryptographically verified?"
"Show me the raw feedback entries for agent #1 on Base, including who submitted them."
"Should I trust agent #0 on Polygon for a code-review task? Pull the on-chain facts."
🧰 Tools
Tool | What it returns |
| Configured chains: slug, chainId, registry addresses, default flag |
| Identity record by agentId or owner: owner, tokenUri, endpoints, capabilities |
| The agent's full registration file, fetched and hash-verified ( |
| Feedback summary + optional raw per-client entries (address, score, tag), paginated |
| Independent validation entries: validator, method (TEE/ZK/re-execution), result |
| Composite factual report: identity + file verification + reputation + validations + caveats + plain-language summary |
| Capability search (indexer backend — MVP ships a stub) |
| Liveness + version |
Full input/output schemas, defaults, and error codes are generated from source into
docs/tools.md (pnpm docs:gen). A real captured transcript is in
docs/demo.md.
🛡️ Design principles
🔒 Read-only by design
No private keys, no signing, no write operations — every tool reads public state. An MCP tool surface reachable by an LLM must never have an injection path into on-chain actions (spending funds, changing registrations, submitting feedback). If a task needs a write, it needs a different, explicitly authorized tool — not this one.
⚖️ No scoring by design
There is no numeric score, confidence level, or star rating anywhere in this server's output. It hands back verified on-chain facts plus mandatory honesty caveats; weighing them into a trust decision is the consuming agent's job. A server that quietly compresses "57 feedback entries, all from one address, no independent validation" into a single number is making a judgment call it has no business making on the consumer's behalf.
⛓️ Supported chains
Chain |
| chainId | Supported |
Ethereum Mainnet |
| 1 | ✅ |
Base Mainnet |
| 8453 | ✅ |
Polygon PoS |
| 137 | ✅ |
Arbitrum One |
| 42161 | ✅ |
OP Mainnet |
| 10 | ✅ |
BNB Smart Chain |
| 56 | ✅ |
Gnosis Chain |
| 100 | ✅ |
Registry addresses are identical on every chain (CREATE2). Adding a chain is one entry in
src/chains/config.ts; agents discover the live list via the list_chains tool, and the
chain enum in every tool's schema updates automatically.
⚙️ Configuration
All configuration is via environment variables; every tool call still takes an explicit
chain argument, so these are defaults, not global switches.
Variable | Default | Purpose |
|
| Chain id used by any tool call that omits |
| none (built-in public RPC list per chain) | Overrides/prepends the RPC endpoint used for that specific chain id, e.g. |
|
| Directory for the local sqlite cache of fetched registration files. |
|
| Comma-separated list of IPFS HTTP gateways to try, in order, for |
|
| One of |
|
| Selects the |
🔍 Verification semantics
A registration file's verified field means different things depending on how the agent's
tokenUri points at it (per the v1 ERC-8004 contracts this server targets):
|
| Why |
|
| The content is embedded directly in the on-chain |
|
| The file is fetched from an IPFS gateway and its content hash is checked against the CID in the URI — an explicit |
|
| Unverifiable: v1 has no on-chain hash commitment for |
🧂 Feedback honesty
get_reputation and assess_trust always attach caveats to feedback-derived data, because
on-chain feedback has real, structural weaknesses that no aggregation can paper over:
There is no canonical score scale enforced by the registry; averages are clamped to 0-100 and may overstate quality relative to whatever scale a given client actually used.
Feedback is submitted by arbitrary addresses and is Sybil-able — nothing stops one party from submitting many entries under different addresses.
These caveats are deterministic and unremovable: they are always present in the output, not an opt-in flag.
🛠️ Development
pnpm install
pnpm dev # build then run the stdio server
pnpm build # compile TypeScript to dist/
pnpm test # run the vitest suite (excludes live-chain fork tests)
pnpm test:fork # run the live-chain fork tests against public RPCs
pnpm lint # eslint + prettier --check
pnpm typecheck # tsc --noEmit
pnpm docs:gen # regenerate docs/tools.md from the tool schemasProject layout:
src/chains— per-chain static config (registry addresses, deployment blocks, RPC URLs).src/registry— typed reads against the identity/reputation/validation ERC-8004 contracts.src/fetcher— registration-file retrieval, hashing/CID verification, and the sqlite cache.src/trust—assess_trust's orchestration, deterministic caveats, and summary text.src/indexer—search_agentsbackend contract and the MVPNullBackendstub.src/tools— one module per MCP tool: input/output zod schemas plus the tool function.src/server— MCP server wiring, tool registration, and the stdio entry point.src/shared— theResult/BridgeErrortypes and the stderr logger used everywhere.
Contributor/agent guidelines live in AGENTS.md.
🗺️ Roadmap
Local search indexer — real
search_agentsbackend (SQLite log backfill, resumable)Endpoint liveness checks — flag agents whose advertised endpoints are dead
Streamable HTTP transport — hosted/shared deployments
npm release —
npx web3-agents-mcpwithout a checkoutMore chains (one config entry each)
📄 License
MIT — see LICENSE.
Available Tools
8 toolsassess_trustA
Factual trust report for an ERC-8004 agent: runs identity, registration file, reputation, and validation lookups in parallel with graceful partial failure, and returns the raw sections plus deterministic honesty caveats and a short factual natural-language summary. No numeric scoring. taskContext only shapes the summary text.
Inputs: agentId (required), chain, taskContext.
get_registration_fileA
Fetches and verifies an agent's registration file (via its tokenUri): ipfs:// CIDs are verified, data: URIs are inherently verified, https:// is unverifiable in v1 (no on-chain hash commitment).
Inputs: agentId (required), chain, requireVerified.
get_reputationA
Reads an agent's Reputation Registry feedback summary (and optionally the raw feedback entries). Always returns honesty caveats — feedback is self-reported by clients and is a weak signal, especially for low feedback counts.
Inputs: agentId (required), chain, limit, offset, +1 more.
get_validationsB
Reads an agent's Validation Registry entries (validator, best-effort method classification, response, timestamp). An agent with zero validations is a normal, successful result — not an error.
Inputs: agentId (required), chain, limit, offset.
list_chainsA
Lists the chains this server is configured for. Every other tool's chain argument must be one of the chain slugs returned here; isDefault marks the chain used when a tool call omits chain (DEFAULT_CHAIN_ID env resolution).
Inputs: no named parameters.
pingA
Liveness check; returns pong and the server version.
Inputs: no named parameters.
resolve_agentA
Resolves an ERC-8004 agent by agentId or ownerAddress (exactly one selector), returning identity fields plus best-effort endpoints/capabilities parsed from its registration file.
Inputs: chain, agentId, ownerAddress.
search_agentsA
Searches for ERC-8004 agents by name/capability/description. MVP stub: no local index backend ships yet, so this always returns INDEX_UNAVAILABLE (input validation still runs first).
Inputs: query (required), chain, limit.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a distinct resource or action: liveness, chain config, agent resolution, registration file, reputation, validations, composite trust, and search. assess_trust aggregates the getters but does not overlap with them, so an agent can clearly select the right tool.
All tools use snake_case and nearly all follow a verb_noun pattern (resolve_agent, list_chains, get_registration_file, get_reputation, get_validations, assess_trust, search_agents). The only exception is ping, which is a standard health-check verb and does not break the overall consistency.
8 tools is well-scoped for an ERC-8004 agent trust server. The set covers health, configuration, identity resolution, data source retrieval, a composite trust report, and search without redundancy or bloat.
The tool surface covers identity, registration file verification, reputation, validations, and a composite trust assessment. The search_agents tool is only an MVP stub that always returns INDEX_UNAVAILABLE, which limits discovery but does not block core trust workflows for known agents.
Maintenance
Related MCP Connectors
AI agent registry — search, discover, register, and connect agents via MCP.
MCP server for the Z1N Protocol - on-chain identity for AI agents on Polygon
Search, vet & assemble MCP servers from your agent: verified tools, risk labels, and trust scores.
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
Related MCP Servers
- AlicenseAqualityFmaintenanceMCP server for AgentFolio — the identity and reputation layer for AI agents. Query agent profiles, trust scores, verification status, and marketplace listings through 8 MCP tools.9118 npm1MIT
- AlicenseAqualityDmaintenanceTrust intelligence MCP server for AI agents. 19 tools for identity stamps, reputation scoring (0-100), agent registry, forensic audit trails, ERC-8004 bridge, and A2A passports via x402 USDC micropayments.192Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for coordinating a permissionless swarm of AI agents to discover, investigate, and synthesize on-chain anomalies across EVM chains. Agents authenticate via off-chain ECDSA and earn reputation through useful contributions.MIT
- AlicenseAqualityDmaintenanceMCP server for AI agent trust verification, enabling agents to verify identities, check trust scores, and build reputation across multiple blockchain and web platforms.1215 npm1MIT