Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,528Letters: 13Defects: 1,322counted 1 min ago
teppi

Server definition

Hash
sha256:14da6e67b3068c68024aec3d01754cc658e18979ff7a25710ed34ae2cf02e40d
What it is
What a remote MCP server returned when asked what it offers: 25 tools

The blob, as servednamed by its sha256

{ "instructions": "TikTok data tools, paid per call over x402 (USDC). A call that fails is not charged. Tools return compact JSON; pass expand:true for the full body. Most creator tools take a sec_uid: get it from tiktok_resolve_username first. Ids are strings — pass them back exactly as received.", "tools": [ { "description": "Replies under one comment. Worth calling only when tiktok_video_comments reported reply_count above 0.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "comment_id": { "description": "comment_id from tiktok_video_comments.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" }, "count": { "description": "Replies per page. (1-50, default 20)", "maximum": 50, "minimum": 1, "type": "integer" }, "cursor": { "description": "Offset from the previous response. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "The numeric video id.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" } }, "required": [ "id", "comment_id" ], "type": "object" }, "name": "tiktok_comment_replies", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Followers to return. (1-50, default 20)", "maximum": 50, "minimum": 1, "type": "integer" }, "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" }, "id": { "description": "sec_uid (MS4w…) or numeric uid.", "minLength": 1, "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_followers", "outputSchema": null }, { "description": "A sample of the accounts a creator follows, plus the total. One page only, for the same reason as followers.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Accounts to return. (1-50, default 20)", "maximum": 50, "minimum": 1, "type": "integer" }, "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" }, "id": { "description": "sec_uid (MS4w…) or numeric uid.", "minLength": 1, "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_following", "outputSchema": null }, { "description": "Videos a creator has liked. Only works when the account keeps its likes public; most do not, and a private list returns no videos.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Videos per page. (1-35, default 20)", "maximum": 35, "minimum": 1, "type": "integer" }, "cursor": { "description": "max_cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "sec_uid (MS4w…). A numeric uid is not accepted here.", "minLength": 1, "pattern": "^MS4w[A-Za-z0-9_-]{20,}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_liked_videos", "outputSchema": null }, { "description": "A creator's playlists (TikTok calls them mixes or series). Most creators have none, which returns total 0.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "cursor": { "description": "cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "sec_uid (MS4w…) or numeric uid.", "minLength": 1, "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_playlists", "outputSchema": null }, { "description": "A creator's profile: handle, nickname, bio, follower, following and video counts, privacy and verification flags, and avatar.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "id": { "description": "sec_uid (MS4w…) or numeric uid, from tiktok_resolve_username.", "minLength": 1, "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_profile", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Posts per page. (1-35, default 20)", "maximum": 35, "minimum": 1, "type": "integer" }, "cursor": { "description": "max_cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "sec_uid (MS4w…) or numeric uid.", "minLength": 1, "pattern": "^(MS4w[A-Za-z0-9_-]{20,}|\\d{6,25})$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_creator_videos", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Videos to return. (1-18, default 12)", "maximum": 18, "minimum": 1, "type": "integer" }, "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" } }, "type": "object" }, "name": "tiktok_explore_feed", "outputSchema": null }, { "description": "Hashtag name to its id, with total video and view counts. Feed the id to tiktok_hashtag_videos.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "name": { "description": "The hashtag, with or without #.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "tiktok_hashtag_resolve", "outputSchema": null }, { "description": "Videos under a hashtag. Pages hold about 12 videos whatever count asks for; page with cursor.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Videos per page; TikTok caps this near 12. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "cursor": { "description": "cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "hashtag id from tiktok_hashtag_resolve.", "minLength": 1, "pattern": "^\\d{1,25}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_hashtag_videos", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Rooms to return. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_live_streams", "outputSchema": null }, { "description": "Search TikTok places (points of interest) by name: address, coordinates, rating, review count and video count.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Places to return. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "q": { "description": "Place name or keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_places_search", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "handle": { "description": "The @handle, with or without the leading @.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "handle" ], "type": "object" }, "name": "tiktok_resolve_username", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Results per page. (1-30, default 10)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "offset": { "description": "Number of results to skip: 0, then count, then 2 x count. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_creators", "outputSchema": null }, { "description": "Keyword search over hashtags, with post and view counts. One page only.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Results to return. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_hashtags", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Rooms to return. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_lives", "outputSchema": null }, { "description": "Keyword search over photo-mode (carousel) posts, with image URLs and stats. One page only.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Results to return. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_photos", "outputSchema": null }, { "description": "Keyword search over sounds, with usage counts. cursor is an offset: pass the previous response's cursor.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Results per page. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "cursor": { "description": "cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_sounds", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Results per page. 30 yields the most distinct results per call. (1-30, default 20)", "maximum": 30, "minimum": 1, "type": "integer" }, "cursor": { "description": "cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "q": { "description": "Search keywords.", "maxLength": 80, "minLength": 1, "type": "string" }, "sort_type": { "description": "0 = relevance (default), 1 = most liked. (0-3)", "maximum": 3, "minimum": 0, "type": "integer" } }, "required": [ "q" ], "type": "object" }, "name": "tiktok_search_videos", "outputSchema": null }, { "description": "Sound title to music id, with the closest candidates. Feed the id to tiktok_sound_videos.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "title": { "description": "The sound's title as TikTok shows it.", "maxLength": 80, "minLength": 1, "type": "string" } }, "required": [ "title" ], "type": "object" }, "name": "tiktok_sound_resolve", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "cursor": { "description": "cursor from the previous page. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "music id from tiktok_sound_resolve or any video row.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_sound_videos", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "count": { "description": "Comments per page. (1-50, default 20)", "maximum": 50, "minimum": 1, "type": "integer" }, "cursor": { "description": "Offset from the previous response. Omit for page one. (default 0)", "maximum": 9007199254740991, "minimum": 0, "type": "integer" }, "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" }, "id": { "description": "The numeric video id.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_video_comments", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "id": { "description": "The numeric video id.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_video_download_url", "outputSchema": null }, { "description": "One video or photo post by id: caption, plays, likes, comments, shares, saves, duration, hashtags, sound and author.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "id": { "description": "The numeric video id — the digits after /video/ in a TikTok link.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_video_stats", "outputSchema": null }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "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" }, "id": { "description": "The numeric video id.", "minLength": 1, "pattern": "^\\d{6,25}$", "type": "string" }, "lang": { "description": "Language tag such as en or es-MX. Omit to get the original track.", "maxLength": 16, "minLength": 1, "pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})?$", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "tiktok_video_transcript", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:14da6e67b3068c68024aec3d01754cc658e18979ff7a25710ed34ae2cf02e40d | sha256sum