WEBMCP.COM

API for Agents

Query the WebMCP directory.

Read-only JSON API for agents. List WebMCP-enabled sites, fetch their tools and input schemas, or check whether a given URL exposes any.

TL;DR

Base URL https://webmcp.com. JSON responses, no auth, CORS open (Access-Control-Allow-Origin: *). For a one-shot probe of an arbitrary URL, use /api/v1/lookup?url=….

GET /api/v1/lookup

Probe an arbitrary URL

Given any URL, return whether the site exposes WebMCP tools and — if so — its full record. The host is extracted, www. stripped, and path-scoped demos (e.g. googlechromelabs.github.io/webmcp-tools/demos/*) are matched by URL prefix.

ParamTypeDescription
urlstringAny URL on the page being probed. The host is extracted; path-scoped demos match by prefix.
hoststringAlternative to url. www. is stripped before matching.
Example — direct host match
GEThttps://webmcp.com/api/v1/lookup?url=https://store.nekuda.ai/checkout
{ "ok": true, "supported": true, "host": "store.nekuda.ai", "matchedHost": "store.nekuda.ai", "site": { "host": "store.nekuda.ai", "url": "https://store.nekuda.ai", "desc": "AI-native demo storefront", "type": "demo", "apiSurface": "spec", "toolCount": 13, "tools": [ /* 13 tools with inputSchema */ ] } }
Example — not supported
GEThttps://webmcp.com/api/v1/lookup?url=https://example.com
{ "ok": true, "supported": false, "host": "example.com", "message": "no WebMCP tools registered for this host in webmcp.com directory" }
GET /api/v1/sites

List & filter sites

Returns directory entries. All params are optional and combinable. Use fields to control response size: full includes every tool's inputSchema, summary drops schemas, minimal returns only name/kind/impl/description.

ParamTypeDescription
typelive | demo | allFilter by site type. Defaults to all.
qstringSubstring search across host, description, URL, and every tool name/description.
toolstringReturn only sites that expose a tool whose name contains this substring.
kindread | write | actionFilter sites by tool kind. Repeat to OR (e.g. kind=read&kind=write).
implimperative | declarativeFilter by tool implementation style.
apiSurfacespec | polyfill | mixedFilter by which API surface the site uses to register tools. spec = WICG registerTool or declarative DOM. polyfill = @mcp-b/webmcp-polyfill provideContext extension. mixed = both. Repeat to OR.
fieldsfull | summary | minimalResponse shape. Defaults to full.
limitintegerMax sites to return. Default 100, max 500.
offsetintegerPagination offset.
Example — live sites only, summary payload
GEThttps://webmcp.com/api/v1/sites?type=live&fields=summary
Example — sites that expose a checkout tool
GEThttps://webmcp.com/api/v1/sites?tool=checkout&fields=minimal
GET /api/v1/sites/{host}

Get a single site

Returns the full record for one directory entry, including every tool with its JSON Schema. host is the directory key — www. is stripped before matching.

GEThttps://webmcp.com/api/v1/sites/store.nekuda.ai
GET /api/v1/sites/{host}/tools

List tools for a site

Returns the tools array only — no surrounding site metadata.

GEThttps://webmcp.com/api/v1/sites/store.nekuda.ai/tools
GET /api/v1/sites/{host}/tools/{tool}

Get one tool definition

Returns a single tool's full record including its inputSchema.

GEThttps://webmcp.com/api/v1/sites/store.nekuda.ai/tools/add_to_cart
{ "ok": true, "host": "store.nekuda.ai", "url": "https://store.nekuda.ai", "tool": { "name": "add_to_cart", "kind": "write", "impl": "imperative", "page": "/cart", "description": "Add a product to the shopping cart…", "inputSchema": { "type": "object", "properties": { "product_id": { "type": "string", "description": "The product ID to add" }, "quantity": { "type": "number", "description": "Number of items (default 1)" } }, "required": ["product_id"] } } }
GET /api/v1/tools

Search every tool across every site

Flat search across all tools in the directory. Each result carries the host and URL it belongs to.

ParamTypeDescription
qstringSubstring match against tool name and description.
kindread | write | actionFilter by kind. Repeat to OR.
implimperative | declarativeFilter by implementation style.
limit / offsetintegerPagination — default 100, max 500.
GEThttps://webmcp.com/api/v1/tools?q=cart&kind=write
GET /api/v1/stats

Aggregate directory stats

Useful for status dashboards. Returns totals plus a breakdown by tool kind and implementation, and the top 10 sites by tool count.

GEThttps://webmcp.com/api/v1/stats
{ "ok": true, "version": 1, "sites": 18, "liveSites": 3, "demoSites": 15, "tools": 66, "byKind": { "action": 33, "read": 26, "write": 7 }, "byImpl": { "imperative": 58, "declarative": 8 }, "topSitesByToolCount": [ /* 10 entries */ ] }
GET /api/openapi.json

OpenAPI 3.1 spec

The full machine-readable contract for this API. Works with Swagger UI, OpenAPI codegen, or a ChatGPT action.

GEThttps://webmcp.com/api/openapi.json

Built and maintained by nekuda. Missing a site? Submit it on the directory.