Skip to content
API reference
Documentation

MCP

Connect Qovia to Claude, Cursor, VS Code and other MCP clients so the AI can find and call 159 live data endpoints itself. Same API key, same billing as calling the API directly.

Server and auth

https://api.qovia.ai/mcp
Transport
Streamable HTTP, stateless: every request stands alone and is answered with JSON; no session, no long-lived stream.
Auth
The same key as the API, in a header of the MCP connection: Authorization: Bearer sk-qovia-… (or x-api-key). Searching and reading endpoints needs no key; calls and the account check do.

Connect a client

Put your own key in the config below, restart the client, and qovia shows up among its tools.

Claude Code

Shell
claude mcp add --transport http qovia https://api.qovia.ai/mcp \
  --header "Authorization: Bearer $QOVIA_KEY"

Cursor

~/.cursor/mcp.json
{
  "mcpServers": {
    "qovia": {
      "url": "https://api.qovia.ai/mcp",
      "headers": {
        "Authorization": "Bearer sk-qovia-…"
      }
    }
  }
}

VS Code

The key is asked for on first use and never written to the file:

.vscode/mcp.json
{
  "servers": {
    "qovia": {
      "type": "http",
      "url": "https://api.qovia.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${input:qovia-key}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "qovia-key",
      "description": "Qovia API key",
      "password": true
    }
  ]
}

Claude Desktop

Claude Desktop's remote connectors use OAuth, so bridge with mcp-remote (needs Node.js):

claude_desktop_config.json
{
  "mcpServers": {
    "qovia": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.qovia.ai/mcp",
        "--header",
        "Authorization:${QOVIA_AUTH}"
      ],
      "env": {
        "QOVIA_AUTH": "Bearer sk-qovia-…"
      }
    }
  }
}
Other clients

Any MCP client with Streamable HTTP works: use the URL above and add the header Authorization: Bearer sk-qovia-….

Tools

By default the AI gets four tools, so the catalog never crowds its context: find, read the parameters, then call.

MCP tools
ToolWhat it doesKey
search_endpointsFind endpoints by keyword (Chinese or English) and platform: ids, titles, price per call and whether each is live.No
get_endpointOne endpoint in full: description, parameters (JSON Schema), example parameters, a response example and the price.No
call_endpointRun an endpoint: the data plus billing meta (charged_usd, balance).Yes
get_accountThe key's balance and plan. Not charged.Yes

Direct tools

To give the AI the endpoints themselves, add ?tools=all, or only some platforms:

https://api.qovia.ai/mcp?tools=douyin,kuaishou

Every live endpoint then becomes a tool named after its id with dots as underscores (raw.douyin.video → raw_douyin_video), taking the endpoint's own parameters. The four default tools stay.

Example

Given a data question, the AI usually goes like this:

Tool calls
User: "How many likes and comments does Douyin video 7681194457378688292 have?"
→ search_endpoints {"query": "douyin video"}
→ get_endpoint {"endpoint_id": "raw.douyin.video"}
→ call_endpoint {"endpoint_id": "raw.douyin.video", "params": {"item_id": "7681194457378688292"}}
← data.metrics.likes / comments, meta.charged_usd = 0.0005

Billing and safety

  • Every MCP call runs the same pipeline as the API: auth, scopes, parameter checks, billing and the usage log are identical.
  • Only successful calls that return data are charged; empty results and failures are not charged. Calls are paid from the account's prepaid balance.
  • There are no rate limits; MCP calls are not limited, just like the API.
  • Errors come back as tool errors with error.code (the API's error codes) and the HTTP status, plus retry_after_seconds when the server asks you to wait.
Give the AI its own key

Create a separate API key for AI tools, scoped to the endpoints they need. Revoke it in the console whenever you like without touching your other integrations.

By platform and use case

The MCP setup, endpoint list and a real example for each platform:

By use case, including how to give an AI agent this data: