MCP
Connect Qovia to Claude, Cursor, VS Code and other MCP clients so the AI can find and call 63 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-…(orx-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
claude mcp add --transport http qovia https://api.qovia.ai/mcp \ --header "Authorization: Bearer $QOVIA_KEY"
Cursor
{
"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:
{
"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):
{
"mcpServers": {
"qovia": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.qovia.ai/mcp",
"--header",
"Authorization:${QOVIA_AUTH}"
],
"env": {
"QOVIA_AUTH": "Bearer sk-qovia-…"
}
}
}
}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.
| Tool | What it does | Key |
|---|---|---|
search_endpoints | Find endpoints by keyword (Chinese or English) and platform: ids, titles, price per call and whether each is live. | No |
get_endpoint | One endpoint in full: description, parameters (JSON Schema), example parameters, a response example and the price. | No |
call_endpoint | Run an endpoint: the data plus billing meta (charged_usd, balance, free quota). | Yes |
get_account | The key's balance, plan, per-minute limit and remaining free quota. Free. | Yes |
Direct tools
To give the AI the endpoints themselves, add ?tools=all, or only some platforms:
https://api.qovia.ai/mcp?tools=douyin,bilibiliEvery 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:
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.0015Billing and safety
- Every MCP call runs the same pipeline as the API: auth, scopes, parameter checks, rate limits, billing and the usage log are identical.
- Only successful calls that return data are charged; empty results and failures are free. Free quota applies first where an endpoint allows it.
- The per-minute limit is per account, shared with the API and the console playground.
- Errors come back as tool errors with
error.code(the API's error codes) and the HTTP status, plusretry_after_secondswhen rate limited.
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.