MCP server for the public-apis repository — find, test, and integrate any free API
Server has 7 well-named tools with complete input schemas and descriptions. All tools follow verb_noun naming (search_apis, get_categories, probe_api, etc.). Schemas are properly typed with enums and constraints. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Error handling is basic (try/catch returns JSON error). No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are adequate but lack dependency hints and format constraints. Missing documentation of pagination behavior and result limits in responses.
Compare all APIs within a category side by side, with a summary of auth and HTTPS support.
Returns APIs that require zero authentication, optionally filtered by category.
Generates ready-to-use curl, fetch, and axios code snippets for calling a given API endpoint.
Get full details about a specific API by name.
Returns all available API categories with the number of APIs in each.
Makes a safe live HTTP GET request to a given API endpoint and returns the response status, shape, and latency.
Search the public-apis list by keyword, category, auth type, and HTTPS support.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination) for downstream tool chaining. E.g., search_apis returns results but no schema tells the LLM what fields each result contains or how to extract API names for get_api_detail.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All tools are read-only but this is not declared in the tool definition. Agents cannot infer safety properties without explicit hints.
probe_api accepts apiKey as a parameter. Credentials should never be tool parameters, they leak into logs and traces. Use server-side secret injection via environment variables instead.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Error handling is minimal. Errors return JSON with 'error' field but do not guide recovery. E.g., 'API not found' should suggest 'Try search_apis() with a partial name.' No error categorization (retryable vs fatal).
Parameter descriptions lack format constraints and dependency hints. E.g., 'limit' params say '1-20, default: 5' but no validation enforces this. 'apiKeyParam' default is 'api_key' but not all APIs use this, should document how to discover the correct param name.