API and MCP server
Agents can query every directory row through an MCP server at /mcp with five read-only tools, a REST API under /api/v1 described by openapi.json, and an NLWeb /ask endpoint over the rows and pages. No credential is needed, the limit is 120 requests a minute, and each answer names the page to cite.
Connect the MCP server
The server speaks the Streamable HTTP transport at https://agentmcpdirectory.com/mcp: send JSON-RPC 2.0 messages with POST and read the JSON answer. There is no session, no credential and no server-initiated stream, so one request is one answer. Any MCP client that takes a URL connects with the address alone. The card at /mcp/server-card and the manifest at /.well-known/mcp.json say the same thing in the forms clients read.
curl -s https://agentmcpdirectory.com/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'curl -s https://agentmcpdirectory.com/mcp -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_company","arguments":{"domain":"stripe.com"}}}'A tool answers with the result as structuredContent and the same JSON as text. A wrong argument answers isError: true with the parameter list; an unknown tool answers JSON-RPC error -32602. The server also lists resources with resources/list: the page index, the method page, this page and the two dataset files, readable with resources/read.
The five tools
| Tool | What it returns | Parameters |
|---|---|---|
search_directory | Lists directory companies (name, domain, category, MCP status, auth type, transport, tool count, whether a CLI is on record, entry page URL). Filter by words in the company name, registry title or domain, by category, status, auth type, transport or CLI. Call it to find a domain before get_company. | q?: Words to look for in the company name, registry title or domain, for example "stripe" or "pay"; category?: A category name or its slug, for example "Payments & Fintech" or "developer-tools". list_categories gives them all; mcp_status?: verified is the only counted state (tools listed); sign-in is a sign-in challenge, tools not seen, not counted; none-found means no endpoint is on record; auth_type?: none, api-key, oauth-dcr (OAuth with client registration), oauth (OAuth without) or unknown. Rows with no endpoint, and rows whose endpoint did not answer, have no auth type, as on the directory page; transport?: The transport the connector observed; has_cli?: true for companies with a CLI package on record, false for those without. The CLI column is a floor: a package is checked only where a source names one |
get_company | Returns the full directory row for one domain (for example stripe.com): status, endpoint and where it was found, transport, protocol revision, auth type, tool count and the recorded tool names, CLI package, OpenAPI, registries, plus how and when the row was observed and the entry page URL to cite. | domain: The company domain as listed in the directory, for example stripe.com. A leading https:// or www. is ignored |
list_categories | Lists the directory categories with how many companies each holds and how many fall in each status: verified (open, tools listed), sign_in (challenge, tools not seen, not counted), credential_wall, no_answer, no_tools and none_found (no endpoint on record). Call it to see where open servers sit before search_directory. | none |
get_directory_stats | Returns the directory totals: companies, how many count as having an MCP server (tools listed), the split by status, auth type (endpoints that answered, as on the directory page) and transport, the distribution of tool counts across the open servers, and how many have a CLI or an OpenAPI file. No parameters. | none |
get_census | Returns the Act Layer Census: for the Tranco top 10,000 and for the domains on the Ora leaderboard, how many probed domains publish each discovery file (MCP, A2A agent card, agents.json, OpenAPI, OAuth metadata, AI catalog, agent skills), and the same counts per leaderboard category. Filter by cohort, category or file path. | cohort?: top10k is the Tranco top 10,000; ora-leaderboard is the domains scored on Ora's public leaderboard. Omit for both; category?: An Ora leaderboard category, for example "Developer Tools". Only the leaderboard cohort has categories; file?: Words from a file path or label to keep one file, for example "openapi" or ".well-known/mcp.json" |
The REST API
Each tool is also one GET endpoint under /api/v1/, with the parameters in the query string and the same JSON in the answer. /api is the index; /openapi.json describes every operation with its parameters, its response schema and the Error schema; /.well-known/api-catalog links that description the way RFC 9727 says. Paginated endpoints take limit and the next_cursor of the previous page as cursor.
- /api/v1/search_directory?category=Payments+%26+Fintech&mcp_status=verified: Search the directory. Paginated.
- /api/v1/get_company?domain=stripe.com: One company in full.
- /api/v1/list_categories: List categories with counts.
- /api/v1/get_directory_stats: Directory totals.
- /api/v1/get_census?cohort=top10k: Act Layer Census.
- /api: the index with the endpoints, the dataset downloads, the limits and the versioning policy.
curl -s 'https://agentmcpdirectory.com/api/v1/get_company?domain=stripe.com' | jq .observationAsk in plain words
The /ask endpoint follows NLWeb 0.55. It searches the directory rows, the census files and every page, and returns schema.org objects, each with a grounding.source URL to cite. GET takes query; POST takes the NLWeb request object. Add streaming=true, or prefer.streaming, for server-sent events named start, result and complete. With mode=summarize the answer gains a one-sentence summary assembled from the results, never from a model.
curl -s 'https://agentmcpdirectory.com/ask?query=stripe'curl -s https://agentmcpdirectory.com/ask -H 'Content-Type: application/json' -d '{"query":{"text":"payments companies with an open MCP server"},"prefer":{"mode":"list"},"meta":{"version":"0.55"}}'No match answers _meta.response_type: failure with code NO_RESULTS; a missing query answers 400 with INVALID_QUERY. Context objects are accepted and ignored, because the answers come from the data and not from a conversation.
Discovery files
| File | What it holds |
|---|---|
/openapi.json | OpenAPI 3.1 for the REST API and /ask; linked from every page as rel=service-desc and from the Link header of the home page. |
/.well-known/api-catalog | The RFC 9727 linkset: the API, the MCP server and the ask endpoint with their descriptions. |
/.well-known/mcp/server-card.json | The MCP server card: name, version, remote URL and protocol versions. The same card is served at /mcp/server-card. |
/.well-known/mcp.json | The manifest: endpoint, transport and the tools with their input schemas. |
/.well-known/ai-catalog.json | AI Catalog 1.0 with entries for the MCP card, the OpenAPI document, the ask endpoint and every document; the same file is at /.well-known/ard.json. |
/schemamap.xml | Schema feeds: the directory rows and the census files as JSON-LD lines under /feeds/, named in robots.txt. |
/.well-known/agent-skills/index.json | One agent skill that says how to answer a question about a company's MCP server with these tools. |
What a count means
A company has an MCP server in these answers only when the connector listed its tools: has_mcp is true for mcp_status verified and for no other status. A sign-in challenge is its own status, listed apart and never counted. A none-found row says that no source read for this edition names an endpoint, which is not proof that no server exists. Auth types are counted for endpoints that answered, as on the directory page, so a row whose endpoint did not answer has none. Every company answer carries observed_at and the method, so a reader can see when and how the row was observed. The method page holds the full rules.
Access, limits and errors
| Credential | None. The OpenAPI document declares security: [] with no security schemes, and auth.md says the same. The site publishes no OAuth metadata because no endpoint takes a token; metadata for an authorization server that does not exist would send agents to a door that is not there. |
|---|---|
| Rate limit | 120 requests a minute per client address, counted per running instance and announced in RateLimit and RateLimit-Policy headers; a 429 carries Retry-After. The host adds its own limits above that. The whole directory is one download from the data page, so bulk readers never need the API. |
| Errors | JSON, never HTML: {"error":{"code","message","hint","status","docs"}} with the codes invalid_params, not_found, method_not_allowed, rate_limited and internal. A missing endpoint under /api answers 404 with the list of endpoints in the hint. |
| Writes | There are none, so every call is safe to retry and no idempotency key exists. Every call answers in one response; nothing runs long enough to need a job pattern. |
| CORS | Every answer carries Access-Control-Allow-Origin: *, so a browser-resident agent can call the API and the MCP server. The home page also registers two of the tools through WebMCP in browsers that offer it. |
Versioning
The path prefix /api/v1 is the contract. A breaking change, such as a field removed or renamed or a tool removed, ships under /api/v2 while /api/v1 keeps answering for at least 180 days, announced on this page and in the info.version of openapi.json. Additive changes, such as a new field or a new tool, do not change the prefix. The MCP server follows the same rule: its card and its serverInfo.version carry the same version number as the OpenAPI document. The data behind every answer is edition 2026-11-04; the edition is in the X-Dataset-Edition header and in every tool result. Each running instance keeps a data file for ten minutes after it reads it.
Cite the data
Every result names the page it comes from; cite that URL. The data files are published under CC BY 4.0 (see pricing.md). The citation line for the directory is on the data page, where the rows are also published as CSV and JSON.
Agent MCP Directory, "MCP and CLI Directory", 4 November 2026 edition, https://agentmcpdirectory.com/data
What the surface does not do
It does not write, hold accounts, generate text with a model or call any company's MCP server. It does not search beyond this site's own rows and pages, and it does not refresh the data: the connector run behind the rows is the one of 4 November 2026. The directory pages remain the record, and the method explains how each row is made.