Skip to main content
Glama
aaronckj

tiktok-studio-mcp

by aaronckj

tiktok-studio-mcp

MCP server for TikTok. Publishes videos to your own TikTok account and reads back how they performed, through TikTok's official Content Posting and Display APIs.

Built as the TikTok counterpart to yt-studio-mcp.

What it can and cannot do

TikTok's creator APIs are narrower than YouTube's. Rather than advertise tools that cannot work, this server exposes only what the platform actually supports:

capability

supported

Upload video (drafts or direct post)

yes

View / like / comment / share counts

yes

List your videos

yes

List or moderate comments

no — TikTok offers this only through the Research API, which is gated to academic institutions

Playlists, captions, thumbnails

no — no API surface

Related MCP server: TikTok MCP Server

Posting modes

TikTok gates direct publishing behind an app audit, so there are two modes, selected with TIKTOK_MCP_MODE:

  • upload (default) — the video lands in your TikTok inbox/drafts and you finish posting it in the app. Works without an audit.

  • publish — posts directly. Requires the video.publish scope, which needs TikTok's full app audit (2–4 weeks, demo video, privacy policy, domain verification).

Until the app is audited, TikTok forces everything an unaudited client posts to private, whatever privacy_level you ask for. post_video says so in its result rather than letting you assume something published.

Install

claude mcp add tiktok -s user -- uvx tiktok-studio-mcp

Authenticate

Register an app at developers.tiktok.com with Login Kit, Content Posting API and Display API, requesting the scopes user.info.basic, video.upload, video.list, video.publish. Set the Desktop redirect URI to http://localhost:8902/.

export TIKTOK_MCP_CLIENT_KEY=...
export TIKTOK_MCP_CLIENT_SECRET=...
tiktok-studio-mcp auth

Prefer the environment over --client-key / --client-secret: command-line arguments are visible to any user on the box via ps and land in shell history. The flags still work as a fallback.

The flow is headless-friendly: it binds a fixed port and prints the consent URL rather than launching a browser. On a machine with a browser:

ssh -N -L 8902:localhost:8902 user@your-host

then open the printed URL.

Tools

tool

purpose

health_check

credentials refresh, account reachable, granted scopes, active mode

creator_info

nickname, allowed privacy levels, duration cap, interaction toggles

post_video

upload a file; returns publish_id. Supports dry_run

post_status

poll a publish_id

list_videos

your videos, with statistics

video_stats

counts for specific video ids

post_video calls creator_info first and validates privacy_level against what the account actually allows, because TikTok rejects mismatches with an unhelpful error.

Secrets

TIKTOK_MCP_SECRETS selects the backend: file (default, ~/.config/tiktok-studio-mcp/credentials.json, mode 600), env, or vaultproxy.

TikTok rotates refresh tokens — every refresh returns a new one and invalidates the old. This server writes the new token back on every refresh; if it did not, authentication would work for 24 hours and then fail with no obvious cause.

Limits

Enforced by TikTok, surfaced by this server:

  • 6 requests per minute per access token on the init endpoints

  • 5 pending shares per 24 hours

  • chunked upload: files under 5 MB go whole; otherwise chunks are 5–64 MB, the final chunk may reach 128 MB, 1–1000 chunks, 4 GB maximum

Development

pip install -e '.[dev]'
ruff check src tests
pytest

Tests use an injected transport and need no TikTok credentials.

License

MIT

Available Tools

6 tools
creator_infoA

Nickname, allowed privacy levels, duration cap, interaction toggles.

