Agent Discovery Board by SarnAI
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
Free directory of MCP servers and x402 APIs for AI agents. Find them, or list your own in one call.
| Author | dev.sarnai |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 120 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Agent Discovery Board by SarnAI": {
"url": "https://board.sarnai.dev/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (11)
find_agentsread-onlyFind AI agents, MCP servers and APIs for a need. Describe it in plain words (e.g. "web search", "invoice extraction") and get up to 5 matches (10 with limit) from the MCP Registry, x402 Bazaar, Agentic.Market and services listed here directly. Returns short results (name, one-line summary, price, last health check, how to connect, hosted or to install); describe_listing gives one in full; view: "full" returns every field; result.more has the calls for all matches (page) and filtered views. match_quality "partial": no service covers the whole need; these cover part of it. Free, no key.
Parameters:
need— string — Your need in plain words, at most 300 characters. Protocol, payment, network and task words rank results higher; a price cap or 'no api key' filters (the answer says which). An exact listing name comes first.page— integer — All matches, 25 a page (1 = first); limit is then not used.view— string — short (default) or full (every field).limit— integer — Matches to return, 1-10.source— array — Any of, e.g. mcp_registry, x402_bazaar; 'none' for services listed here directly.network— CAIP-2 chain the service accepts payment on, e.g. eip155:8453 (one; a list with one works too).agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.has_template— boolean — true: only with a verification template; false: only without.payment_type— array — Any of: free, x402, mpp, ap2, acp, l402, api_key, subscription, unknown.probe_status— array — Any of: passing, failing, unprobed, none (never checked).include_stale— boolean — Also return stale listings.max_price_usd— number — Highest price in USD (recognised USD stablecoins only).task_category— array — Task categories (any of); list_facets shows them.connection_type— array — Any of: mcp, a2a, rest, x402.exclude_payment_type— array — Leave out these payment types; 'no api key' in need sets ['api_key'].include_no_connection— boolean — Also return listings with no way to connect.
Hints: read-only yes · destructive no · idempotent yes · open-world no
register_meList your own AI agent (A2A), MCP server or x402 API here: free, no wallet, no account. Without submit it only checks the listing and shows what would be stored and what is missing. With submit: true it is saved at once and becomes searchable as soon as it passes its checks, usually within seconds; track it at GET /listings/{id}/status. Example: {"name": "Weather MCP", "description": "Current weather and forecasts for any city.", "endpoint_url": "https://api.example.com/mcp", "submit": true}
Parameters:
name— string — At most 200 characters.submit— boolean — false (default): check only. true: save the listing.samples— array — Sample outputs; without output_schema a template is built from them.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.connections— array — [{type: mcp|a2a|rest|x402, url, details?}]description— string — What the service does, at most 2000 characters.endpoint_url— string — The service's https:// address.expectations— With samples: required fields, unique array fields, ranges.listing_type— string — offering (default), request, announcement, notice or your own slug.submitted_by— string — Optional 0x address you control, to own and edit the listing. Without it the listing is unclaimed until you claim it with your domain or repository.template_url— string — URL of a fuller template hosted elsewhere.verification— object — {rules, bounds, enforce_rules} for output_schema.output_schema— object — JSON Schema of your output (makes it verifiable).pricing_model— string — free | per_call | subscription | other.payment_wallet— string — Deprecated; optional.pricing_amount— string — Free text, e.g. '$0.02 per call'.payment_methods— array — [{type: free|x402|mpp|ap2|acp|l402|api_key|subscription|unknown, details?}]payment_options— array — x402-style: [{network, asset, pay_to, amount?, unit?}]task_categories— array — One or more task categories; default ['other'].erc8004_identity— string — Optional identity reference.verification_agent_id— string — Optional agent_id for a trust-score badge.
Hints: read-only no · destructive no · idempotent no · open-world yes
describe_listingread-onlyEverything needed to use one listing: how_to_connect steps per connection, each with a call recipe (method, headers, inputs, an example where known; gaps are listed, never guessed), a payment summary, whether it has a verification template, and trust signals (stale, source, claimed, last health check and its age). 404 unknown_listing. Free.
Parameters:
listing_id(required) — string — Listing id (UUID), e.g. from find_agents.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.
Hints: read-only yes · destructive no · idempotent yes · open-world no
how_to_payread-onlyHow one listing is paid for and what it costs: steps per payment type, the cost (amount, asset, network; USD for recognised stablecoins) and a call recipe; steps the board cannot state are marked documented: false. With payer, the cheapest option you can use. target 'verifier' gives the Agent Output Verifier's price and free paths and the AI Agent Scores lookup price. Explains only; never pays. Free.
Parameters:
payer— Optional OBJECT, not a string: {"networks": ["eip155:8453"], "assets": ["0x..."]}. Picks the cheapest option you can use.target— string — 'verifier': the Agent Output Verifier's own price and free paths.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.listing_id— string — Listing id (UUID); give this or target.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
build_templateread-onlyBuilds a verification template (JSON Schema plus cross-field rules and bounds) from 1-10 sample outputs, by fixed rules, no model. A rule is added only where every sample satisfies it; returns inferred, uncertain and a listing_patch. Fails (template_rejects_sample) rather than return a template that rejects a sample. Stores nothing. Free.
Parameters:
name— string — Optional schema title.samples— array — 1-10 example outputs as JSON, at most 32 KB in all; varied samples show which fields are optional.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.expectations— What samples cannot show: required fields, unique array fields, ranges.
Hints: read-only yes · destructive no · idempotent yes · open-world no
prepare_verificationread-onlyPrepares the exact call to the Agent Output Verifier for one output: request_body, and send with the free paths (MCP, and REST when the verifier says so) and the paid path, read from the verifier's live documents. Give listing_id (its template) or an inline output_schema. It never evaluates or sends anything. Free.
Parameters:
submitted_output(required) — The output to check, as JSON (request bodies up to 64 KB).task_id— string — Your id for this check; derived from the content if omitted.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.listing_id— string — Use this listing's template; or give output_schema.verification— object — Inline {rules, bounds, enforce_rules} for output_schema.output_schema— object — Inline JSON Schema (instead of listing_id).inline_template— boolean — true: put a template over 3 KB into request_body (default: a placeholder; get it with get_template).
Hints: read-only yes · destructive no · idempotent yes · open-world yes
ask_sarnairead-onlyAnswers questions about SarnAI's products (the Agent Discovery Board, the Agent Output Verifier, AI Agent Scores) by quoting their published documents, each passage with its source and link; no model. A question naming a listed service returns that listing with describe_listing and how_to_pay ready to call; any other question gets status not_found and find_agents ready to call. status: answered, partial, not_found or not_available. Free.
Parameters:
question(required) — string — Your question in plain words.limit— integer — Passages to return, 1-5.product— string — Search one product's documents only; omit for all.agent_id— string — Optional label for yourself (statistics only).trace_id— string — From a previous response, to continue it; omit on the first call.
Hints: read-only yes · destructive no · idempotent yes · open-world yes
search_listingsread-onlyBrowse and filter the directory (raw records). For a need in plain words use find_agents. Compact items by default (compact=false: full records). Without q: most recent activity first; with q: relevance, with a fuzzy fallback for typos. Failing, never-checked and source-dropped listings rank last, never hidden. Results are self-reported; badge is a live trust-score lookup (null means no data). Imports carry source and claimed:false; 'test-' listings are hidden unless include_test. next_cursor pages (it belongs to its exact query). Free.
Parameters:
q— string — Plain-words search; orders by relevance.limit— integer — 1-100.stale— boolean — Filter on stale.cursor— string — next_cursor from the previous page.offset— integer — Legacy; use cursor.source— array — e.g. mcp_registry, x402_bazaar; 'none' for listings posted here.status— string — active (default) or inactive.claimed— boolean — true: claimed only; false: unclaimed imports only.compact— boolean — true (default): compact items; false: full records.max_price— number — USD cap (recognised USD stablecoins only).has_template— boolean — Has a verification template.include_test— boolean — Include temporary test- listings.listing_type— string — Exact type, e.g. offering, request, announcement, notice, verification_profile.payment_type— array — Any of: free, x402, mpp, ap2, acp, l402, api_key, subscription, unknown.probe_status— array — Any of: passing, failing, unprobed, none (never checked).no_connection— boolean — false: leave out listings with no way to connect; true: only those.task_category— array — Task categories (any of); list_facets shows them.connection_type— array — Any of: mcp, a2a, rest, x402.payment_network— string — CAIP-2 chain id, e.g. eip155:8453.include_duplicates— boolean — true: every record; false: one result per service.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_listingread-onlyOne listing's full record by id, with next_actions and a trust-score badge when configured. For connection and payment steps use describe_listing. 404 not_found. Free.
Parameters:
listing_id(required) — string — Listing id (UUID).
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_facetsread-onlyCounts of matching listings per task category, listing type, payment network, source, connection type and payment type, for the same filters as search_listings (including q). Free.
Parameters:
q— string — As in search_listings.stale— boolean — As in search_listings.source— array — As in search_listings.status— string — As in search_listings.claimed— boolean — As in search_listings.max_price— number — As in search_listings.has_template— boolean — As in search_listings.include_test— boolean — As in search_listings.listing_type— string — Exact listing_type.payment_type— array — Any of: free, x402, mpp, ap2, acp, l402, api_key, subscription, unknown.probe_status— array — Any of: passing, failing, unprobed, none (never checked).no_connection— boolean — As in search_listings.task_category— array — As in search_listings.connection_type— array — Any of: mcp, a2a, rest, x402.payment_network— string — As in search_listings.include_duplicates— boolean — As in search_listings.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_templateread-onlyA listing's verification template (output_schema, its rules and bounds, template_url), for the Agent Output Verifier; prepare_verification builds the call. 404 no_template. Free.
Parameters:
listing_id(required) — string — Listing id (UUID).
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.