MCP server for ERC-8004 trustless AI agent on-chain identity. Provides 11 tools for registering, discovering, and managing agents as ERC-721 NFTs across BSC, Ethereum, and EVM-compatible networks.
ERC-8004 MCP server provides 11 tools with consistent naming (verb-first), adequate parameter schemas, and moderate descriptions. All tools have input schemas visible in mcp.json. Descriptions average ~120 chars, which meets baseline but lacks the LLM-optimized depth of A-tier servers. Parameter descriptions are present and typed. Critical gaps: (1) No documented output schemas, tools return data but responses are not formally specified, forcing LLMs to guess at field names and types. (2) No error handling guidance, tools will fail but error messages are not designed for agent recovery. (3) No idempotency hints or destructive operation guidance. (4) Parameters lack constraint documentation (e.g., score range -128 to 127 mentioned in description but not in schema, limit defaults not enforced). (5) Batch tool (batch_get_metadata) is good composition, but single-key get_metadata duplicates it without clear differentiation.
Read multiple on-chain metadata values for an ERC-8004 agent in one call. Provide a list of keys to look up. Returns a map of key → {value, rawBytes}.
Look up an ERC-8004 agent by token ID. Returns owner address, metadata URI (decoded if on-chain base64), contract version, and explorer link. Read-only — no private key required.
Get the total number of registered ERC-8004 agents on a given chain. Uses binary search on sequential token IDs.
Read a single on-chain metadata value for an ERC-8004 agent by key. Returns the decoded UTF-8 value and raw hex bytes. Read-only.
Get the on-chain reputation for an ERC-8004 agent. Returns total feedback count, average score, and recent feedback entries with reviewer address, score, comment, and timestamp.
List all ERC-8004 agents owned by a wallet address. Scans Transfer events and verifies current ownership. Returns agent IDs, URIs, and decoded metadata.
No output schemas documented for any tool. Tools return data but response structure is completely undefined, forcing LLMs to hallucinate field names and types.
Write operations (register_agent, set_uri, set_metadata, submit_reputation) have no error recovery guidance or dry-run capability. An agent that makes a mistake has no way to undo or confirm before execution.
Parameter constraints (score -128..127, limit defaults, key/value lengths) are mentioned in descriptions but NOT enforced in JSON Schema. Schema shows 'number' for score with no min/max, LLM could pass 1000 and cause contract revert.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Register a new ERC-8004 AI agent on-chain. Mints an ERC-721 NFT as the agent's on-chain identity. Supports optional metadata URI (HTTPS/IPFS/base64) and key-value metadata pairs. Requires PRIVATE_KEY env var.
Search registered ERC-8004 agents by name, service type, or metadata content. Scans on-chain Registered events and optionally filters by query string.
Set on-chain key-value metadata for an ERC-8004 agent. Common keys: "version", "a2a.endpoint", "mcp.endpoint", "did", "ens", "x402.enabled". Only the agent owner can set metadata. Requires PRIVATE_KEY.
Update an agent's metadata URI on-chain. Only the agent owner can call this. Requires PRIVATE_KEY env var.
Submit reputation feedback for an ERC-8004 agent. Score is int8 (-128 to 127). Feedback is stored on-chain in the ReputationRegistry. Requires PRIVATE_KEY env var.
No error messages or recovery guidance. Tools will fail (invalid chainId, token not found, permission denied, gas insufficient) but there are no error schemas or actionable recovery instructions for the agent.
Pagination half-implemented. list_agents, search_agents, get_reputation accept 'limit' but no offset, cursor, or total_count. No guidance on whether results are sorted or how to fetch next page.
get_metadata and batch_get_metadata overlap in functionality. No clear guidance on when to use which. LLM must reason about batching; ideally deprecate single-item version or clarify use cases.
Parameter descriptions mention examples (HTTPS/IPFS/base64, 'version', 'a2a.endpoint') but these are examples, not constraints. No schema enums or patterns. LLM may generalize beyond intended values.
No idempotency or destructive operation hints. set_uri, set_metadata, submit_reputation are irreversible but tool definitions don't warn that retry loops could cause unintended duplicates or overwrites.