Hanzo
OpenapiTools

Lists the MCP servers the public registries publish, as we hold them: our…

Lists the MCP servers the public registries publish, as we hold them: our canonical copy of registry.modelcontextprotocol.io, plus what we decided about…

GET /v1/tools/catalog

Addresshttps://api.hanzo.ai/v1/tools/catalog
MethodGET
Operationget_tools_catalog
AuthAuthorization: Bearer $HANZO_API_KEY

Lists the MCP servers the public registries publish, as we hold them: our canonical copy of registry.modelcontextprotocol.io, plus what we decided about each entry.

This is the SHELF an org picks from. A listing with a streamable-http endpoint can be enabled as-is — POST /v1/tools/mcp/servers with its id — and its tools then join the org's tool plane and the fleet's MCP door. A listing that only ships a stdio package needs a process to run it, which is why the transports are on every entry rather than implied.

Hidden entries are absent: they are the ones we took off the shelf. A platform SuperAdmin sees them, because the same query answers "what is on the shelf" and "what is in the catalog" and two queries would drift apart.

It is PAGED — 50 by default, 200 at most. The public registry publishes tens of thousands of servers, so an unbounded answer is a twenty-megabyte response and a storefront that renders in a minute. total is the whole match, not the page.

Request

5 fields.

FieldInTypeRequiredDescription
qquerystringQ matches the name, title or description, case-insensitively.
featuredquerystringFeatured keeps only the listings we put on the front of the shelf, and only when it is exactly the string "true".
officialquerystringOfficial keeps only the vendors' OWN servers — not third-party copies of them — and only when it is exactly the string "true".
limitqueryintegerLimit bounds the page: default 50, maximum 200.
offsetqueryintegerOffset skips that many listings.

Response

StatusBodyMeaning
200mcpCatalogok

200 body — 28 fields.

FieldInTypeAlwaysDescription
catalogbodyMCPListing[]Catalog is this page of listings, featured first, then by name.
catalog[].descriptionbodystringDescription is the publisher's one-line summary.
catalog[].featuredbodybooleanFeatured puts the listing on the front of the shelf.
catalog[].hiddenbodybooleanHidden keeps the listing out of the org-visible catalog. Curation: a sync never changes it.
catalog[].idbodystringID addresses the listing in a URL. It is the reverse-DNS NAME with its one slash written as an underscore — reversible, because a namespace never contains an…
catalog[].logobodystringLogo is the brand mark to render for the listing — the publisher's icon when the entry carries one, or the one an admin set.
catalog[].namebodystringName is the publisher's reverse-DNS name, e.g.
catalog[].officialbodybooleanOfficial is whether this is the vendor's OWN server rather than someone else's copy of it.
catalog[].packagesbodyMCPPackage[]Packages are the runnable package forms — npm, pypi, oci — each with the runtime that launches it and the transport it then speaks.
catalog[].packages[].identifierbodystringIdentifier is the package name or download URL.
catalog[].packages[].registrybodystringRegistry is where the package is fetched from: npm, pypi, oci, nuget, mcpb.
catalog[].packages[].runtimebodystringRuntime is the publisher's hint for what launches it: npx, uvx, docker.
catalog[].packages[].transportbodystringTransport is what the launched process speaks: usually "stdio".
catalog[].packages[].versionbodystringVersion is the exact published package version.
catalog[].registrybodystringRegistry is the upstream this row was synced from.
catalog[].remotesbodyMCPRemote[]Remotes are the hosted endpoints the publisher serves the server at.
catalog[].remotes[].transportbodystringTransport is "streamable-http" or "sse".
catalog[].remotes[].urlbodystringURL is the endpoint.
catalog[].repobodystringRepo is the source repository URL, when the entry names one.
catalog[].sitebodystringSite is the project's homepage, when the entry names one.
catalog[].syncedbodyintegerSynced is when this row was last confirmed against upstream, Unix seconds.
catalog[].titlebodystringTitle is the human-readable display name, when the entry carries one.
catalog[].transportsbodystring[]Transports are the distinct transports this server can be reached over, sorted: some of "stdio", "streamable-http", "sse".
catalog[].vendorbodystringVendor is the namespace half of Name — the publisher, e.g.
catalog[].versionbodystringVersion is the published version of this listing.
limitbodyintegerLimit is the page size that was actually applied — the default or the clamp, when the request asked for neither or for too much.
offsetbodyintegerOffset is where this page started, so a caller pages from what the server did rather than from what it asked for.
totalbodyintegerTotal is how many listings the filter matched, which is more than this page holds whenever there is a next one.

Failure carries the platform error shape — see Errors.

Examples

hanzo tools catalog list

Tools API · All Hanzo APIs · Interactive reference

How is this guide?

On this page