TopTik — TikTok data
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
TikTok data for agents: videos, creators, comments, search, transcripts. 25 tools, pay per call.
| Author | app.toptik |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 756 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"TopTik — TikTok data": {
"url": "https://mcp.toptik.app/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (25)
tiktok_resolve_usernameread-onlyResolve 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.
Parameters:
handle(required) — string — The @handle, with or without the leading @.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_profileread-onlyA creator's profile: handle, nickname, bio, follower, following and video counts, privacy and verification flags, and avatar.
Parameters:
id(required) — string — sec_uid (MS4w…) or numeric uid, from tiktok_resolve_username.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_videosread-onlyA 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.
Parameters:
id(required) — string — sec_uid (MS4w…) or numeric uid.count— integer — Posts per page. (1-35, default 20)cursor— integer — max_cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_liked_videosread-onlyVideos a creator has liked. Only works when the account keeps its likes public; most do not, and a private list returns no videos.
Parameters:
id(required) — string — sec_uid (MS4w…). A numeric uid is not accepted here.count— integer — Videos per page. (1-35, default 20)cursor— integer — max_cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_followersread-onlyA 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.
Parameters:
id(required) — string — sec_uid (MS4w…) or numeric uid.count— integer — Followers to return. (1-50, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_followingread-onlyA sample of the accounts a creator follows, plus the total. One page only, for the same reason as followers.
Parameters:
id(required) — string — sec_uid (MS4w…) or numeric uid.count— integer — Accounts to return. (1-50, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_creator_playlistsread-onlyA creator's playlists (TikTok calls them mixes or series). Most creators have none, which returns total 0.
Parameters:
id(required) — string — sec_uid (MS4w…) or numeric uid.cursor— integer — cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_video_statsread-onlyOne video or photo post by id: caption, plays, likes, comments, shares, saves, duration, hashtags, sound and author.
Parameters:
id(required) — string — The numeric video id — the digits after /video/ in a TikTok link.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_video_commentsread-onlyTop-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.
Parameters:
id(required) — string — The numeric video id.count— integer — Comments per page. (1-50, default 20)cursor— integer — Offset from the previous response. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_comment_repliesread-onlyReplies under one comment. Worth calling only when tiktok_video_comments reported reply_count above 0.
Parameters:
id(required) — string — The numeric video id.comment_id(required) — string — comment_id from tiktok_video_comments.count— integer — Replies per page. (1-50, default 20)cursor— integer — Offset from the previous response. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_video_download_urlread-onlyDirect 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.
Parameters:
id(required) — string — The numeric video id.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_video_transcriptread-onlyA 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.
Parameters:
id(required) — string — The numeric video id.lang— string — Language tag such as en or es-MX. Omit to get the original track.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_sound_resolveread-onlySound title to music id, with the closest candidates. Feed the id to tiktok_sound_videos.
Parameters:
title(required) — string — The sound's title as TikTok shows it.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_sound_videosread-onlyVideos 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.
Parameters:
id(required) — string — music id from tiktok_sound_resolve or any video row.cursor— integer — cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_hashtag_resolveread-onlyHashtag name to its id, with total video and view counts. Feed the id to tiktok_hashtag_videos.
Parameters:
name(required) — string — The hashtag, with or without #.expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_hashtag_videosread-onlyVideos under a hashtag. Pages hold about 12 videos whatever count asks for; page with cursor.
Parameters:
id(required) — string — hashtag id from tiktok_hashtag_resolve.count— integer — Videos per page; TikTok caps this near 12. (1-30, default 20)cursor— integer — cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_videosread-onlyKeyword 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.
Parameters:
q(required) — string — Search keywords.count— integer — Results per page. 30 yields the most distinct results per call. (1-30, default 20)cursor— integer — cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.sort_type— integer — 0 = relevance (default), 1 = most liked. (0-3)
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_creatorsread-onlyKeyword 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.
Parameters:
q(required) — string — Search keywords.count— integer — Results per page. (1-30, default 10)expand— boolean — 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.offset— integer — Number of results to skip: 0, then count, then 2 x count. (default 0)
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_hashtagsread-onlyKeyword search over hashtags, with post and view counts. One page only.
Parameters:
q(required) — string — Search keywords.count— integer — Results to return. (1-30, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_soundsread-onlyKeyword search over sounds, with usage counts. cursor is an offset: pass the previous response's cursor.
Parameters:
q(required) — string — Search keywords.count— integer — Results per page. (1-30, default 20)cursor— integer — cursor from the previous page. Omit for page one. (default 0)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_livesread-onlyLive 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.
Parameters:
q(required) — string — Search keywords.count— integer — Rooms to return. (1-30, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_search_photosread-onlyKeyword search over photo-mode (carousel) posts, with image URLs and stats. One page only.
Parameters:
q(required) — string — Search keywords.count— integer — Results to return. (1-30, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_explore_feedread-onlyTikTok's Explore / Discover feed: what is trending now. Not personalised and not cached, so each call returns a fresh set; call again for more.
Parameters:
count— integer — Videos to return. (1-18, default 12)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_live_streamsread-onlyLive 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.
Parameters:
q(required) — string — Search keywords.count— integer — Rooms to return. (1-30, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
tiktok_places_searchread-onlySearch TikTok places (points of interest) by name: address, coordinates, rating, review count and video count.
Parameters:
q(required) — string — Place name or keywords.count— integer — Places to return. (1-30, default 20)expand— boolean — 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.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.