getToolsCatalogWithHttpInfo method
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.
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 server. 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.
Note: This method returns the HTTP Response.
Parameters:
-
String q: Q matches the name, title or description, case-insensitively.
-
String featured: Featured keeps only the listings we put on the front of the shelf, and only when it is exactly the string "true".
-
String official: Official keeps only the vendors' OWN servers — not third-party copies of them — and only when it is exactly the string "true".
-
int limit: Limit bounds the page: default 50, maximum 200. A value that is not a positive integer reads as the default.
-
int offset: Offset skips that many listings.
Implementation
Future<Response> getToolsCatalogWithHttpInfo({ String? q, String? featured, String? official, int? limit, int? offset, }) async {
// ignore: prefer_const_declarations
final path = r'/v1/tools/catalog';
// ignore: prefer_final_locals
Object? postBody;
final queryParams = <QueryParam>[];
final headerParams = <String, String>{};
final formParams = <String, String>{};
if (q != null) {
queryParams.addAll(_queryParams('', 'q', q));
}
if (featured != null) {
queryParams.addAll(_queryParams('', 'featured', featured));
}
if (official != null) {
queryParams.addAll(_queryParams('', 'official', official));
}
if (limit != null) {
queryParams.addAll(_queryParams('', 'limit', limit));
}
if (offset != null) {
queryParams.addAll(_queryParams('', 'offset', offset));
}
const contentTypes = <String>[];
return apiClient.invokeAPI(
path,
'GET',
queryParams,
postBody,
headerParams,
formParams,
contentTypes.isEmpty ? null : contentTypes.first,
);
}