{"mcp":{"spec_version":"2026-01-21","status":"stable","servers":[{"name":"openapi-city","description":"OpenAPI City MCP server. Search, browse, and query OpenAPI specifications.","url":"https://openapi.city/mcp","transport":"http","auth":{"type":"api-key","header":"Authorization","prefix":"Bearer","key_format":"oac_live_*"}}],"tools":[{"name":"search_apis","description":"Search for APIs by name, category, or keyword. Returns matching providers with metadata.\n\nTips:\n- Use noun phrases for best results: \"email\", \"payments\", \"storage\"\n- Verb phrases like \"send email\" may not match provider names but will search endpoint summaries automatically\n- Use scope=\"endpoints\" to search endpoint operations directly\n- Use scope=\"all\" to search both providers and endpoints simultaneously\n","inputSchema":{"properties":{"query":{"type":"string","description":"Search query for API name or description"},"category":{"type":"string","description":"Filter by category (e.g. payments, messaging, infrastructure)"},"scope":{"type":"string","description":"Search scope: providers (default), endpoints, or all","enum":["providers","endpoints","all"]},"limit":{"type":"integer","description":"Max results to return (default 10)","default":10}},"required":["query"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"list_endpoints","description":"List or search endpoints for an API provider.\n\nReturns a list of endpoints with method, path, summary, and tags.\n\n- No query: returns all endpoints (paginated via limit)\n- With query: searches by path, summary, or operation_id\n- Filter by tag, HTTP method, or both\n\nResponse: { endpoints: [{ method, path, summary, operation_id, tags, deprecated }], total_count }\n","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug (e.g. 'stripe', 'slack')"},"version":{"type":"string","description":"Specific version string (defaults to current)"},"version_id":{"type":"integer","description":"Specific version ID (overrides version string)"},"query":{"type":"string","description":"Optional search query for endpoint path, summary, or operation_id"},"tag":{"type":"string","description":"Filter by OpenAPI tag"},"method":{"type":"string","description":"Filter by HTTP method","enum":["GET","POST","PUT","PATCH","DELETE"]},"limit":{"type":"integer","description":"Max results (default 25, max 100)","default":25}},"required":["provider"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"get_endpoints","description":"Get full details for one or more API endpoints.\n\nReturns endpoints array with `$ref` references preserved. All referenced components (parameters, responses, requestBodies, schemas) are collected in a separate 'components' dict, deduplicated.\n\nEndpoint data uses standard OpenAPI camelCase keys (operationId, requestBody, etc.). `$ref` pointers remain as-is — resolve them via the corresponding entry in components.\n\nParameters:\n- provider: Provider slug\n- endpoints: Comma-separated \"METHOD PATH\" pairs, e.g. \"POST /v1/payment_intents, GET /v1/payment_intents/{id}\"\n- depth: Component collection depth. 0=none (default), 1=direct refs only, 2=+associations as stubs, 3=+deeper nesting\n- omit: Comma-separated fields to exclude (schemas, responses, description, request_body)\n- include_schemas: Comma-separated schema names to include (only these + deps resolved)\n\nPath segments with special characters must be URL-encoded.\n\nResponse: { endpoints: [...], components: { parameters: {...}, responses: {...}, schema: {...} }, auth_type: \"...\" }\n","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug"},"version":{"type":"string","description":"Specific version string (defaults to current)"},"version_id":{"type":"integer","description":"Specific version ID (overrides version string)"},"endpoints":{"type":"string","description":"Comma-separated METHOD PATH pairs (e.g. 'POST /v1/payment_intents, GET /v1/payment_intents/{id}')"},"depth":{"type":"integer","description":"Schema depth: 0=none (default), 1=direct, 2=associations, 3=deep","enum":[0,1,2,3],"default":0},"part":{"type":"string","description":"Response part: full=all, response=skip request_body, request=skip responses, params_only=skip bodies+schemas","enum":["full","response","request","params_only"],"default":"full"},"omit":{"type":"string","description":"Comma-separated fields to exclude: schemas, responses, description, request_body"},"include_schemas":{"type":"string","description":"Comma-separated schema names to include (only these + deps resolved, e.g. 'subscription,subscription_item')"}},"required":["provider","endpoints"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"get_schemas","description":"Get one or more schema/model definitions from an API provider's OpenAPI spec.\n\nReturns schema definitions with `$ref` references preserved. Use the `depth` parameter to resolve transitive references — referenced schemas are included in the response alongside the requested schemas.\n\nParameters:\n- provider: Provider slug\n- names: Comma-separated schema names (e.g. 'customer, charge, refund')\n- depth: Schema resolution depth. 0=only requested schemas (default), 1=+direct refs, 2=+refs as stubs, 3=+deeper\n","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug"},"names":{"type":"string","description":"Comma-separated schema names (e.g. 'customer, charge')"},"version":{"type":"string","description":"Specific version string (defaults to current)"},"version_id":{"type":"integer","description":"Specific version ID (overrides version string)"},"depth":{"type":"integer","description":"Schema depth: 0=only requested (default), 1=+refs, 2=+refs of refs, 3=deep","enum":[0,1,2,3],"default":0}},"required":["provider","names"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"get_spec_summary","description":"Get an AI-optimized compact summary of an API: auth, base URL, and available tags.\n\nReturns everything needed to identify the right endpoint and start making API calls:\n- auth: Authentication type, scheme, and header name (inline — no separate call needed)\n- base_url: Primary server URL\n- available_tags: All tags available for filtering with list_endpoints\n- tags: Tag details with endpoint counts\n\nParameters:\n- provider: Provider slug\n- full_description: Set true to get full description (default: false, truncates to 500 chars)\n\nResponse: { provider, name, version, description, base_url, auth, endpoint_count, schema_count, available_tags, tags }\n","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug"},"version":{"type":"string","description":"Specific version string (defaults to current)"},"version_id":{"type":"integer","description":"Specific version ID (overrides version string)"},"full_description":{"type":"boolean","description":"Return full description instead of truncated (default: false)","default":false}},"required":["provider"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"get_auth_requirements","description":"Get detailed authentication setup for an API. Use when get_spec_summary's inline auth is insufficient (e.g. OAuth flows, complex scopes).\n\nWhen no formal security schemes exist in the spec, infers auth from OAuth/auth-related endpoints and tags.\n\nResponse: { provider, auth_schemes, server_urls, inferred_auth? }\n","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug"},"version":{"type":"string","description":"Specific version string (defaults to current)"},"version_id":{"type":"integer","description":"Specific version ID (overrides version string)"}},"required":["provider"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"get_version_diff","description":"Get the diff between a spec version and its predecessor. Shows added/removed/changed endpoints and schemas.","inputSchema":{"properties":{"provider":{"type":"string","description":"Provider slug"},"version_id":{"type":"integer","description":"Spec version ID"},"detail":{"type":"string","enum":["compact","full"],"description":"Response detail level. compact (default): fields_changed only per endpoint. full: includes per-field added/removed details.","default":"compact"}},"required":["provider","version_id"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"compare_apis","description":"Compare two API providers side-by-side. Returns auth, tags, endpoints, and use-case-relevant results.\n\nReduces comparison from 10 calls/35K tokens to 1 call/~3K tokens.\n\nReturns:\n- providers: summaries for both (name, auth, base_url, endpoint_count, schema_count)\n- comparison: auth_diff, common_tags, unique_tags_a/b, relevant_endpoints_a/b (when use_case given)\n","inputSchema":{"properties":{"provider_a":{"type":"string","description":"First provider slug"},"provider_b":{"type":"string","description":"Second provider slug"},"use_case":{"type":"string","description":"Optional focus area (e.g. 'recurring subscriptions', 'file upload')"}},"required":["provider_a","provider_b"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"resolve_spec","description":"Fetch and index an OpenAPI spec from a provided URL. Starts async ingestion. Requires Pro plan.","inputSchema":{"properties":{"url":{"type":"string","description":"URL to the OpenAPI spec (JSON or YAML)"},"make_public":{"type":"boolean","description":"Admin only: add as a public spec visible to all users"}},"required":["url"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false}},{"name":"get_ingestion_status","description":"Get the ingestion status of a provider.\n\nReturns the current state of spec ingestion: completed, in_progress, or failed.\nUse after resolve_spec to poll until ingestion completes.\n\nParameters:\n- provider_slug: Provider slug (from resolve_spec response)\n\nResponse: { provider_slug, state, progress, version, endpoint_count, schema_count, error, ingested_at }\n","inputSchema":{"properties":{"provider_slug":{"type":"string","description":"Provider slug"}},"required":["provider_slug"],"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}},{"name":"health_check","description":"Verify API key and MCP connection. Returns account status, plan, and remaining calls.","inputSchema":{"properties":{},"type":"object"},"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}}],"prompts":[{"name":"integrate_api","description":"Generate step-by-step integration guide for a specific API provider.","arguments":[{"name":"provider","description":"Provider slug (e.g. 'stripe', 'slack')","required":true},{"name":"use_case","description":"What you want to accomplish with the API","required":false}]}]}}