MCP tool surface
The directory is an MCP server. Six tools. Structured JSON, agent-optimized, flat where possible. Every response echoes agent_identity so the agent can reason about anonymous vs. credentialed state.
Anonymous access, full directory. Reads require no credential — discover, query, and transact without authentication. An Observer Protocol credential unlocks higher rate limits and write access for reviews.
search_merchants
Search merchants by rail, chain, category, agent-callable tier, trust tier, USDC, and free text. Ranked by trust tier then verification recency. Reads are ungated: anonymous and credentialed callers see all tiers, same limits.
args: query?, rail?, chain?, category?, agent_callable_tier?, trust_tier_min?, accepts_usdc?, limit?
returns: { results: MerchantSummary[], total_matching, truncated, agent_identity }get_merchant
Full record for one merchant including all rails, payment endpoints, and OP attestation. Tier 2+ requires an AT credential.
args: id: string
returns: { merchant: Merchant, agent_identity } | { error }verify_payment_endpoint
Live check against a merchant's declared payment endpoint for a rail. Returns health, detail, and rail-specific evidence.
args: merchant_id: string, rail: lightning|bolt12|l402|usdt
returns: { merchant_id, rail, status, detail, checked_at, evidence, agent_identity }list_categories
The category taxonomy with merchant counts.
args: (none)
returns: { categories: { id, label, merchant_count }[] }list_rails
Supported rails and their merchant counts, with USDT chain breakdown.
args: (none)
returns: { rails: { rail, label, merchant_count, chains? }[] }whoami
Resolved credential state and rate limits for the calling agent.
args: (none)
returns: { authenticated, tier_cap, limits, credential? }Authentication
Discovery and transaction need no credential — reads are ungated. Present an Observer Protocol DirectoryAccessCredential to raise rate limits and unlock write access (reviews). Hosted: X-AT-Credential header (base64url JSON). Local stdio: AT_CREDENTIAL env var. Anonymous when absent.
Error codes
credential_required write/privileged operation attempted without a credential (reads never return this) credential_invalid presented credential failed verification rate_limited caller exceeded their bucket unknown_merchant id did not resolve unsupported_rail rail not present on this merchant verification_unavailable downstream verification dependency failed