Agent MCP Directory

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

Every tool is read-only and answers from the data files of edition 2026-11-04. Paginated tools also take limit (1 to 100) and cursor.
ToolWhat it returnsParameters
search_directoryLists 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_companyReturns 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_categoriesLists 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_statsReturns 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_censusReturns 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.

curl -s 'https://agentmcpdirectory.com/api/v1/get_company?domain=stripe.com' | jq .observation

Ask 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

FileWhat it holds
/openapi.jsonOpenAPI 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-catalogThe RFC 9727 linkset: the API, the MCP server and the ask endpoint with their descriptions.
/.well-known/mcp/server-card.jsonThe MCP server card: name, version, remote URL and protocol versions. The same card is served at /mcp/server-card.
/.well-known/mcp.jsonThe manifest: endpoint, transport and the tools with their input schemas.
/.well-known/ai-catalog.jsonAI 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.xmlSchema feeds: the directory rows and the census files as JSON-LD lines under /feeds/, named in robots.txt.
/.well-known/agent-skills/index.jsonOne 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

CredentialNone. 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 limit120 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.
ErrorsJSON, 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.
WritesThere 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.
CORSEvery 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.