TopTik — TikTok data

TikTok data for agents: videos, creators, comments, search, transcripts. 25 tools, pay per call.

我该使用它吗

质量与安全性

A
描述质量
98%
模式完整度
100%
命名质量
80%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~6,032token 数(工具定义)
~1.9 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 4.71%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "tiktok": {
      "url": "https://mcp.toptik.app/mcp"
    }
  }
}

远程端点

https://mcp.toptik.app/mcpstreamable-http

它能做什么

工具清单

工具(25)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢tiktok_resolve_username(handle, expand)

Resolve a TikTok @handle to the account's numeric uid and sec_uid. Start here: every tiktok_creator_* tool takes the sec_uid this returns. An empty user_list means no exact match was found.

输入模式

{
  "type": "object",
  "properties": {
    "handle": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "The @handle, with or without the leading @."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "handle"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_profile(id, expand)

A creator's profile: handle, nickname, bio, follower, following and video counts, privacy and verification flags, and avatar.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$",
      "description": "sec_uid (MS4w…) or numeric uid, from tiktok_resolve_username."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_videos(id, count, cursor, expand)

A creator's posts, newest first, with stats. Page by passing the previous response's max_cursor as cursor until has_more is 0. Pinned posts appear on page one only.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$",
      "description": "sec_uid (MS4w…) or numeric uid."
    },
    "count": {
      "description": "Posts per page. (1-35, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 35
    },
    "cursor": {
      "description": "max_cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_liked_videos(id, count, cursor, expand)

Videos a creator has liked. Only works when the account keeps its likes public; most do not, and a private list returns no videos.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^MS4w[A-Za-z0-9_-]{20,}$",
      "description": "sec_uid (MS4w…). A numeric uid is not accepted here."
    },
    "count": {
      "description": "Videos per page. (1-35, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 35
    },
    "cursor": {
      "description": "max_cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_followers(id, count, expand)

A sample of a creator's followers (most recent), plus the total. One page only: TikTok does not page this list reliably, so this is a sample and not an export.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$",
      "description": "sec_uid (MS4w…) or numeric uid."
    },
    "count": {
      "description": "Followers to return. (1-50, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_following(id, count, expand)

A sample of the accounts a creator follows, plus the total. One page only, for the same reason as followers.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$",
      "description": "sec_uid (MS4w…) or numeric uid."
    },
    "count": {
      "description": "Accounts to return. (1-50, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_creator_playlists(id, cursor, expand)

A creator's playlists (TikTok calls them mixes or series). Most creators have none, which returns total 0.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$",
      "description": "sec_uid (MS4w…) or numeric uid."
    },
    "cursor": {
      "description": "cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_video_stats(id, expand)

One video or photo post by id: caption, plays, likes, comments, shares, saves, duration, hashtags, sound and author.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "The numeric video id — the digits after /video/ in a TikTok link."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_video_comments(id, count, cursor, expand)

Top-level comments on a video, with like and reply counts. cursor is an offset: pass the previous response's cursor to continue. TikTok re-ranks between pages, so dedupe on comment_id.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "The numeric video id."
    },
    "count": {
      "description": "Comments per page. (1-50, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "description": "Offset from the previous response. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_comment_replies(id, comment_id, count, cursor, expand)

Replies under one comment. Worth calling only when tiktok_video_comments reported reply_count above 0.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "The numeric video id."
    },
    "comment_id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "comment_id from tiktok_video_comments."
    },
    "count": {
      "description": "Replies per page. (1-50, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "description": "Offset from the previous response. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "comment_id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_video_download_url(id, expand)

Direct media URLs for one post: no-watermark video, watermarked video, audio, covers, and the images of a photo post. Links only, no bytes; they are signed and expire (see expires), so fetch promptly.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "The numeric video id."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_video_transcript(id, lang, expand)

A video's spoken text from TikTok's own caption track: one joined string plus timed cues. has_transcript false means the video has no caption track, which is common and is not an error.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "The numeric video id."
    },
    "lang": {
      "description": "Language tag such as en or es-MX. Omit to get the original track.",
      "type": "string",
      "minLength": 1,
      "maxLength": 16,
      "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})?$"
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_sound_resolve(title, expand)

Sound title to music id, with the closest candidates. Feed the id to tiktok_sound_videos.

输入模式

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "The sound's title as TikTok shows it."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "title"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_sound_videos(id, cursor, expand)

Videos TikTok associates with a sound. Treat it as a feed seeded by the sound, not a strict filter: some results use a different sound, so check music_id on each row.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{6,25}$",
      "description": "music id from tiktok_sound_resolve or any video row."
    },
    "cursor": {
      "description": "cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_hashtag_resolve(name, expand)

Hashtag name to its id, with total video and view counts. Feed the id to tiktok_hashtag_videos.

输入模式

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "The hashtag, with or without #."
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "name"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_hashtag_videos(id, count, cursor, expand)

Videos under a hashtag. Pages hold about 12 videos whatever count asks for; page with cursor.

输入模式

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "pattern": "^\\d{1,25}$",
      "description": "hashtag id from tiktok_hashtag_resolve."
    },
    "count": {
      "description": "Videos per page; TikTok caps this near 12. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "cursor": {
      "description": "cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_videos(q, count, cursor, sort_type, expand)

Keyword search over videos. TikTok search is a bounded, re-ranked pool, not an endless list: ask for count 30, page with cursor, dedupe on video_id, and stop when two pages add nothing new.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Results per page. 30 yields the most distinct results per call. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "cursor": {
      "description": "cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "sort_type": {
      "description": "0 = relevance (default), 1 = most liked. (0-3)",
      "type": "integer",
      "minimum": 0,
      "maximum": 3
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_creators(q, count, offset, expand)

Keyword search over accounts, with follower counts. Pages by offset, not cursor. For one exact @handle use tiktok_resolve_username instead: it is cheaper and more reliable.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Results per page. (1-30, default 10)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "offset": {
      "description": "Number of results to skip: 0, then count, then 2 x count. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_hashtags(q, count, expand)

Keyword search over hashtags, with post and view counts. One page only.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Results to return. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_sounds(q, count, cursor, expand)

Keyword search over sounds, with usage counts. cursor is an offset: pass the previous response's cursor.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Results per page. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "cursor": {
      "description": "cursor from the previous page. Omit for page one. (default 0)",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_lives(q, count, expand)

Live rooms on air right now that match a keyword, with the host's account. One page only. For playable stream URLs use tiktok_live_streams.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Rooms to return. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_search_photos(q, count, expand)

Keyword search over photo-mode (carousel) posts, with image URLs and stats. One page only.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Results to return. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_explore_feed(count, expand)

TikTok's Explore / Discover feed: what is trending now. Not personalised and not cached, so each call returns a fresh set; call again for more.

输入模式

{
  "type": "object",
  "properties": {
    "count": {
      "description": "Videos to return. (1-18, default 12)",
      "type": "integer",
      "minimum": 1,
      "maximum": 18
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_live_streams(q, count, expand)

Live rooms matching a keyword, each with playable stream URLs per quality (FLV always, HLS when TikTok provides it), title and viewer count. URLs are signed (see expires_at), but a room usually ends long before its signature does; if one quality fails, try another.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Search keywords."
    },
    "count": {
      "description": "Rooms to return. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢tiktok_places_search(q, count, expand)

Search TikTok places (points of interest) by name: address, coordinates, rating, review count and video count.

输入模式

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Place name or keywords."
    },
    "count": {
      "description": "Places to return. (1-30, default 20)",
      "type": "integer",
      "minimum": 1,
      "maximum": 30
    },
    "expand": {
      "description": "false (default): a compact JSON summary sized for a model's context. true: the complete, unmodified response from the data API — can exceed 500 KB for list tools, so ask for it only when a field you need is missing from the compact form. Same price either way.",
      "type": "boolean"
    }
  },
  "required": [
    "q"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

推荐提示词

search_research
Search for information about [topic] using TopTik — TikTok data
预期工具: tiktok_search_videos
find_specific
Find [specific item] using TopTik — TikTok data
预期工具: tiktok_search_videos
list_items
List all [items] available in TopTik — TikTok data
预期工具: tiktok_creator_playlists
browse_collection
Show me the [collection] from TopTik — TikTok data
预期工具: tiktok_creator_playlists

社区

评价此服务器

证据

最近观测

已验证未记录版本25 个工具
已验证未记录版本25 个工具