Agent identity and reputation registration
/install 8004-mcp
8004-MCP - Agent Registry Protocol
Multi-chain MCP server for ERC-8004 Agent Registry. Query agents, reputation, and feedback across Solana + EVM chains.
⚡ First Time Setup (IMPORTANT)
1. Check System Health
await client.callTool({ name: 'health_check', arguments: {} });
// Returns: { server: 'ok', chains: {...}, walletStore: 'not_initialized', ... }
2. Initialize Wallet Store (One-Time)
The wallet store encrypts all your wallets with a single master password.
// ⚠️ SAVE THIS PASSWORD - Cannot be recovered if lost!
await client.callTool({ name: 'wallet_store_init', arguments: {
password: 'YourSecureMasterPassword123!'
}});
// Returns: { initialized: true, message: 'Wallet store created' }
3. Create a Wallet
await client.callTool({ name: 'wallet_create', arguments: {
name: 'my-eth-wallet',
chainType: 'evm' // or 'solana'
}});
// Returns: { name: 'my-eth-wallet', address: '0x...', chainType: 'evm' }
4. Fund Your Wallet
Check the "Approximate Costs" section below for funding amounts.
// Get faucet info (testnet) or ask owner (mainnet)
const funding = await client.callTool({ name: 'faucet_info', arguments: {
chain: 'eth' // or 'sol', 'base'
}});
// Returns faucet URLs and wallet address
⚠️ Important for Agents:
- See "Approximate Costs" section for funding amounts
- Faucets require captchas - you can't use them directly
- Ask your owner to fund your wallet
- On mainnet: no faucets, must ask owner for real funds
5. On New Sessions - Unlock Store
await client.callTool({ name: 'wallet_store_unlock', arguments: {
password: 'YourSecureMasterPassword123!'
}});
// Now all write operations work
Common Issues
| Symptom | Cause | Solution |
|---|---|---|
STORE_NOT_INITIALIZED |
First run | Call wallet_store_init |
STORE_LOCKED |
New session | Call wallet_store_unlock |
INVALID_PASSWORD |
Wrong password | Check password (no recovery!) |
| Timeout on wallet ops | Store locked | Unlock first |
INSUFFICIENT_BALANCE |
Empty wallet | Ask owner to fund (see below) |
Requesting Funds from Owner
As an agent, you cannot use faucets directly (captchas). Ask your owner:
// 1. Get your wallet address
const info = await client.callTool({ name: 'faucet_info', arguments: { chain: 'eth' }});
// 2. Ask owner to fund (see "Approximate Costs" section for amounts)
// Example: "Please fund my wallet 0x1234... with ~0.01 SOL or ~$0.50 in ETH"
// 3. Wait for owner to send funds, then proceed with agent_register
Quick Start (MCP Client)
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
import { spawn } from 'child_process';
const server = spawn('npx', ['@quantulabs/8004-mcp'], {
stdio: ['pipe', 'pipe', 'inherit'],
env: { ...process.env, NETWORK_MODE: 'testnet' }
});
const client = new Client(
{ name: 'my-agent', version: '1.0.0' },
{ capabilities: {} }
);
await client.connect(new StdioClientTransport({
reader: server.stdout,
writer: server.stdin,
}));
// Ready - use client.callTool()
Global ID Format
| Chain | Format | Example |
|---|---|---|
| Solana | sol:\x3Cpubkey> |
sol:HHCVWcqs... |
| Ethereum | eth:\x3CchainId>:\x3CtokenId> |
eth:11155111:738 |
| Base | base:\x3CchainId>:\x3CtokenId> |
base:84532:42 |
Core Tools
Read Operations (No wallet needed)
agent_search
Search agents across chains.
await client.callTool({ name: 'agent_search', arguments: {
query: 'trading bot', // Search name/description
chain: 'eth', // Optional: sol, eth, base, arb, poly, op
limit: 20, // Default: 20, max: 100
offset: 0, // Pagination offset
cursor: 'abc...', // Cursor pagination (EVM only, faster)
// Advanced filters (EVM only):
hasMcp: true, // Has MCP endpoint
hasA2a: true, // Has A2A endpoint
active: true, // Active agents only
x402support: true, // Supports x402 payments
mcpTools: ['web-search'], // Has specific MCP tools
a2aSkills: ['translation'] // Has specific A2A skills
}});
// Returns: { results: IAgentSummary[], total, hasMore, cursor? }
cache_search
Fast fuzzy search (FTS5). Use for partial name matches.
await client.callTool({ name: 'cache_search', arguments: {
query: 'Upsense', // Partial match works
chain: 'all',
limit: 20
}});
agent_get
Get agent details by ID.
await client.callTool({ name: 'agent_get', arguments: {
id: 'eth:11155111:738' // Global ID
}});
// Returns: IAgent with name, description, owner, endpoints, metadata
agent_exists
Check if agent exists.
await client.callTool({ name: 'agent_exists', arguments: {
id: 'sol:HHCVWcqs...'
}});
// Returns: { exists: boolean }
reputation_get
Get reputation summary.
await client.callTool({ name: 'reputation_get', arguments: {
id: 'sol:HHCVWcqs...'
}});
// Returns: { averageScore, totalFeedbacks, trustTier (Solana only) }
feedback_list
List feedbacks for an agent.
await client.callTool({ name: 'feedback_list', arguments: {
id: 'sol:HHCVWcqs...',
limit: 20,
minScore: 50 // Optional filter
}});
leaderboard_get
Top agents by reputation.
await client.callTool({ name: 'leaderboard_get', arguments: {
chain: 'sol',
limit: 10
}});
solana_atom_stats_get
ATOM reputation metrics (Solana only).
await client.callTool({ name: 'solana_atom_stats_get', arguments: {
asset: 'HHCVWcqs...' // Solana pubkey (no sol: prefix)
}});
// Returns: { qualityScore, trustTier, uniqueClients, fastEma, slowEma }
solana_integrity_verify
Verify indexer data integrity (Solana only).
await client.callTool({ name: 'solana_integrity_verify', arguments: {
asset: 'HHCVWcqs...'
}});
// Returns: { status: 'valid' | 'syncing' | 'corrupted' }
Write Operations (Wallet required)
Wallet Store Setup (Master Password)
// 1. Initialize store (one-time) - SAVE THE MASTER PASSWORD!
await client.callTool({ name: 'wallet_store_init', arguments: {
password: 'MySecureMaster123!'
}});
// 2. Create wallets (stored in encrypted store)
await client.callTool({ name: 'wallet_create', arguments: {
name: 'my-solana',
chainType: 'solana' // or 'evm'
}});
// 3. On new session, unlock store with master password
await client.callTool({ name: 'wallet_store_unlock', arguments: {
password: 'MySecureMaster123!'
}});
// 4. Now write operations work (all wallets unlocked)
feedback_give
Submit feedback for an agent.
await client.callTool({ name: 'feedback_give', arguments: {
id: 'sol:HHCVWcqs...',
value: 85, // Score 0-100
tag1: 'uptime', // Category tag
tag2: 'day', // Period tag
comment: 'Great agent', // Optional
skipSend: false // true = dry-run (returns unsigned tx)
}});
agent_register
Register new agent on-chain. See "Approximate Costs" section for funding.
await client.callTool({ name: 'agent_register', arguments: {
chain: 'eth', // or 'sol', 'base', etc.
name: 'My Agent',
description: 'Does cool stuff',
tokenUri: 'https://example.com/agent.json', // Optional: your hosted metadata
// If no tokenUri: SDK uploads to IPFS automatically
}});
Approximate Costs
Solana (Devnet/Mainnet)
| Operation | Cost | Notes |
|---|---|---|
agent_register |
~0.01 SOL | Includes ATOM stats account |
feedback_give |
~0.0005 SOL | Event-based, low rent |
feedback_response_append |
~0.0005 SOL | Event-based |
agent_uri_update |
~0.00005 SOL | Tx fee only |
EVM - L2 Chains (Base, Arbitrum, Optimism)
Recommended for lowest costs.
| Operation | Gas | Typical Cost |
|---|---|---|
agent_register |
150-200k | $0.01-0.50 |
feedback_give |
100k | $0.01-0.30 |
feedback_response_append |
60k | $0.01-0.20 |
agent_uri_update |
50k | $0.01-0.15 |
EVM - Ethereum Mainnet
High variability - gas spikes during congestion.
| Operation | Gas | Cost (25-100 gwei) |
|---|---|---|
agent_register |
150-200k | $10-60 |
feedback_give |
100k | $7-30 |
feedback_response_append |
60k | $4-18 |
agent_uri_update |
50k | $3-15 |
Tip: Use L2 chains (Base, Arbitrum) for 10-100x lower costs than Ethereum mainnet.
Dry-Run Mode (skipSend)
Test write operations without funds or broadcasting:
// Returns unsigned transaction, no funds needed
const preview = await client.callTool({ name: 'feedback_give', arguments: {
id: 'sol:HHCVWcqs...',
value: 85,
tag1: 'uptime',
skipSend: true // Dry-run
}});
// preview.content[0].text contains: { unsigned: true, transaction: "base64...", message: "..." }
Supported on: feedback_give, agent_register, agent_transfer, agent_uri_update, feedback_revoke, solana_validation_request, solana_validation_respond
Network Configuration
// Check current network
await client.callTool({ name: 'network_get', arguments: {} });
// Switch to mainnet
await client.callTool({ name: 'network_set', arguments: { mode: 'mainnet' } });
// Switch to testnet (default)
await client.callTool({ name: 'network_set', arguments: { mode: 'testnet' } });
| Network | Solana | Ethereum | Base |
|---|---|---|---|
| testnet | devnet | Sepolia (11155111) | Base Sepolia (84532) |
| mainnet | mainnet-beta | Mainnet (1) | Base (8453) |
x402 Protocol
Payment-linked reputation.
// 1. Build identity for 402 response
const identity = await client.callTool({ name: 'x402_identity_build', arguments: {
agentId: 'sol:HHCVWcqs...'
}});
// 2. Parse payment proof from response header
const proof = await client.callTool({ name: 'x402_proof_parse', arguments: {
paymentResponse: 'base64-encoded-header...'
}});
// 3. Submit feedback with proof
await client.callTool({ name: 'x402_feedback_submit', arguments: {
agentId: 'sol:HHCVWcqs...',
value: 90,
tag1: 'x402-resource-delivered',
tag2: 'exact-svm',
proofOfPayment: proof.proofOfPayment
}});
Error Codes
| Error | Cause | Solution |
|---|---|---|
STORE_LOCKED |
Write op without unlock | Call wallet_store_unlock with master password |
STORE_NOT_INITIALIZED |
No wallet store | Call wallet_store_init first |
INVALID_PASSWORD |
Wrong master password | Check password (cannot recover if lost) |
AGENT_NOT_FOUND |
Invalid ID | Verify global ID format |
INSUFFICIENT_BALANCE |
Wallet empty | Fund wallet address |
PROVIDER_NOT_AVAILABLE |
Chain not initialized | Check network_get |
OASF Standards
// List valid skill slugs
await client.callTool({ name: 'oasf_list_skills', arguments: {} });
// List valid domain slugs
await client.callTool({ name: 'oasf_list_domains', arguments: {} });
// List feedback tags
await client.callTool({ name: 'oasf_list_tags', arguments: {} });
All Tools Reference
Agent Operations
agent_get- Get agent by IDagent_exists- Check existenceagent_search- Search with filtersagent_list_by_owner- List by owner addressagent_register- Register new agent (write)agent_transfer- Transfer ownership (write)agent_uri_update- Update metadata URI (write)agent_metadata_set- Set on-chain metadata (Solana, write)
Feedback Operations
feedback_give- Submit feedback (write)feedback_read- Read single feedbackfeedback_list- List feedbacksfeedback_revoke- Revoke feedback (write)feedback_response_append- Respond to feedback (write)
Reputation Operations
reputation_get- Get summaryleaderboard_get- Top agents
Collection Operations
collection_get- Get collection detailscollection_list- List collectionscollection_agents- List agents in collectioncollection_base_get- Get base registrycollection_create- Create collection (Solana, write)collection_uri_update- Update collection URI (Solana, write)
Wallet Store (Master Password)
wallet_store_init- Initialize store with master passwordwallet_store_unlock- Unlock all wallets with master passwordwallet_store_lock- Lock store (secure wipe)wallet_store_status- Get store statuswallet_store_change_password- Change master passwordwallet_store_migrate- Migrate legacy wallets
Wallet Operations
wallet_list- List wallets in storewallet_info- Wallet detailswallet_create- Create new wallet (requires unlocked store)wallet_import- Import private key (requires unlocked store)wallet_delete- Delete wallet (requires unlocked store)wallet_security- Configure auto-lock timeout
Cache Operations
cache_search- Fast FTS5 searchcache_refresh- Force refreshcache_stats- Cache statisticscache_sync_status- Sync status
Solana-Specific
solana_atom_stats_get- ATOM metricssolana_atom_stats_initialize- Init ATOM account (write)solana_trust_tier_get- Trust tiersolana_enriched_summary_get- Combined metricssolana_agent_wallet_get- Get operational walletsolana_sign- Sign with agent walletsolana_verify- Verify signaturesolana_validation_request- Request validation (write)solana_validation_respond- Respond to validation (write)solana_validation_read- Read validationsolana_validation_wait- Wait for responsesolana_validation_pending_get- Pending validationssolana_integrity_verify- O(1) integrity checksolana_integrity_verify_deep- Deep verification
EVM-Specific
evm_agent_wallet_set- Set operational wallet (write)evm_agent_wallet_unset- Remove operational wallet (write)
x402 Protocol
x402_identity_build- Build agent identityx402_proof_parse- Parse payment proofx402_feedback_build- Build feedback filex402_feedback_submit- Submit with proof (write)
Configuration & Health
config_get- Current configconfig_set- Update configconfig_reset- Reset to defaultsnetwork_get- Network statusnetwork_set- Switch networkhealth_check- System health (server, chains, wallet store, cache)faucet_info- Testnet faucet URLs and funding info
OASF Standards
oasf_list_skills- Valid skill slugsoasf_list_domains- Valid domain slugsoasf_list_tags- Feedback tagsoasf_validate_skill- Validate skilloasf_validate_domain- Validate domainoasf_validate_tag- Validate tag
Crawler
crawler_fetch_mcp- Fetch MCP capabilitiescrawler_fetch_a2a- Fetch A2A agent cardcrawler_is_alive- Health check
IPFS (Configured by default)
ipfs_configure- Override default IPFS/Pinata settings (optional)ipfs_add_json- Store JSON (max 1MB)ipfs_add_registration- Store registration fileipfs_get_registration- Retrieve registration
Note: IPFS is pre-configured with a shared Pinata account. No setup required for basic usage.
Claude Code Integration
This section is for Claude Code / AI assistants using 8004-MCP tools.
Intent Mapping
| User Says | Tool | Notes |
|---|---|---|
| "find agents", "search for X" | agent_search or cache_search |
Use cache_search for partial names |
| "agent details", "info on X" | agent_get |
Pass global ID |
| "is X reliable?", "reputation" | reputation_get |
Returns score + trust tier |
| "top agents", "best agents" | leaderboard_get |
Chain optional |
| "reviews for X", "feedback" | feedback_list |
|
| "my wallets" | wallet_list |
|
| "switch to mainnet" | network_set |
mode: 'mainnet' |
| "OASF skills/domains/tags" | oasf_list_* |
DO NOT use web search for:
- Agent registry queries (use 8004 tools)
- Reputation/feedback lookups
- OASF standards
- x402 protocol
Search Strategy
- Exact name known →
agent_searchwithnameQuery - Partial name →
cache_search(fuzzy FTS5) - By capabilities →
agent_searchwithhasMcp,hasA2a,mcpTools, etc. - By owner →
agent_searchwithowner
Write Operation Flow
- Check
wallet_store_status- is store initialized and unlocked? - If not initialized:
wallet_store_init(save master password!) - If locked:
wallet_store_unlockwith master password - If no wallet:
wallet_createfor needed chain - Execute write operation
- Report transaction hash on success
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install 8004-mcp - After installation, invoke the skill by name or use
/8004-mcp - Provide required inputs per the skill's parameter spec and get structured output
What is Agent identity and reputation registration?
Register and manage agent identity, reputation, and feedback on Solana and EVM chains using the multi-chain ERC-8004 Agent Registry protocol. It is an AI Agent Skill for Claude Code / OpenClaw, with 1612 downloads so far.
How do I install Agent identity and reputation registration?
Run "/install 8004-mcp" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Agent identity and reputation registration free?
Yes, Agent identity and reputation registration is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Agent identity and reputation registration support?
Agent identity and reputation registration is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Agent identity and reputation registration?
It is built and maintained by MonteCrypto (@montecrypto999); the current version is v0.2.3.