Direct-Post-only. TikTok gates this endpoint on video.publish, so it is unavailable — and unnecessary — in upload mode, where the creator picks privacy in the TikTok app. Consulted automatically before a direct post, because TikTok rejects one whose privacy_level the account does not offer.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and succeeds: it discloses that the endpoint is Direct-Post-only, gated on video.publish, unavailable in upload mode, and automatically consulted to avoid rejected posts due to unsupported privacy_level. It also lists the returned fields, providing strong behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: a scannable list of returned fields followed by two sentences of critical context. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema info tool, the description covers what the tool returns (nickname, privacy levels, duration cap, interaction toggles), when it runs, and why it is needed. It leaves no major gaps for a pre-post lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the schema to describe; the description confirms it is a no-input lookup of fixed creator properties. Baseline 4 is appropriate because no parameter explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the data the tool exposes ('Nickname, allowed privacy levels, duration cap, interaction toggles'), making it clear this is a creator-info lookup, and later explains its role before direct posts. It lacks an explicit verb like 'retrieves' or 'returns,' so it falls just short of the strongest purpose statement, but it is unmistakably distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it ('Consulted automatically before a direct post'), when not ('unavailable — and unnecessary — in upload mode'), and explains the underlying TikTok permission gating on video.publish. It gives clear context with no need for alternative tool mentions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_checkA

Credentials refresh, account reachable, and which posting mode is active.

Deliberately backed by /v2/user/info/ (user.info.basic) rather than creator_info: creator_info is a Direct Post endpoint gated on video.publish, so using it here made health_check fail on exactly the upload-only setup this server is built for.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the exact endpoint and scope used ('/v2/user/info/ (user.info.basic)'), the rationale for avoiding creator_info, and the behavioral checks performed. This is substantial context well beyond a mere purpose statement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by a concise technical justification. Every word earns its place; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema health check, the description fully explains what the tool checks, why it exists, and the specific infrastructure choice. The context about upload-only setups is especially valuable for an agent deciding when this is the right call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the empty schema is fully covered. The description correctly does not invent parameter details. Per rubric, 0 params earns a baseline 4; no additional semantic explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: 'Credentials refresh, account reachable, and which posting mode is active.' It also distinguishes itself from sibling tools by explicitly contrasting its backing endpoint with creator_info, making its scope obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-not guidance by explaining that creator_info is a Direct Post endpoint gated on video.publish and would fail on upload-only setups. This tells the agent to prefer health_check over creator_info for health monitoring in such configurations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_videosC

