Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/cuvo-co:cuvo-co-mcp-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Cuvo Health public MCP API
version: '2026-08-23'
summary: Read-only content, discovery, and $0 discovery-call booking endpoints for AI agents. No authentication, no API keys.
description: 'The public machine interface of cuvo.co, the Cuvo Health white label telehealth platform. Every endpoint is unauthenticated and free; all content mirrors claims already published on the human-readable pages. Human documentation lives at https://cuvo.co/developers (developer portal) and https://cuvo.co/api-docs (endpoint reference).
Versioning: date-based. This document describes version 2026-08-23, echoed on every response in the API-Version header; requests may pin a version by sending the API-Version request header. Breaking changes ship as a new version date, the prior version keeps working for at least 90 days, and responses on a deprecated version carry Deprecation and Sunset headers for that whole window.
Errors: unless an operation says otherwise, errors are RFC 9457 application/problem+json with a machine-readable "code" and a "hint" describing the recovery step. The ACP endpoints return the Agentic Commerce Protocol''s own error body (a messages array); the A2A and MCP endpoints return JSON-RPC 2.0 error objects.
Rate limits: 300 requests per 60 seconds per IP on dynamic endpoints, advertised live in the RateLimit response headers; a 429 carries Retry-After. Statically cached endpoints advertise the policy in RateLimit-Policy.
Related non-API resources: the sitemap at /sitemap.xml, the RSS feed at /feed.xml, the Schema Feeds map at /schemamap.xml (schemamap directive in robots.txt), scoped llms.txt files (/developers/llms.txt, /blog/llms.txt, /compare/llms.txt, /pricing/llms.txt, /api/llms.txt, /docs/llms.txt), and plain-markdown mirrors of the content pages: /index.md for the homepage, and .md appended to /pricing, /developers, /about, /booking, /terms, /privacy, /security, any /blog/, or any /compare/ URL. Every mirror opens with YAML frontmatter (title, description, canonical, last-updated).'
contact:
name: Cuvo Health team
url: https://cuvo.co/booking
termsOfService: https://cuvo.co/terms
license:
name: Proprietary (free to call; content mirrors the published site)
url: https://cuvo.co/terms
servers:
- url: https://cuvo.co
security: []
tags:
- name: MCP
description: Model Context Protocol server
paths:
/mcp:
parameters:
- $ref: '#/components/parameters/ApiVersion'
post:
operationId: callMcp
tags:
- MCP
summary: MCP endpoint (streamable HTTP, JSON responses)
description: 'Stateless Model Context Protocol server: POST JSON-RPC 2.0 messages (initialize, tools/list, tools/call, ping). Tools cover published content (overview, pricing, comparisons, articles) plus live discovery-call booking (get_availability, book_discovery_call, request_callback). No sessions, no auth, no SSE stream.'
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/JsonRpcRequest'
- type: array
description: 'JSON-RPC batch: an array of requests processed in one call; the response is the matching array.'
items:
$ref: '#/components/schemas/JsonRpcRequest'
responses:
'200':
description: JSON-RPC response (result or error object), or an array of responses for a batch request.
headers:
API-Version:
$ref: '#/components/headers/ApiVersion'
RateLimit-Policy:
$ref: '#/components/headers/RateLimitPolicy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
content:
application/json:
schema:
$ref: '#/components/schemas/JsonRpcResponse'
'202':
description: Notification(s) accepted; no body.
headers:
API-Version:
$ref: '#/components/headers/ApiVersion'
RateLimit-Policy:
$ref: '#/components/headers/RateLimitPolicy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
'400':
description: Body was not valid JSON (JSON-RPC parse error).
content:
application/json:
schema:
$ref: '#/components/schemas/JsonRpcResponse'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/Problem'
/docs/mcp:
parameters:
- $ref: '#/components/parameters/ApiVersion'
post:
operationId: callDocsMcp
tags:
- MCP
summary: Documentation MCP endpoint (read-only)
description: 'The documentation MCP server: the read-only content subset of /mcp (get_overview, get_pricing, list_comparisons, get_comparison, list_articles, get_article) with no booking actions, for agents that answer questions and must not act. Same JSON-RPC 2.0 surface, including batch arrays.'
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/JsonRpcRequest'
- type: array
items:
$ref: '#/components/schemas/JsonRpcRequest'
responses:
'200':
description: JSON-RPC response (result or error object), or an array for a batch.
headers:
API-Version:
$ref: '#/components/headers/ApiVersion'
RateLimit-Policy:
$ref: '#/components/headers/RateLimitPolicy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
content:
application/json:
schema:
$ref: '#/components/schemas/JsonRpcResponse'
'202':
description: Notification(s) accepted; no body.
headers:
API-Version:
$ref: '#/components/headers/ApiVersion'
RateLimit-Policy:
$ref: '#/components/headers/RateLimitPolicy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/Problem'
components:
headers:
RateLimitLimit:
description: Requests allowed per window (draft-07 form).
schema:
type: integer
RateLimitPolicy:
description: Rate-limit policy (draft-ietf-httpapi-ratelimit-headers structured field), e.g. "default";q=60;w=60.
schema:
type: string
RateLimit:
description: 'Live quota state: "default";r=<remaining>;t=<seconds to reset>.'
schema:
type: string
ApiVersion:
description: The API version that served this response.
schema:
type: string
enum:
- '2026-08-23'
RateLimitRemaining:
description: Requests remaining in the current window.
schema:
type: integer
RateLimitReset:
description: Seconds until the current window resets.
schema:
type: integer
schemas:
JsonRpcRequest:
type: object
description: JSON-RPC 2.0 request.
properties:
jsonrpc:
type: string
const: '2.0'
id:
type:
- string
- integer
- 'null'
method:
type: string
params:
type: object
required:
- jsonrpc
- method
Problem:
type: object
description: RFC 9457 problem detail. code is stable and machine-readable; hint says what to do next. Documented at https://cuvo.co/developers#errors
properties:
type:
type: string
format: uri
title:
type: string
status:
type: integer
detail:
type: string
code:
type: string
description: Machine-readable error code (snake_case), e.g. not_found, method_not_allowed, rate_limited.
hint:
type: string
description: Suggested next step for the caller.
instance:
type: string
required:
- title
- status
- detail
- code
JsonRpcResponse:
type: object
description: 'JSON-RPC 2.0 response: exactly one of result or error is present.'
properties:
jsonrpc:
type: string
const: '2.0'
id:
type:
- string
- integer
- 'null'
result:
type: object
error:
type: object
properties:
code:
type: integer
message:
type: string
required:
- code
- message
required:
- jsonrpc
responses:
Problem:
description: Error (RFC 9457 problem detail with machine-readable code and recovery hint).
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
RateLimited:
description: Rate limit exceeded. Wait Retry-After seconds, then retry.
headers:
API-Version:
$ref: '#/components/headers/ApiVersion'
RateLimit-Policy:
$ref: '#/components/headers/RateLimitPolicy'
RateLimit:
$ref: '#/components/headers/RateLimit'
RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
description: Seconds to wait before retrying.
schema:
type: integer
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
parameters:
ApiVersion:
name: API-Version
in: header
required: false
description: Pin a specific API version (date-based). Omitting it selects the current version; every response echoes the version served.
schema:
type: string
enum:
- '2026-08-23'