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 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-… (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, free quota).Yes
get_accountThe 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,bilibili

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.0015

Billing 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, plus retry_after_seconds when rate limited.
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.