The account's videos, with their statistics.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior, but it only states the result includes statistics. It does not reveal pagination through the cursor/limit parameters, ordering, or whether a valid account context is required, which is critical for a listing operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence, making it highly concise and easy to parse. However, its brevity comes at the cost of substance; it is efficient but under-specified, which keeps it from being excellent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations, and the description does not explain the return format, pagination behavior, or the scope of 'the account's videos'. This is inadequate for a listing tool with pagination parameters, as the agent cannot infer when all videos are returned versus a page.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description neither mentions limit nor cursor and provides no semantics for these parameters. Schema coverage is 0%, so the description fails to compensate, leaving the agent without guidance on pagination or result size control.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource ('the account's videos') and adds a distinguishing feature ('with their statistics'). However, it uses a noun phrase rather than an explicit verb, relying on the tool name 'list_videos' to convey the action. This is sufficient to separate it from video_stats, which likely focuses on individual video statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no mention of when to choose this tool over siblings such as video_stats or post_status. The description provides no context for use cases, prerequisites, or exclusions, leaving the agent to guess.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_statusA

Poll a publish_id returned by post_video.

ParametersJSON Schema
NameRequiredDescriptionDefault
publish_idYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It does not disclose any behavioral traits beyond 'poll'—no mention of return format, whether to repeat calls, rate limits, or side effects. This is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words, making it highly efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite its simplicity, the description lacks essential behavioral details and workflow context. An agent may not know what the poll returns or whether to poll repeatedly, making the tool's use incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning by indicating the publish_id comes from post_video, which is helpful. However, it does not elaborate on format or constraints, so it provides only moderate compensation for the schema's 0% description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool polls a publish_id returned by post_video, providing a specific verb ('poll') and resource (publish_id). It also distinguishes itself from siblings by referencing post_video, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage after post_video, as it says to poll a publish_id 'returned by post_video.' This gives clear context for when to use the tool, though it does not explicitly list exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

post_videoA

Upload a video to the authorized account. Returns a publish_id to poll.

In upload mode the video lands in the account's inbox/drafts. In publish mode it posts directly, which requires an audited app — until the audit passes TikTok forces all content from the client to private.

ParametersJSON Schema
NameRequiredDescriptionDefault
captionNo
dry_runNo
file_pathYes
disable_duetNo
privacy_levelNoSELF_ONLY
disable_stitchNo
disable_commentNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a good job: it discloses the return format (publish_id), the behavioral difference between upload (drafts) and publish (direct post), and a platform-specific caveat (private until audit passes). This goes beyond a simple action statement, though it omits details like error handling or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: the first sentence states the primary action and return value, then the second paragraph explains the modes. Every sentence adds value, and the front-loaded structure makes the purpose immediately clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no schema descriptions, no annotations, and no output schema, the description covers the core purpose and mode behavior, but it leaves the majority of parameters unexplained. It's minimally viable but has clear gaps for a tool with this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate, but it does not. It never mentions any parameter (e.g., dry_run, privacy_level, caption) and only vaguely refers to modes without linking them to parameters. The description adds minimal value beyond schema field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Upload a video to the authorized account' and adds a distinct return value ('Returns a publish_id to poll'), differentiating it from sibling tools like post_status and list_videos. This is a specific verb+resource statement with no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool and the two modes (upload vs. publish), including the audited app requirement for publish mode. While it doesn't explicitly mention alternatives or when not to use it, the mode explanation gives practical usage guidance that helps an agent decide how to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

video_statsB

View, like, comment and share counts for specific video ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
video_idsYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. The verb 'View' implies a read-only operation, but the description does not explicitly state that no data is modified, nor does it disclose any limitations or response format. The ambiguous phrasing further weakens transparency, preventing a higher score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence and front-loaded with the action. It is concise, but the grammatical ambiguity reduces structural clarity, so it earns a 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema. The description conveys the basic purpose, but lacks details on return structure or expected behavior (e.g., missing IDs, performance). For a tool of this complexity, the gaps prevent a higher score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only one parameter and 0% schema description coverage, the description must compensate. It clarifies that video_ids are 'specific video ids', aligning with the schema, but does not elaborate on array semantics, acceptable ID formats, or behavior when multiple IDs are provided. It adds some meaning but leaves gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the tool views counts for specific video IDs, which identifies the resource and action. However, the phrasing 'View, like, comment and share counts' is grammatically ambiguous, potentially reading as a list of verbs (view, like, comment, share) rather than metric types (view count, like count, etc.). This prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus siblings like list_videos or creator_info. It does not mention prerequisites (e.g., obtaining video IDs) or exclude cases where this tool would be inappropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.4
    • First observedcreator_info
    • First observedhealth_check
    • First observedlist_videos
    • First observedpost_status
    • First observedpost_video
    • First observedvideo_stats

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Each tool has a clear role: health_check and creator_info cover account status/capabilities, post_video and post_status handle posting, list_videos and video_stats handle video data. The only mild overlap is list_videos already includes statistics, which could make video_stats seem redundant, but it's useful for targeted lookups.

Naming Consistency4/5

All names are lowercase snake_case and readable, but the pattern varies: verb_noun (post_video, post_status, list_videos), noun_noun (creator_info, video_stats), and noun_verb (health_check). This is a minor deviation from a uniform convention.

Tool Count5/5

Six tools is well-scoped for a TikTok studio MCP, covering account health, creator capabilities, video posting, status polling, and video analytics. No tool feels extraneous.

Completeness4/5

The core lifecycle (post, poll, list, stats) is complete. Missing update/delete video operations, but the server appears designed for posting and analytics, so these are not critical gaps. Account info and post-mode checks are included.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    A comprehensive MCP server that enables AI assistants to search, download, and analyze TikTok content while also performing active tasks like publishing videos and interacting with posts. It provides full automation capabilities for TikTok through browser session management and anti-detection features.
    12
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables LLMs to automatically upload videos to the Douyin (TikTok China) creator platform with features like automated login, smart upload, SMS verification, and flexible publishing.
    9 npm
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    MCP server for TikTok that enables searching videos, users, hashtags, and fetching trending content, user profiles, and video details via official API or public scraping.
    8
    -