TikTok MCP Server for Cloudflare Workers
16 tools available in the TikTok MCP server. Each tool can be called by AI assistants to perform specific actions.
tiktok_get_creator_infoGet the authenticated creator's posting capabilities and settings.
Returns information about what the creator can post, including:
Args:
Returns: Creator info object with posting capabilities.
Required Scope: video.publish Rate Limit: 20 requests per minute
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
}
}
}tiktok_init_video_post_urlInitialize a video post from a publicly accessible URL.
The video will be pulled from the provided URL and posted to TikTok. After initialization, use tiktok_get_publish_status to track the posting progress.
Args:
Returns: Publish ID for tracking the post status.
Required Scope: video.publish Rate Limit: 6 requests per minute Note: Unaudited clients can only post to SELF_ONLY until audit approval.
{
"type": "object",
"required": [
"videoUrl",
"privacyLevel"
],
"properties": {
"title": {
"type": "string",
"description": "Video caption (max 2200 characters)"
},
"isAigc": {
"type": "boolean",
"description": "Mark as AI-generated content"
},
"videoUrl": {
"type": "string",
"description": "Publicly accessible URL of the video"
},
"disableDuet": {
"type": "boolean",
"description": "Prevent duets"
},
"privacyLevel": {
"type": "string",
"description": "Who can see the video"
},
"disableStitch": {
"type": "boolean",
"description": "Prevent stitches"
},
"disableComment": {
"type": "boolean",
"description": "Disable comments"
},
"brandContentToggle": {
"type": "boolean",
"description": "Mark as paid partnership"
},
"brandOrganicToggle": {
"type": "boolean",
"description": "Mark as own business promotion"
},
"videoCoverTimestampMs": {
"type": "number",
"description": "Cover thumbnail timestamp in ms"
}
}
}tiktok_query_videosQuery specific TikTok videos by their IDs.
Retrieve metadata for up to 20 specific videos in a single request.
Args:
Returns: Array of video objects matching the requested IDs.
Required Scope: video.list
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"videoIds": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"description": "Video IDs to query (max 20)"
}
}
}tiktok_init_video_post_uploadInitialize a video post for file upload.
Returns an upload URL where the video file should be uploaded. After uploading, use tiktok_get_publish_status to track the posting progress.
Args:
Returns: Publish ID and upload URL (valid for 1 hour).
Required Scope: video.upload, video.publish Rate Limit: 6 requests per minute
{
"type": "object",
"required": [
"videoSize",
"privacyLevel"
],
"properties": {
"title": {
"type": "string",
"description": "Video caption"
},
"isAigc": {
"type": "boolean",
"description": "Mark as AI-generated content"
},
"chunkSize": {
"type": "number",
"description": "Chunk size in bytes"
},
"videoSize": {
"type": "number",
"description": "Video file size in bytes"
},
"disableDuet": {
"type": "boolean",
"description": "Prevent duets"
},
"privacyLevel": {
"type": "string",
"description": "Who can see the video"
},
"disableStitch": {
"type": "boolean",
"description": "Prevent stitches"
},
"disableComment": {
"type": "boolean",
"description": "Disable comments"
},
"totalChunkCount": {
"type": "number",
"description": "Total number of chunks"
},
"brandContentToggle": {
"type": "boolean",
"description": "Mark as paid partnership"
},
"brandOrganicToggle": {
"type": "boolean",
"description": "Mark as own business promotion"
},
"videoCoverTimestampMs": {
"type": "number",
"description": "Cover thumbnail timestamp in ms"
}
}
}tiktok_get_publish_statusCheck the status of a video post.
Use this after initializing a video post to track its progress.
Args:
Returns: Current status of the post:
Required Scope: video.publish or video.upload Rate Limit: 30 requests per minute
{
"type": "object",
"required": [
"publishId"
],
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"publishId": {
"type": "string",
"description": "Publish ID from video post initialization"
}
}
}tiktok_research_query_videosQuery videos using the TikTok Research API.
Search for videos based on various criteria like hashtags, keywords, username, region, and engagement metrics.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Condition format: { field, operation, fieldValues } Fields: create_date, username, region_code, video_id, hashtag_name, keyword, music_id, effect_id, video_length, view_count, comment_count Operations: EQ, IN, GT, GTE, LT, LTE
Returns: Paginated list of matching videos with search_id for pagination.
Required Scope: research.data.basic Rate Limit: 1000 requests per day
{
"type": "object",
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"isRandom": {
"type": "boolean",
"default": [],
"description": "Randomize result order"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max results"
},
"searchId": {
"type": "string",
"description": "Search ID to resume cached results"
}
}
}tiktok_research_get_commentsGet comments on a video using the TikTok Research API.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: Paginated list of comments on the video.
Required Scope: research.data.basic
{
"type": "object",
"required": [
"videoId"
],
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"videoId": {
"type": "string",
"description": "Video ID to get comments for"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max comments"
}
}
}tiktok_research_get_user_infoGet public user information using the TikTok Research API.
Retrieves profile info for any public TikTok user (18+ only).
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: User profile information.
Required Scope: research.data.basic
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"username": {
"type": "string",
"default": [],
"description": "TikTok username (without @)"
}
}
}tiktok_research_get_user_followersGet a user's followers using the TikTok Research API.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: Paginated list of followers (display_name and username only).
Required Scope: research.data.basic
{
"type": "object",
"required": [
"username"
],
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor (Unix timestamp)"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max followers"
},
"username": {
"type": "string",
"description": "TikTok username (without @)"
}
}
}tiktok_research_get_user_followingGet accounts a user follows using the TikTok Research API.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: Paginated list of accounts the user follows (display_name and username only).
Required Scope: research.data.basic
{
"type": "object",
"required": [
"username"
],
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor (Unix timestamp)"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max accounts"
},
"username": {
"type": "string",
"description": "TikTok username (without @)"
}
}
}tiktok_research_get_user_liked_videosGet videos a user has liked using the TikTok Research API.
NOTE: This only works if the user has enabled public access to their liked videos, which is disabled by default. Queries often return empty results.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: Paginated list of liked videos (if publicly available).
Required Scope: research.data.basic
{
"type": "object",
"required": [
"username"
],
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max videos"
},
"username": {
"type": "string",
"description": "TikTok username (without @)"
}
}
}tiktok_research_get_user_pinned_videosGet videos pinned to a user's profile using the TikTok Research API.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: List of pinned videos on the user's profile.
Required Scope: research.data.basic
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"username": {
"type": "string",
"default": [],
"description": "TikTok username (without @)"
}
}
}tiktok_research_get_user_reposted_videosGet videos a user has reposted using the TikTok Research API.
IMPORTANT: This endpoint requires Research API access, which must be approved by TikTok.
Args:
Returns: Paginated list of reposted videos.
Required Scope: research.data.basic
{
"type": "object",
"required": [
"username"
],
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Max videos"
},
"username": {
"type": "string",
"description": "TikTok username (without @)"
}
}
}tiktok_research_query_adsQuery TikTok ads using the Commercial Content API.
Search the Commercial Content Library for ads based on various criteria.
IMPORTANT: This endpoint requires Commercial Content API access (research.adlib.basic scope).
Args:
Returns: List of ads with advertiser information.
Required Scope: research.adlib.basic Note: Currently only includes data from EU countries.
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 10,
"description": "Max results"
},
"searchId": {
"type": "string",
"description": "Search ID for pagination"
},
"searchTerm": {
"type": "string",
"default": "exact_phrase') .describe('Search type'), advertiserBusinessIds: z .array(z.string()) .optional() .describe('Filter by advertiser business IDs",
"description": "Search term (up to 50 characters)"
},
"countryCode": {
"type": "string",
"default": "ALL",
"description": "Target country code"
}
}
}tiktok_get_user_infoGet the authenticated user's profile information from TikTok.
Returns user profile data including display name, username, bio, avatar, follower/following counts, and more.
Args:
Returns: User profile object with requested fields.
Required Scope: user.info.basic (minimum), user.info.profile, user.info.stats for additional fields
{
"type": "object",
"properties": {
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
}
}
}tiktok_list_videosList the authenticated user's public TikTok videos.
Returns a paginated list of videos sorted by creation time (newest first).
Args:
Returns: Paginated list of video objects with requested fields.
Required Scope: video.list
{
"type": "object",
"properties": {
"cursor": {
"type": "number",
"description": "Pagination cursor from previous response"
},
"format": {
"enum": [
"json",
"markdown"
],
"type": "string",
"default": "json",
"description": "Response format"
},
"maxCount": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1,
"description": "Number of videos to return"
}
}
}