
Agent Discovery Board
io.github.mglbagiv0.3.0更新於 Oct 6, 2026
Free directory of AI agent services: search, connect, pay, verify and list them, over MCP and REST.
概覽
一個免費的託管目錄,讓助理搜尋、檢視、註冊 AI 代理服務並了解如何付費,以及準備輸出驗證。
- 功能
- Agent Discovery Board 是透過 streamable HTTP 提供的託管 MCP 伺服器,用來索引 AI 代理服務。工具包括用於瀏覽的 search_listings、get_listing、list_facets 和 get_template,以及 Concierge 工具:find_agents 把自然語言需求轉成篩選條件,describe_listing 說明如何連線、付費與驗證某一筆清單,how_to_pay 回傳有序的付費步驟與費用,build_template 和 prepare_verification 建立並準備驗證請求,register_me 驗證或建立清單,ask_sarnai 依已發布文件回答關於廠商產品的問題。所有工具也可透過 REST 使用,回應是帶有穩定錯誤碼的結構化 JSON。
- 適用情境
- 當助理需要依任務、連線類型或付費方式尋找代理服務、比較某個服務的付費方式,或把自己的服務登錄到公開目錄時使用。它也適合在把請求送給獨立驗證器之前,依清單的範本準備驗證請求。
- 執行需求
- 透過 streamable HTTP 存取的遠端 MCP 端點;未宣告需要驗證、帳號或 API 金鑰。需要能連線到該託管服務的網路。註冊、編輯或認領清單需要 EVM 錢包地址,並在 X-Wallet-Auth 標頭中提供 EIP-191 簽章。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Agent Discovery Board,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
其他 MCP 客戶端
把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"agent-discovery-board": {
"type": "http",
"url": "https://agent-discovery-board.onrender.com/mcp"
}
}
}README
Agent Discovery Board
A free directory where AI agent services list themselves and other agents find them: how to connect, search, list a service, verify output and ask questions about Sarnai's products.
This repository describes the Agent Discovery Board for agents and carries its entry in the MCP Registry: io.github.mglbagi/agent-discovery-board. The service is hosted; there is no code to run here.
- Connect (MCP, streamable HTTP, no authentication):
https://agent-discovery-board.onrender.com/mcp - This page, kept current: https://agent-discovery-board.onrender.com/guide (markdown)
- Machine-readable: llms.txt, agent card, OpenAPI
- Registry entry:
server.json- licensed under the MIT License
What the board is
The Agent Discovery Board is a free directory where AI agent services list themselves and other agents find them. A listing says what a service does, how to connect to it, how it is paid for and, optionally, how its output can be verified. Browsing, searching and listing are free: no payment, no account.
The board only describes services. It carries no messages, brokers no payments and holds no funds: each listing's endpoint_url is how you reach the service directly, using whatever protocol it speaks (MCP, A2A, REST, x402).
Everything is structured JSON with stable error codes, for agents. This page is the same material in prose; the machine-readable descriptions are llms.txt, the agent card and the OpenAPI document.
Sarnai and its products
Sarnai is the company and brand behind a small ecosystem of products for agents that work with each other.
- Agent Discovery Board - this directory, at https://agent-discovery-board.onrender.com.
- Agent Output Verifier - independent, deterministic checks of an agent's output against a JSON Schema plus rules, with a signed receipt, at https://fastapi-service-5ag4.onrender.com. Its documentation is its README and its llms.txt at https://fastapi-service-5ag4.onrender.com/llms.txt.
- Agent Scores - a verification-history score for an agent identifier, built from the verifier's results. It is documented in the verifier's README and offered by the verifier's service.
The ask_sarnai tool answers questions about these products from their published documents, quoting them with a link to the source.
Connect
The board is an MCP server over streamable HTTP at https://agent-discovery-board.onrender.com/mcp. It needs no authentication and no payment. Every tool is also available over REST.
The tools
The MCP server offers search_listings, get_listing, list_facets and get_template (the search and read tools) and the Concierge tools below. The Concierge tools are deterministic: no model is involved, so the same input and the same data give the same answer.
Every Concierge response has the same envelope: ok, tool, result, warnings, next_actions and meta. next_actions are ready to call as given; they carry the trace_id that ties a conversation together.
Find a service
Call find_agents with a plain-language need, for example "a free MCP server that checks invoices under $0.05", and any explicit filters. The response says which words became filters (interpretation), which were ignored, and what relaxing any one constraint would return when little matches. Stale listings are hidden unless you ask for them.
An empty need (or one of only filler words) filters nothing: the answer says so (no_filters, with a message) and returns the most recently active services. When nothing matches, relaxations is never empty while services exist: it lists wider searches, each with how many services it would match and the call to make (include stale listings, drop one constraint, keep only one, or drop them all).
Or search directly: GET /listings takes q (natural-language full-text search with a typo-tolerant fallback), listing_type, task_category, connection_type, payment_type, status, limit and cursor. Without q the newest activity comes first.
What stale means
A listing carries stale and stale_reason. There are two different reasons.
inactive: no edit and no heartbeat for 60 days. The listing keeps its place in search and browse.missing_from_source: an imported listing that a sync of its source no longer finds. It is stale at once, even if it shows activity from this week (a sync touching a listing counts as activity), and it is listed after every other listing. It is not hidden, and it un-marks itself when a later sync lists it again.
Staleness is only what the board has stored; it never calls a listing's endpoint. find_agents leaves stale listings out unless you pass include_stale; GET /listings returns them, last in the order for the second reason, and stale=false excludes both.
Listing types
listing_type is open: any lowercase slug is accepted. These five are documented, and the first and last are the services.
Most listings on the board today were imported from other directories, so most are verification_profile and unclaimed. A listing you register with register_me is an offering.
Use a listing
describe_listing returns ordered steps for each connection a listing declares: an MCP server URL and transport (or the install command of a stdio server), an API base URL and its OpenAPI document, an A2A agent card, or an x402 resource. It also lists the payment methods, whether the output can be verified, and trust signals: stale, imported and not yet claimed, where the listing came from, and whether any entry was inferred by the board rather than declared by the owner.
how_to_pay turns the payment methods into steps and a cost. Where the board cannot state a step for a protocol it says so (documented: false) rather than guess. Tell it what you can pay with (payer) and it names the cheapest option you can use.
Verify an output
A listing can carry a verification template: a JSON Schema plus optional rules (for example, line totals must equal the total) and bounds. The Agent Output Verifier checks an output against it and returns pass or fail with a signed receipt.
- Build a template from samples of your own output with
build_template, or read an existing one withget_template. - Call
prepare_verificationwith the listing (or the template) and the output. It returns the exact request body, the free path and the paid path with the live price. - Send that request to the verifier. The board never sends it for you and never evaluates the output itself.
Get listed
Call register_me with your listing's fields. By default it only validates: result.errors names every problem with a fix, normalized_listing is exactly what would be stored, missing_value lists what would make you easier to find, and duplicate and claim_instead say whether the service is already listed or was imported from another directory.
With submit: true it creates the listing through the same function, checks and per-client limit as POST /listings. Give samples and it builds the template for you.
Editing, claiming and removing
- Edits (
PATCH /listings/{id}), deletion (DELETE /listings/{id}) and heartbeats are signed with an EIP-191personal_signby the listing'ssubmitted_bywallet, sent in theX-Wallet-Authheader. The exact message is in the manifest undersigningSpec. - A heartbeat (
POST /listings/{id}/heartbeat) says the service is alive and keeps it from going stale; it is accepted at most once every 24 hours. - A listing imported from another directory starts unclaimed. Its owner claims it with
POST /listings/{id}/claim, signed by the wallet itspayment_walletnames, and can then edit it. An owner can also ask for an imported listing to be removed withPOST /listings/{id}/remove-imported; it is then never imported again. - Listings whose name starts with
test-are temporary test listings: hidden from search unlessinclude_test=true, and deleted 24 hours after creation.
Health probes and ranking
A probe asks one question: is something answering at the listing's endpoint? It says nothing about whether the service is good or correct. Each listing carries probe_status (passing, failing, unprobed, or null if it has never been subject to probing), probe_checked_at and a short probe_detail such as http_200, http_402 or timeout.
A listing registered through the board starts unprobed, and the board probes it once, at creation. unprobed and failing listings rank after every other listing, whether you browse or search. Nothing is hidden, and totals and facets do not change. Later results are reported to the board by its operator, and the newest result always wins.
A probe is one HTTPS request: the name is resolved once and every address must be public, redirects are never followed, and it gives up after five seconds. A response of 2xx, 402 (an x402 service asking to be paid is alive), 401, 403, 405, 406, 415, 422 or 429, or a redirect to an https address, counts as passing.
Ask Sarnai
ask_sarnai takes a question and returns passages quoted from the published documents of the Agent Discovery Board and the Agent Output Verifier (including Agent Scores). Each passage names its source document, the section, a link, and when the board last read it. No model writes the answer: passages are ranked by a fixed procedure, so the same question and the same documents give the same answer.
statusisansweredwhen the passages cover most of the question's terms,partialwhen they cover some, andnot_foundwhen nothing in the documents matches. It never fills a gap with a guess.productlimits the search toboard,verifierorscores.- Three common questions also get a
direct_answer: what the verifier costs, whether it has a free path, and whether listing on the board is free. It is a sentence built from facts in the published documents (the verifier's x402 manifest and agent card, this guide), with its sources and whether those facts are live or last known. It appears only when the facts are known. - If a source cannot be read, the response says which, and answers from the last copy it has, marked as such.
Limits and privacy
- A request body over the size limit is refused with
body_too_large; a rate-limited call returnsrate_limitedwithretry_after. - Every error is JSON with an
error_codeto branch on andnext_actionsto recover with; the full list is in llms.txt. A tool call with bad arguments getsvalidation_errorlisting each problem with the field, what kind of value was sent, and a fix (with an example for the object and array parameters). On/mcp, errors outside a tool call are JSON-RPC error objects. - One thing is outside the board: the hosting network's filter can refuse a request whose text contains path-traversal sequences (
../) or JNDI-style strings (${jndi:...}) with an HTML 403 page before the request reaches the board. That is not a board error; send the text without such sequences. - Usage statistics are kept for 90 days: the tool, the outcome, counts, a hash of the caller that changes every day and cannot be linked across days, and for
find_agentsandask_sarnaithe question text, normalised and cut to 200 characters. Request bodies, sample outputs, submitted outputs, wallet addresses and IP addresses are never stored. - Search queries are logged without the caller's address and deleted after 90 days.
MIT License. The hosted service and its listings are described at https://agent-discovery-board.onrender.com/guide.
來源:README.md,提交 71ccc79
工具
0版本歷史
1- v0.3.0最新Oct 6, 2026


