If you work on anything that touches the Chinese internet (brand monitoring, influencer research, market research), sooner or later you need data from Xiaohongshu (RedNote), Douyin, Weibo or Bilibili. And then you find out that each of them has its own app-only APIs, request signing, rate limits and field names, and that they change every few weeks.
This post shows how to skip all of that and let an AI agent (Claude Code, Cursor, VS Code) pull that data directly, through one remote MCP server: Qovia. Disclosure: I'm the maker.
What you get
One MCP endpoint, https://api.qovia.ai/mcp, that covers:
- Chinese platforms: Douyin, Xiaohongshu, Bilibili, Weibo, Kuaishou, Zhihu, Toutiao, plus Taobao/Tmall and JD.com product reviews
- Global platforms: TikTok, YouTube, Instagram and X
There are 100+ endpoints underneath (posts, comments, creator profiles, hot lists, search). They share one response envelope, and posts, notes and videos come back in the same record shape: a Xiaohongshu note and a Weibo post both come back with id, platform, text, author, metrics and a platform-specific extra, so the agent can compare their common fields directly.
The server only exposes four tools, so it doesn't flood the agent's context with 100+ schemas:
| Tool | What it does | Needs a key |
|---|---|---|
search_endpoints |
Find endpoints by keyword (English or Chinese) or platform | No |
get_endpoint |
Parameters, a response example and the price of one endpoint | No |
call_endpoint |
Run it | Yes |
get_account |
Balance and rate limit | Yes |
Setup
Claude Code
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 (.vscode/mcp.json). This one prompts for the key instead of writing it 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 }
]
}
You can try the discovery part before signing up: leave the header out, and search_endpoints and get_endpoint still work. To fetch actual data you need a key from the console; new accounts get 50 trial calls.
What it looks like in practice
Say you ask Claude Code:
What are people on Xiaohongshu saying about matcha lattes this week? Summarize the main complaints.
The flow of tool calls looks like this:
search_endpoints {"query": "xiaohongshu search"}
→ raw.xiaohongshu.search, raw.xiaohongshu.note, raw.xiaohongshu.comments, ...
get_endpoint {"endpoint_id": "raw.xiaohongshu.search"}
→ params: keyword (required), sort (general | latest | most_liked | ...), page
call_endpoint {"endpoint_id": "raw.xiaohongshu.search",
"params": {"keyword": "抹茶拿铁", "sort": "latest"}}
Make sure the keyword ends up in Chinese (抹茶拿铁 rather than "matcha latte"). On Xiaohongshu a Chinese keyword matches far more content than an English one, and telling the agent so in your prompt is usually enough. Each item has this shape (trimmed, numbers from the docs example):
{
"id": "soc_xia_...",
"platform": "xiaohongshu",
"lang": "zh-CN",
"text": "...",
"author": { "nickname": "..." },
"metrics": { "likes": 11045, "comments": 1072, "saves": 1153, "shares": 359 },
"extra": {
"url": "https://www.xiaohongshu.com/explore/...",
"title": "...",
"note_type": "image"
}
}
From there the agent can pull comments for the top notes with raw.xiaohongshu.comments and write the summary. One prompt, no scraper to maintain.
A few other prompts that work well:
- "What's on the Weibo and Douyin hot lists right now? Group the topics by theme."
- "Compare the followers and recent video performance of these three Douyin creators: [links]."
- "Pull the JD.com reviews for [product link] and list the most common complaints."
- "Search Chinese social media and news for mentions of [brand] in the last 7 days, broken down by platform and sentiment."
The last one uses a cross-platform search endpoint that covers about 10 kinds of Chinese sources in one call (Weibo, Douyin, Xiaohongshu, Toutiao, WeChat articles, news sites, forums and more), with date, platform and sentiment filters.
Two tips
If you want typed tools instead, connect to https://api.qovia.ai/mcp?tools=all, or narrow it with ?tools=douyin,bilibili. You then get one tool per endpoint (raw_douyin_video and so on). That costs more context but saves a round trip.
Give the agent its own key. In the console you can create a key limited to the platforms it needs and revoke it whenever you like, without touching your other integrations.
Without MCP
It's the same thing as a plain HTTP API, if you'd rather call it from code:
curl "https://api.qovia.ai/v1/raw/xiaohongshu/search?keyword=咖啡" \
-H "Authorization: Bearer $QOVIA_KEY"
There's an OpenAPI spec and an llms.txt if you want to hand the whole API to a model.
Billing and limits
You pay per successful call that returns data, from a prepaid balance. Empty results and errors are not charged, and every response tells you what it cost (meta.charged_usd). MCP calls are billed exactly like the HTTP API.
It only covers publicly available content (no private accounts, no DMs), and how you use the data is up to you under the rules that apply to you.
Links
- Docs: https://qovia.ai/docs/mcp/?utm_source=devto
- Platform list: https://qovia.ai/coverage/?utm_source=devto
- Configs and a small Python SDK: https://github.com/qovia/qovia-mcp
If there's a platform or field you need that isn't there, tell me in the comments.
This article was generated with AI and reviewed by the Qovia team.
Top comments (0)