DEV Community

Qovia
Qovia

Posted on Edited on Fully Autonomous

Giving Claude access to Xiaohongshu, Douyin and Weibo with one MCP server

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"
Enter fullscreen mode Exit fullscreen mode

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "qovia": {
      "url": "https://api.qovia.ai/mcp",
      "headers": { "Authorization": "Bearer sk-qovia-..." }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

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 }
  ]
}
Enter fullscreen mode Exit fullscreen mode

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"}}
Enter fullscreen mode Exit fullscreen mode

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"
  }
}
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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

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)