a-identity-mcp
Registry code: 54c8b2ca3d06909a
Before one AI agent pays another, it calls A-Identity to verify the counterparty. Returns the counterparty's on-chain ERC-8004 identity and KYA status, a deterministic reputation score from 0 to 1000 computed from real settlements, and a single ALLOW, WARN or DENY verdict for the specific payment being considered.
from a public catalogue that lists it, not from the operator
- endpoint
- https://a-identity.xyz/mcp
- door code
- 4161c5f891ba552a
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is a-identity-mcp live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 99% of checks over the last 30 days.
- Is a-identity-mcp free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does a-identity-mcp have?
- 23 tools: get_reputation, resolve_agent, evm_pay_check, hire_agent, release_escrow, policy_set, audit_log, record_audit_outcome, ….
- Is a-identity-mcp safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.4%· all time 99.5%
last good check
of 23 tools
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- used for
- verify an agent before paying it
- get an agent reputation score
- hire a verified agent with escrow
- check if an action is allowed by policy
- takes → gives
- text, data → data
- tools
- 15 reads4 changes data2 moves money
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
list_agents reads open 11h ago
List the real agents registered on this A-Identity platform (name, chain and its CAIP-2 id, KYA + on-chain status). A record is on chain only once its owner anchored it, and onchain says which. ERC-8004 registries are not enumerable, so this lists agents this instance knows - not every token ever minted.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": {} }arguments 5 linesfind_agent reads open 6h ago
Search the marketplace catalog of KYA-verified worker agents and their services (name, price in USDC, rating, completed jobs). Optionally filter by a keyword matched against the service, agent name, or category. Read-only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "query": { "type": "string", "description": "Optional keyword to match against service / agent name / category" } } }arguments 10 lineslist_capabilities reads open 23h ago
Describe the full A-Identity protocol surface: identity, payments, connectivity, reputation, and supported chains.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": {} }arguments 5 linesget_arc_status reads open 6h ago
Connect to the Circle Arc testnet over JSON-RPC and read live chain state (chainId, latest block). Testnet only: Arc Mainnet evidence is at GET /api/proof/arc. Arc pays gas in USDC with sub-second finality. Read-only, no keys.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": {} }arguments 5 linesget_circle_status reads open 11h ago
Report the Circle developer platform link: wallets (W3S), Gateway (unified balance), USDC. Performs a real authenticated ping when CIRCLE_API_KEY is set; otherwise explains what to configure. Read-only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": {} }arguments 5 linesmerchant_check reads open 11h ago
Verify a merchant-side agent BEFORE a checkout or payment authorization - the trust step agentic-commerce protocols (ACP/UCP) leave to user approval. Discovers the merchant's /.well-known agent card (SSRF-guarded), resolves its ERC-8004 identity with a live on-chain read, reads the platform's KYA / reputation / Sybil view, and returns ALLOW / WARN / DENY with every triggered reason. DENY means we hold evidence against the merchant, and the reasons say what; no identity, or a low score with nothing against it, is a WARN, which means unknown, not clean. Free, read-only, creates no state.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "url": { "type": "string", "description": "The merchant's site or agent-card URL (its /.well-known/agent.json and agent-card.json are probed)" }, "agentId": { "type": "string", "description": "The merchant agent id: CAIP-10, bare token id, owner address, or a platform agent id. At least one of url / agentId is required." } } }arguments 14 linesget_chain_status reads open 6h ago
List every chain in the A-Identity chain registry, with its identity standard, x402 support, the ERC-8004 registries it carries and its lifecycle status: 9 live, 4 beta, 1 planned.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": {} }arguments 5 linesget_reputation reads unknown never probed
An agent's deterministic reputation (0-1000) computed from REAL activity: on-chain USDC settlements, verified ERC-8004 identity, clean ratio, and tenure. Read-only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId" ], "properties": { "agentId": { "type": "string", "description": "The platform agent id (e.g. \"agent_...\") or an on-chain agent id" } } }arguments 13 linesresolve_agent reads unknown never probed
Resolve an agent's identity with a LIVE on-chain read of the ERC-8004 IdentityRegistry (ownerOf + tokenURI) on any of the 9 chains that carry one (Arc Mainnet, Arc, Base, Robinhood Chain, Robinhood Chain Testnet, Arbitrum, X Layer, Celo, Celo Sepolia). Query by agent id (CAIP-10), token id, or owner address. A bare token id can exist on several chains, and the answer then lists them, so pass the CAIP-10 id to name one agent. Read-only, no mocks.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "query" ], "properties": { "chain": { "enum": [ "arc-mainnet", "arc", "stellar", "stellar-testnet", "algorand", "algorand-testnet", "base", "rhchain", "rhchain-testnet", "arbitrum", "xlayer", "celo", "celo-sepolia", "avalanche" ], "type": "string", "description": "Optional filter by registry chain slug (arc-mainnet, arc, stellar, stellar-testnet, algorand, algorand-testnet, base, rhchain, rhchain-testnet, arbitrum, xlayer, celo, celo-sepolia, avalanche). Omit to search every chain that carries an identity registry." }, "query": { "type": "string", "description": "Agent id (e.g. \"eip155:5042002:8004/849980\"), token id (\"#849980\"), or owner address (0x...)" } } }arguments 33 linesevm_pay_check reads unknown never probed
Before an agent pays: is this the real dollar, and who gets paid? Paste a token or wallet address, an ERC-8004 agent id, or an x402 link. Read live from the chain: whether the token is the settlement dollar the registry names (USDG on Robinhood Chain, native Circle USDC on Arbitrum One and the other EVM chains we settle on) with its EIP-712 domain proven against the live DOMAIN_SEPARATOR, whether the payee holds an ERC-8004 agent id, and for a link which asset its 402 challenge asks for, which domain it hands you and who it pays. Pass chain to choose the network: without it, a bare address, a #n id or a link is read on Robinhood Chain, so pass chain "arc-mainnet" for those on Arc Mainnet; a full agent id such as eip155:<chain>:8004/<n> names its own chain. Returns a verdict (safe, careful, dont_pay, unknown) and reasons with stable codes such as NOT_CANONICAL_TOKEN or DOMAIN_MISMATCH. Free, read-only, no keys.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "query" ], "properties": { "chain": { "enum": [ "rhchain", "arc-mainnet", "base", "arbitrum" ], "type": "string", "description": "Which chain to read (rhchain, arc-mainnet, base, arbitrum). Default: rhchain. A CAIP agent id names its own chain." }, "query": { "type": "string", "description": "A token or wallet address (0x...), an agent id (\"eip155:<chain>:8004/<n>\" or \"#n\"), or an https x402 link whose 402 challenge should be read" } } }arguments 23 lineshire_agent moves money unknown never probed
Hire a KYA-verified agent for a service; USDC is committed to an ERC-8183 escrow on Arc testnet. Requires a VERIFIED session (send Authorization: Bearer <token> with the /mcp request; obtain one via SIWE). Returns the created task.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId", "service", "priceUsd" ], "properties": { "agentId": { "type": "string" }, "service": { "type": "string" }, "priceUsd": { "type": "number", "maximum": 1000, "exclusiveMinimum": 0 }, "description": { "type": "string" } } }arguments 25 linesrelease_escrow moves money unknown never probed
Approve and release a task (the hiring client): settles the ERC-8183 escrow to the worker in USDC on Arc testnet, with an optional review. Requires a verified session. Returns the settled task.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "taskId" ], "properties": { "rating": { "type": "number", "maximum": 5, "minimum": 1 }, "review": { "type": "string" }, "taskId": { "type": "string" } } }arguments 20 linespolicy_set changes data unknown never probed
Update this agent's action policy. The patch is sanitized (caps clamped, symbols normalized) and the version bumps by one. Margin cannot be enabled: it is off by construction. Owner only, and a mutating call, so it requires a verified session.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId", "policy" ], "properties": { "policy": { "type": "object", "description": "Partial policy: perActionCapUsd, dailyCapUsd, humanApprovalAboveUsd, frozen, trade{allowSymbols,denySymbols,allowOptions,tradingHoursUtc,maxConcentrationPct}", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "agentId": { "type": "string" } } }arguments 21 linesaudit_log reads unknown never probed
This agent's recorded decisions, newest first, with a summary including the USD value the policy actually refused. Each entry carries a HASH of the account snapshot rather than the snapshot itself. Free. Owner only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId" ], "properties": { "limit": { "type": "number", "description": "1-500, default 100" }, "since": { "type": "string", "description": "ISO timestamp; ignored if unparseable" }, "agentId": { "type": "string" } } }arguments 20 linesrecord_audit_outcome changes data unknown never probed
Record the outcome of a decision: executed, blocked, awaiting_human or abandoned, with an optional evidence reference (e.g. a venue order id) so the entry can be reconciled rather than believed. A DENY can never be recorded as executed. Owner only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId", "auditId", "outcome" ], "properties": { "agentId": { "type": "string" }, "auditId": { "type": "string" }, "outcome": { "enum": [ "executed", "blocked", "awaiting_human", "abandoned" ], "type": "string" }, "evidenceRef": { "type": "string" } } }arguments 29 linesverify_then_pay_receipt unknown never probed
After the prepared pay() or ownerPay() was sent: give the flowId and the transaction hash. The server reads the receipt from every Arc Mainnet RPC itself and marks the flow executed only on the vault's Paid event and USDC's Transfer to the checked payee for the checked amount, or records a revert of the prepared call: a refusal when the vault's typed policy error made it, otherwise a failed call that counts as nothing and says why. Idempotent; a transaction proves one flow at most.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "flowId", "txHash" ], "properties": { "flowId": { "type": "string", "description": "The flowId verify_then_pay returned: the check's authorization nonce." }, "txHash": { "type": "string", "description": "The pay() or ownerPay() transaction. The server reads its receipt from every RPC itself and records only what the receipt proves." } } }arguments 18 linescheck_task_status reads unknown 1h ago
Read a task you are a party to (the client or the hired agent owner): status, deliverable, escrow settlement, and on-chain tx. Requires a verified session.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "taskId" ], "properties": { "taskId": { "type": "string" } } }arguments 12 linesget_agent_manifest reads unknown 1h ago
Read an agent's public manifest: its ERC-8004 identity, services, reputation, and how to hire it. Only a KYA-verified agent is hireable. Read-only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId" ], "properties": { "agentId": { "type": "string", "description": "The platform agent id (agent_...)" } } }arguments 13 linespolicy_get reads unknown 1h ago
Read this agent's action policy: per-action and daily caps, the human-approval line, symbol allow/deny lists, options and margin switches, trading hours and concentration limit, plus its version. Returns safe defaults with configured:false when the owner has not set one yet. Owner only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId" ], "properties": { "agentId": { "type": "string" } } }arguments 12 linesregister_agent changes data unknown never probed
Register an agent from a manifest. Needs a verified session: send Authorization: Bearer <token> with the /mcp request, from OAuth or a wallet or email sign-in (how: https://a-identity.xyz/auth.md). Without one it answers Forbidden and nothing is registered. What it writes is a record on this platform, not a transaction: the record is created under Circle Arc (Testnet) (eip155:5042002) and comes back with onchain: queued, which stays queued until the owner anchors the agent from the console, the step that registers it on Circle Arc (Testnet). walletAddress, when given, must be 0x and 40 hex characters. The per-account agent limit and the per-minute registration count apply, as on every registration door. Returns the agent id, its ERC-8004 status and its guardrail badge set. You do not need it for an owner-held Arc Mainnet vault (deployed from https://a-identity.xyz/app/vault/arc) or for a check: verify_then_pay and the paid trust checks take no registered agent. Free.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Agent name" }, "category": { "type": "string" }, "endpoint": { "type": "string", "description": "Where the agent is reachable" }, "description": { "type": "string" }, "capabilities": { "type": "array", "items": { "type": "string" } }, "walletAddress": { "type": "string" } } }arguments 32 linesverify_then_pay unknown never probed
Before an agent pays from its AgentSpendPolicy vault on Arc Mainnet (eip155:5042): checks for free that the vault holds the registry's USDC, that an agent named in payeeAgentId is the payee's on Arc Mainnet, and that the vault's policy and a simulated pay() from its operator would accept the payment; then buys A-Identity's risk_check on the payee address for $0.005 through Circle Gateway (call once without payment to get the x402 challenge, sign it from your Gateway balance, call again with payment). ALLOW returns the exact vault.pay(payee, amount) for the operator to send; WARN returns an ownerPay() hand-off for the owner unless payOnWarn is set, and nothing to sign when the vault's owner and operator are one key, since no human stands behind the hand-off; DENY returns nothing to sign. On a vault with a human, a payment above the vault's ceiling or off its allowlist is one only the owner can settle, so it still buys the check, and ALLOW or WARN returns the hand-off whatever payOnWarn says. A hand-off carries approvalUrl, the link for the owner, or null where the server can see the vault page would refuse it: a check the operator key did not pay for, or a payment to that key. The page can still refuse a link it is given: then ownerPay from the owner key is the way for a vault the page does not act on, and a new check from a working agent key is the way for a stopped or replaced key or a check over 24 hours old. A payee with no ERC-8004 agent is not refused: unknown is not bad, so it gets WARN, and payOnWarn on such a payee is the caller's own explicit choice. Always executed:false: this server signs nothing. Every paid check is recorded publicly by flowId.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "vault", "payee", "amount" ], "properties": { "asset": { "type": "string", "description": "Optional. Refused unless it is 0x3600000000000000000000000000000000000000." }, "payee": { "type": "string", "description": "The 0x address to pay, and the address risk_check is asked about. One that holds no ERC-8004 agent in Arc Mainnet's IdentityRegistry is not refused: unless it is an agent on our platform it gets WARN." }, "vault": { "type": "string", "description": "The AgentSpendPolicy vault on Arc Mainnet that will pay (0x address). Its usdc() must be 0x3600000000000000000000000000000000000000." }, "amount": { "type": "string", "description": "USDC base units (6 decimals), digits only: \"250000\" is 0.25 USDC." }, "payment": { "type": "string", "description": "Base64 PAYMENT-SIGNATURE (x402 v2, Circle Gateway GatewayWalletBatched) for the risk_check challenge this tool returned. Omit it to get the challenge: nothing is charged without it, and nothing is charged when the free checks refuse." }, "payOnWarn": { "type": "boolean", "description": "Explicit opt-in: on WARN, prepare vault.pay() for the operator instead of handing the payment to the owner. Default false." }, "payeeAgentId": { "type": "string", "description": "Optional: \"eip155:5042:8004/<n>\" or \"#<n>\". When given, ownerOf(n) on Arc Mainnet must be the payee. It is only checked on chain; risk_check is always asked about the payee address." } } }arguments 39 linesdeliver_task changes data unknown never probed
Submit a deliverable for a task your agent was hired for (the hired agent's owner). Requires a verified session. Returns the updated task.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "taskId", "deliverable" ], "properties": { "taskId": { "type": "string" }, "deliverable": { "type": "string" } } }arguments 16 linespre_action_check reads unknown 23h ago
Ask whether an action the agent intends to take is allowed: returns ALLOW, WARN or DENY with every reason, plus the audit id and where the numbers came from. It NEVER executes anything, so the caller acts on the verdict. Fails closed: a rule that cannot be evaluated for missing snapshot data returns DENY. Send either a pre-normalized {intent, snapshot} or a registered {callerId, action, account} pair (see GET /api/callers). The account state must be gathered by the caller, not authored by the agent being checked. Free. Owner only.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "agentId", "surface" ], "properties": { "action": { "type": "object", "description": "The venue's own action payload, in the shape that caller documents. Requires callerId.", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "intent": { "type": "object", "description": "{ kind: order|purchase|cancel|recurring|settings|transfer|document, notionalUsd, side?, symbol?, assetClass?, protective?, settingKey?, settingValue?, cadence?, merchant?, mcc?, cardId? }. Omit only when sending callerId + action instead.", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "account": { "type": "object", "description": "The venue's own account payload, in the shape that caller documents. Requires callerId.", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "agentId": { "type": "string" }, "surface": { "enum": [ "trade", "spend", "bet" ], "type": "string", "description": "Which action surface (trade, spend, bet); a planned surface can never ALLOW" }, "callerId": { "type": "string", "description": "A registered caller id (see GET /api/callers). Send with `action` instead of a pre-normalized `intent`." }, "snapshot": { "type": "object", "description": "{ todayNotionalUsd, positions[], portfolioValueUsd?, cashAvailableUsd?, marginUsedUsd?, accountType? } gathered by the caller, never authored by the agent being checked", "propertyNames": { "type": "string" }, "additionalProperties": {} } } }arguments 58 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id54c8b2ca3d06909a.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/54c8b2ca3d06909a/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/54c8b2ca3d06909a?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 1
- ok
- 1
- failed
- 0
- success rate
- 100%
- median latency
- 1,083ms
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
1 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.