
Social data for AI agents: Douyin, Xiaohongshu, WeChat, TikTok, X, YouTube, more. Pay per call.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your okdata API key as a bearer token (make one at https://okdata.online/console/). find, describe and account status work without it.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
balance: the balance, the key's spending limits and what it spent. receipt: what one call was charged (request_id). usage: calls and charges by day, capability, key_id, entry, source or end_user (since, until, group_by). status: which capabilities are up, no key needed. Free.
balance with a key, status without one, when left out.
For usage: from this date (YYYY-MM-DD) or ISO time; 30 days back when left out.
For usage: up to this date (the whole day) or ISO time; now when left out.
For usage: day, capability, key_id, entry, source, end_user, comma-separated; day when left out.
For receipt: the call's request ID (its result ID).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://api.okdata.online/mcp
Headers
Authorization (optional, not in the config above): Your okdata API key as a bearer token (make one at https://okdata.online/console/). find, describe and account status work without it.balance: the balance, the key's spending limits and what it spent. receipt: what one call was charged (request_id). usage: calls and charges by day, capability, key_id, entry, source or end_user (since, until, group_by). status: which capabilities are up, no key needed. Free.
| Argument | Type | Description |
|---|---|---|
| what | string | balance with a key, status without one, when left out. |
| since | string | For usage: from this date (YYYY-MM-DD) or ISO time; 30 days back when left out. |
| until | string | For usage: up to this date (the whole day) or ISO time; now when left out. |
| group_by | string | For usage: day, capability, key_id, entry, source, end_user, comma-separated; day when left out. |
| request_id | string | For receipt: the call's request ID (its result ID). |
{
"type": "object",
"properties": {
"what": {
"enum": [
"balance",
"receipt",
"usage",
"status"
],
"type": "string",
"description": "balance with a key, status without one, when left out."
},
"since": {
"type": "string",
"maxLength": 40,
"description": "For usage: from this date (YYYY-MM-DD) or ISO time; 30 days back when left out."
},
"until": {
"type": "string",
"maxLength": 40,
"description": "For usage: up to this date (the whole day) or ISO time; now when left out."
},
"group_by": {
"type": "string",
"maxLength": 80,
"description": "For usage: day, capability, key_id, entry, source, end_user, comma-separated; day when left out."
},
"request_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "For receipt: the call's request ID (its result ID)."
}
},
"additionalProperties": false
}One page from one capability, charged per call or per item returned; failed calls are free. Give the capability and only the parameters describe lists for it. The first lines of the answer give the items, the charge, the balance, the result ID and how to go on: cursor for the next page (a new charged call), read_more for the rest of an answer cut at about 20 KB (free). Then one JSON item per line. Needs an API key.
| Argument | Type | Description |
|---|---|---|
| id | string | The ID of the post, account, video... the capability is about. |
| ids | array | Several IDs for one batch call; describe gives the most it takes. |
| tab | string | Which tab of the account's page: articles (the default), videos or pictures. |
| url | string | A share link or page address, in place of id. |
| lang | string | Preferred transcript language. The result's lang is the track actually returned. |
| name | string | The advertiser's name as on its Facebook page. Give id or name. (one capability takes it) |
| sort | string | Order; describe lists the values each capability takes. |
| type | string | Note type. |
| view |
The contract of 1 to 5 capabilities: each parameter with its meaning and an example, the links url takes, price and the most one call can cost, paging, the fields returned, what the platform cannot give, an example call and an example item with its size. Free, no key. Use it when unsure of a parameter.
| Argument | Type | Description |
|---|---|---|
| ids* | array | Capability IDs, e.g. ["x.trends.list"]. |
{
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 5,
"minItems": 1,
"description": "Capability IDs, e.g. [\"x.trends.list\"]."
}
},
"additionalProperties": false
}Find the capability for a need described in plain words, English or Chinese, among 214 on 17 platforms: up to 5, best first, each with what it needs, its price and a ready call. With a platform and no match it lists everything that platform has; never use another platform's capability in its place. Free, no key.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many matches, 5 when left out. |
| query | string | What is needed, in words, e.g. "小红书笔记评论" or "comments under a TikTok video". |
| category | string | Only capabilities of this kind. |
| platform | string | A platform ID or name (douyin, xiaohongshu, wechat_mp, bilibili, weibo, tiktok, x, youtube, meta, google, instagram, reddit, kuaishou, zhihu, wechat_channels, wechat, telegram). Alone, it lists everything the platform has. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1,
"description": "How many matches, 5 when left out."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "What is needed, in words, e.g. \"小红书笔记评论\" or \"comments under a TikTok video\"."
},
"category": {
"enum": [
"ads",
"commerce",
"creator",
"social"
],
"type": "string",
"description": "Only capabilities of this kind."
},
"platform": {
"type": "string",
"maxLength": 40,
"description": "A platform ID or name (douyin, xiaohongshu, wechat_mp, bilibili, weibo, tiktok, x, youtube, meta, google, instagram, reddit, kuaishou, zhihu, wechat_channels, wechat, telegram). Alone, it lists everything the platform has."
}
},
"additionalProperties": false
}The rest of an answer call cut to fit, or the whole result in another view or with other fields. Free: nothing is fetched again. Results are kept 24 hours and read with the key's account that made the call.
| Argument | Type | Description |
|---|---|---|
| view | string | How much of each object: compact leaves out empty fields, standard keeps them, full adds platform extras under ext. The call's own view when left out. |
| fields | array | Keep only these fields, by dotted path (author.name), to save tokens. |
| offset | integer | Where to go on, as the cut notice printed it; 0 or left out: from the start. |
| result_id* | string | The result ID call printed. |
{
"type": "object",
"required": [
"result_id"
],
"properties": {
"view": {
"enum": [
"compact",
"standard",
"full"
],
"type": "string",
"description": "How much of each object: compact leaves out empty fields, standard keeps them, full adds platform extras under ext. The call's own view when left out."
},
"fields": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 50,
"description": "Keep only these fields, by dotted path (author.name), to save tokens."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Where to go on, as the cut notice printed it; 0 or left out: from the start."
},
"result_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "The result ID call printed."
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 12, 2026.
| string |
| How much of each object: compact leaves out empty fields, standard keeps them, full adds platform extras under ext. compact when left out. |
| board | string | Which list: hot searches is the only one. |
| brand | string | The brand name, spelled the way the Douyin index lists it. |
| media | string | Only image or only video ads; all by default. |
| query | string | Keywords, as typed into the platform's search box. |
| since | string | From this date (YYYY-MM-DD). |
| until | string | Up to this date (YYYY-MM-DD). |
| cursor | string | page.next_cursor of the previous call, for the next page (a new, charged call). |
| domain | string | The brand's website domain. Give id or domain. (one capability takes it) |
| fields | array | Keep only these fields, by dotted path (author.name), to save tokens. |
| filter | string | Only verified accounts, or only those live now. (one capability takes it) |
| format | string | Only text, image or video ads; all by default. (one capability takes it) |
| gender | string | Only female or only male creators. |
| status | string | Ads running now (the default), stopped ones, or both. |
| window | string | Look back this many days; 30 by default. |
| country | string | ISO country code, e.g. US, JP. |
| keyword | string | One keyword, as typed into the search box. |
| post_id | string | The shortcode of the comment's post. |
| traffic | string | Which traffic the reads count: all, promoted traffic included (the default), or organic traffic alone. Likes and saves stay the same. (one capability takes it) |
| category | string | Only notes of this content category, as written in the creator detail’s categories. A category that does not exist finds nothing. (one capability takes it) |
| duration | string | Only videos of this length. (one capability takes it) |
| keywords | array | One to five keywords, each without a comma. Give keyword or keywords. (one capability takes it) |
| username | string | A handle, in place of id. |
| max_price | string | The most this call may cost, in US dollars as text, e.g. "0.05". A call that could cost more is refused and not charged. |
| search_by | string | Match the words against what creators post (the default) or against their names. |
| advertiser | string | The advertiser's name. Give query or advertiser. (one capability takes it) |
| capability* | string | The capability ID, from find or this list. |
| feature_tag | string | Only notes with this content feature tag, as written in the creator detail’s ext.feature_tags. A tag that does not exist finds nothing. (one capability takes it) |
| followers_max | integer | At most this many followers. |
| followers_min | integer | At least this many followers. |
| engagement_min | integer | Engagement rate of the last 30 days at least this, in percent: 3 means 3%. (one capability takes it) |
| idempotency_key | string | Optional. A new unique value (a UUID) lets you resend a call whose answer did not arrive: the same value returns the first result, charged once. |
| published_within | string | Only posts from the last day, week, month or year. |
{
"type": "object",
"required": [
"capability"
],
"properties": {
"id": {
"type": "string",
"description": "The ID of the post, account, video... the capability is about."
},
"ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Several IDs for one batch call; describe gives the most it takes."
},
"tab": {
"type": "string",
"description": "Which tab of the account's page: articles (the default), videos or pictures."
},
"url": {
"type": "string",
"description": "A share link or page address, in place of id."
},
"lang": {
"type": "string",
"description": "Preferred transcript language. The result's lang is the track actually returned."
},
"name": {
"type": "string",
"description": "The advertiser's name as on its Facebook page. Give id or name. (one capability takes it)"
},
"sort": {
"type": "string",
"description": "Order; describe lists the values each capability takes."
},
"type": {
"type": "string",
"description": "Note type."
},
"view": {
"enum": [
"compact",
"standard",
"full"
],
"type": "string",
"description": "How much of each object: compact leaves out empty fields, standard keeps them, full adds platform extras under ext. compact when left out."
},
"board": {
"type": "string",
"description": "Which list: hot searches is the only one."
},
"brand": {
"type": "string",
"description": "The brand name, spelled the way the Douyin index lists it."
},
"media": {
"type": "string",
"description": "Only image or only video ads; all by default."
},
"query": {
"type": "string",
"description": "Keywords, as typed into the platform's search box."
},
"since": {
"type": "string",
"description": "From this date (YYYY-MM-DD)."
},
"until": {
"type": "string",
"description": "Up to this date (YYYY-MM-DD)."
},
"cursor": {
"type": "string",
"description": "page.next_cursor of the previous call, for the next page (a new, charged call)."
},
"domain": {
"type": "string",
"description": "The brand's website domain. Give id or domain. (one capability takes it)"
},
"fields": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 50,
"description": "Keep only these fields, by dotted path (author.name), to save tokens."
},
"filter": {
"type": "string",
"description": "Only verified accounts, or only those live now. (one capability takes it)"
},
"format": {
"type": "string",
"description": "Only text, image or video ads; all by default. (one capability takes it)"
},
"gender": {
"type": "string",
"description": "Only female or only male creators."
},
"status": {
"type": "string",
"description": "Ads running now (the default), stopped ones, or both."
},
"window": {
"type": "string",
"description": "Look back this many days; 30 by default."
},
"country": {
"type": "string",
"description": "ISO country code, e.g. US, JP."
},
"keyword": {
"type": "string",
"description": "One keyword, as typed into the search box."
},
"post_id": {
"type": "string",
"description": "The shortcode of the comment's post."
},
"traffic": {
"type": "string",
"description": "Which traffic the reads count: all, promoted traffic included (the default), or organic traffic alone. Likes and saves stay the same. (one capability takes it)"
},
"category": {
"type": "string",
"description": "Only notes of this content category, as written in the creator detail’s categories. A category that does not exist finds nothing. (one capability takes it)"
},
"duration": {
"type": "string",
"description": "Only videos of this length. (one capability takes it)"
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "One to five keywords, each without a comma. Give keyword or keywords. (one capability takes it)"
},
"username": {
"type": "string",
"description": "A handle, in place of id."
},
"max_price": {
"type": "string",
"pattern": "^\\d{1,7}(\\.\\d{1,6})?$",
"description": "The most this call may cost, in US dollars as text, e.g. \"0.05\". A call that could cost more is refused and not charged."
},
"search_by": {
"type": "string",
"description": "Match the words against what creators post (the default) or against their names."
},
"advertiser": {
"type": "string",
"description": "The advertiser's name. Give query or advertiser. (one capability takes it)"
},
"capability": {
"enum": [
"douyin.videos.search",
"douyin.videos.get",
"douyin.videos.comments.list",
"douyin.users.get",
"douyin.users.videos.list",
"douyin.trends.list",
"xiaohongshu.notes.search",
"xiaohongshu.notes.get",
"xiaohongshu.notes.comments.list",
"xiaohongshu.users.get",
"xiaohongshu.users.notes.list",
"xiaohongshu.trends.list",
"wechat_mp.accounts.search",
"wechat_mp.accounts.articles.list",
"wechat_mp.articles.get",
"bilibili.videos.search",
"bilibili.videos.get",
"bilibili.videos.comments.list",
"bilibili.trends.list",
"weibo.posts.search",
"weibo.trends.list",
"weibo.users.get",
"tiktok.videos.search",
"tiktok.videos.get",
"tiktok.videos.comments.list",
"tiktok.users.get",
"x.posts.get",
"x.posts.search",
"x.users.get",
"x.users.posts.list",
"x.trends.list",
"youtube.videos.search",
"youtube.videos.get",
"youtube.videos.comments.list",
"youtube.videos.transcript.get",
"douyin.xingtu.creators.search",
"douyin.xingtu.creators.rates.get",
"xiaohongshu.pgy.creators.search",
"xiaohongshu.pgy.creators.get",
"meta.ads.search",
"meta.ads.get",
"meta.advertisers.ads.list",
"google.advertisers.search",
"google.advertisers.ads.list",
"tiktok.ads.search",
"tiktok.creative_center.ads.search",
"tiktok.shop.products.search",
"tiktok.shop.products.get",
"tiktok.shop.products.reviews.list",
"xiaohongshu.shop.products.search",
"xiaohongshu.shop.products.reviews.list",
"instagram.users.get",
"instagram.users.posts.list",
"instagram.posts.get",
"instagram.posts.comments.list",
"instagram.comments.replies.list",
"instagram.hashtags.posts.list",
"instagram.posts.transcript.get",
"instagram.users.search",
"reddit.posts.search",
"reddit.posts.get",
"reddit.posts.comments.list",
"reddit.popular.posts.list",
"reddit.subreddits.posts.list",
"reddit.subreddits.get",
"reddit.trends.list",
"reddit.users.get",
"reddit.users.posts.list",
"reddit.users.subreddits.list",
"reddit.posts.transcript.get",
"kuaishou.videos.search",
"kuaishou.videos.get",
"kuaishou.videos.comments.list",
"kuaishou.comments.replies.list",
"kuaishou.users.get",
"kuaishou.users.search",
"kuaishou.users.videos.list",
"kuaishou.trends.list",
"zhihu.posts.search",
"zhihu.questions.answers.list",
"zhihu.questions.get",
"zhihu.answers.get",
"zhihu.answers.comments.list",
"zhihu.comments.replies.list",
"zhihu.articles.get",
"zhihu.columns.articles.list",
"zhihu.pins.get",
"zhihu.users.get",
"zhihu.users.search",
"zhihu.users.followers.list",
"zhihu.users.answers.list",
"zhihu.users.articles.list",
"zhihu.users.pins.list",
"wechat_channels.videos.search",
"wechat_channels.users.search",
"wechat_channels.users.get",
"wechat_channels.users.videos.list",
"wechat_channels.videos.get",
"wechat_channels.videos.comments.list",
"wechat_channels.comments.replies.list",
"wechat_channels.users.live_replays.list",
"douyin.comments.replies.list",
"douyin.hashtags.videos.list",
"douyin.users.search",
"douyin.videos.metrics",
"douyin.videos.related",
"douyin.videos.trending",
"douyin.keywords.related",
"douyin.index.brands.history",
"douyin.index.brands.metrics",
"douyin.index.creators.videos.list",
"douyin.index.creators.audience.get",
"douyin.index.creators.metrics",
"douyin.index.keywords.audience.get",
"douyin.index.keywords.history",
"douyin.index.keywords.related",
"douyin.index.trends.list",
"douyin.index.videos.search",
"douyin.users.history",
"douyin.xingtu.creators.get",
"douyin.xingtu.creators.audience.get",
"douyin.xingtu.creators.metrics",
"douyin.xingtu.creators.videos.list",
"douyin.xingtu.creators.keywords.get",
"douyin.xingtu.creators.scores.get",
"douyin.xingtu.creators.content_mix.get",
"douyin.xingtu.creators.conversion.get",
"douyin.xingtu.campaigns.list",
"douyin.xingtu.videos.get",
"xiaohongshu.images.search",
"xiaohongshu.comments.replies.list",
"xiaohongshu.topics.notes.list",
"xiaohongshu.topics.get",
"xiaohongshu.users.search",
"xiaohongshu.shop.products.get",
"xiaohongshu.keywords.related",
"xiaohongshu.videos.get",
"xiaohongshu.pgy.keywords.history",
"xiaohongshu.pgy.keywords.related",
"xiaohongshu.pgy.creators.audience.get",
"xiaohongshu.pgy.creators.metrics",
"xiaohongshu.pgy.creators.notes.list",
"xiaohongshu.pgy.creators.followers.history",
"xiaohongshu.pgy.creators.related",
"xiaohongshu.pgy.notes.trending",
"xiaohongshu.pgy.creators.costs.metrics",
"xiaohongshu.pgy.creators.followers.metrics",
"xiaohongshu.pgy.creators.costs.history",
"xiaohongshu.pgy.notes.get",
"weibo.posts.get",
"weibo.posts.comments.list",
"weibo.comments.replies.list",
"weibo.posts.likers.list",
"weibo.users.posts.list",
"weibo.users.followers.list",
"weibo.users.search",
"bilibili.users.get",
"bilibili.users.videos.list",
"bilibili.comments.replies.list",
"bilibili.videos.trending",
"wechat_channels.videos.share_link.get",
"wechat_channels.users.collections.list",
"wechat_channels.collections.videos.list",
"wechat.posts.search",
"wechat.accounts.search",
"wechat_mp.accounts.get",
"wechat_mp.articles.comments.list",
"wechat_mp.articles.metrics",
"wechat_mp.comments.replies.list",
"wechat_mp.accounts.owner.get",
"wechat_channels.videos.metrics",
"wechat.index.keywords.history",
"wechat.keywords.related",
"wechat.miniprograms.search",
"wechat_channels.backup.users.get",
"wechat_channels.backup.users.videos.list",
"wechat_channels.backup.videos.search",
"wechat.backup.posts.search",
"telegram.channels.get",
"telegram.channels.messages.list",
"telegram.messages.get",
"youtube.comments.replies.list",
"youtube.channels.posts.list",
"youtube.posts.get",
"youtube.channels.get",
"youtube.channels.search",
"youtube.channels.videos.list",
"tiktok.videos.transcript.get",
"tiktok.comments.replies.list",
"tiktok.users.search",
"tiktok.users.videos.list",
"tiktok.creative_center.ads.get",
"tiktok.shop.sellers.products.list",
"tiktok.users.followers.list",
"tiktok.hashtags.videos.list",
"x.posts.replies.list",
"x.posts.quotes.list",
"x.posts.retweeters.list",
"x.posts.article.get",
"x.threads.posts.list",
"x.users.search",
"x.users.followers.list",
"x.users.following.list",
"x.users.mentions.list",
"x.lists.posts.list",
"x.lists.members.list",
"x.lists.followers.list",
"x.communities.get",
"x.communities.posts.list",
"x.communities.members.list",
"douyin.backup.users.videos.list",
"douyin.backup.videos.search",
"weibo.backup.trends.list",
"bilibili.backup.users.videos.list"
],
"type": "string",
"description": "The capability ID, from find or this list."
},
"feature_tag": {
"type": "string",
"description": "Only notes with this content feature tag, as written in the creator detail’s ext.feature_tags. A tag that does not exist finds nothing. (one capability takes it)"
},
"followers_max": {
"type": "integer",
"description": "At most this many followers."
},
"followers_min": {
"type": "integer",
"description": "At least this many followers."
},
"engagement_min": {
"type": "integer",
"description": "Engagement rate of the last 30 days at least this, in percent: 3 means 3%. (one capability takes it)"
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Optional. A new unique value (a UUID) lets you resend a call whose answer did not arrive: the same value returns the first result, charged once."
},
"published_within": {
"type": "string",
"description": "Only posts from the last day, week, month or year."
}
},
"additionalProperties": false
}