TikTok MCP Server
TikTok MCP Server
一个托管的模型上下文协议(MCP)服务器,为 Claude、Cursor、Windsurf 以及任何其他 MCP 客户端提供四个只读 TikTok 工具。你可以查看公开资料、遍历某个账号的视频、读取视频评论,以及搜索 TikTok 上的视频或创作者,全部以结构化 JSON 返回,无需 TikTok 开发者账号,也无需 OAuth。
它读取的是未登录访客也能看到的公开数据。它不会登录、发布内容,也不会以账号身份进行操作。
https://mcp.hasdata.com/api/mcp?apis=tiktok
目录
Related MCP server: tiktok-mcp
你需要什么
一个 MCP 客户端,以及一个可从控制台免费创建的 HasData API 密钥。这是一个远程服务器,因此最简单的接入方式是使用 URL 和 x-api-key 请求头,无需运行容器,整个流程中也不需要 TikTok 开发者账号。只支持 stdio 的客户端则通过一个轻量启动器连接,该启动器以 @hasdata/tiktok-mcp 发布在 npm 上、以 hasdata-tiktok-mcp 发布在 PyPI 上,如下所示。
快速开始
服务器 URL 对所有客户端都一样。我们在 Claude Code 和 Claude Desktop 中亲手运行过。其余配置块则遵循各客户端自己文档中规定的远程服务器格式。
字段 | 值 |
URL |
|
传输方式 | HTTP,流式 |
认证请求头 |
|
支持 OAuth 的客户端可以将同一 URL 作为连接器添加,然后直接登录,无需在配置文件中写入密钥。
claude mcp add --transport http tiktok "https://mcp.hasdata.com/api/mcp?apis=tiktok" \
--header "x-api-key: HASDATA_API_KEY"进入“设置”,然后“连接器”,然后点击“添加自定义连接器”,粘贴 https://mcp.hasdata.com/api/mcp?apis=tiktok 并登录。
如果采用配置文件方式,Claude Desktop 只会加载本地(stdio)服务器,因此需要通过 stdio 启动器连接远程服务器。@hasdata/tiktok-mcp 包就是这个启动器,它会从环境中读取密钥。将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"tiktok": {
"command": "npx",
"args": ["-y", "@hasdata/tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}使用 Python 而不是 Node?把启动器换成 PyPI 包即可,uvx 无需手动安装就能运行它:
{
"mcpServers": {
"tiktok": {
"command": "uvx",
"args": ["hasdata-tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}用于所有项目的 ~/.cursor/mcp.json,或用于单个项目的 .cursor/mcp.json:
{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codeium/windsurf/mcp_config.json。Windsurf 将该字段称为 serverUrl,而不是 url:
{
"mcpServers": {
"tiktok": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}{
"mcpServers": {
"tiktok": {
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}工作区中的 .vscode/mcp.json:
{
"servers": {
"tiktok": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}~/.codex/config.toml:
[mcp_servers.tiktok]
url = "https://mcp.hasdata.com/api/mcp?apis=tiktok"
[mcp_servers.tiktok.headers]
"x-api-key" = "HASDATA_API_KEY"~/.gemini/settings.json:
{
"mcpServers": {
"tiktok": {
"httpUrl": "https://mcp.hasdata.com/api/mcp?apis=tiktok",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}示例提示词
这些是提示词,不是代码。粘贴其中一条,代理就会自行选择合适的工具。每条都标注了所需调用次数,因为在 MCP 中由模型决定调用多少次,而且每次成功调用都会消耗 10 个积分。
以 @mrbeast 为例。拉取该账号资料,然后遍历前两页视频,并给出这些视频的播放量中位数。
三次调用,30 积分。资料是一次调用,每一页视频又各是一次调用。
在 TikTok 上搜索与“冷萃咖啡”相关的创作者,按粉丝数排出前十名,并列出各自的简介。
一次调用,10 积分。用户搜索的结果已经包含粉丝数和简介,因此无需再逐个获取资料。
这里有一个视频 URL。读取它的热门评论,并告诉我整体情感倾向以及点赞最多的三条回复。
一次调用,10 积分。URL 中的数字 id 就是评论工具所需的全部信息。
以同一个视频为例,展开点赞最多的评论下的回复。
两次调用,20 积分。先获取顶层评论,然后用该评论的 id 进行第二次调用以获取其回复。
搜索“asmr”视频,然后获取播放量最高的三个视频的作者资料。
四次调用,40 积分。一次搜索,然后每个作者各一次资料调用。搜索结果中的每个作者都带有直接指向其资料端点的链接,因此代理无需猜测用户名。
翻页每次都会消耗一次调用。一次创作者审计如果先读取资料、再遍历五页视频,就是六次调用、60 积分。试用额度用在聚焦的问题上,比用在开放式爬取上能走得更远。
工具
四个工具,全部只读。下面的示例来自真实调用并做了删减,其中的数字会随 TikTok 的更新而变化。请把它们当作数据结构样例。每个工具名称都链接到对应的端点文档,那里有完整的字段列表。
这些示例是载荷部分,不是完整响应。一次 tools/call 的结果包含一个文本块,而该文本本身是 JSON,包含 url、status、text 和 json,抓取到的数据位于 json 下。从原始 JSON-RPC 响应中,路径是解析 result.content[0].text 之后的 .json。聊天客户端会为你解开这一层,而直接调用端点的代码则不会。
用户名、视频 id 和评论 id 可以串联起来。资料页链接到其视频列表,每个视频都带有可供评论工具使用的视频 id,评论和搜索结果中的每个作者也都带有指向其资料页的 hasdataLink 和指向其视频列表的 hasdataPostsLink。代理可以从关键词一路走到创作者、视频和评论,全程无需自己构造 URL。
获取 TikTok 资料
hasdata_tiktok_profile_getTikTokProfile
按用户名获取一个公开账号。
参数 | 类型 | 必填 | 说明 |
| string | 是 | 用户名,可带可不带开头的 |
返回 username、nickname、biography、bioLink、verified、language、createTime、头像 URL,以及作为整数返回的 followers、follows、likes、videos、friends 计数。这些计数已经过解析,因此 followers > 1000000 比较的是数字,而不是显示用的字符串。
不存在的用户名仍然会返回
requestMetadata.status为ok的响应,只是profile对象缺失。在读取username或任何其他字段之前,请先确认该对象存在,否则代理执行profile.username时会因为空值而报错。
{
"username": "mrbeast",
"nickname": "MrBeast",
"verified": true,
"biography": "Checkout My New Book!👇",
"bioLink": "http://themostdangerousgames.com",
"createTime": "2018-10-20T19:26:16.000Z",
"followers": 138387571,
"follows": 354,
"likes": 1427086888,
"videos": 466,
"friends": 285
}获取 TikTok 视频
hasdata_tiktok_posts_getTikTokPosts
按用户名获取某个账号的一页视频,最新发布的在前。
参数 | 类型 | 必填 | 说明 |
| string | 是 | 用户名,可带可不带开头的 |
| string | 上一次响应中的 |
一次调用返回约三十个视频以及 pagination,其中包含 hasMore 和 nextPageToken,把后者传回即可一页一页地遍历该账号的发布历史。每个视频都带有 id、description、url、duration、封面图和可播放视频的 URL、music,以及作为整数返回的 likes、comments、shares、plays、collects 和 reposts 计数。
hashtags和mentions只出现在使用了它们的视频中。在真实的一页 27 个视频里,4 个带有hashtags数组,10 个带有mentions。在读取之前先检查键是否存在,而不要假设每个视频都有这两者。
{
"id": "7677375185028271391",
"description": "would you take the car or nah?",
"url": "https://www.tiktok.com/@mrbeast/video/7677375185028271391",
"createTime": "2026-08-23T23:36:59.000Z",
"duration": 41,
"likes": 129500,
"comments": 6670,
"shares": 2033,
"plays": 1100000,
"collects": 4986,
"music": { "title": "original sound", "authorName": "MrBeast", "original": true }
}获取 TikTok 评论
hasdata_tiktok_comments_getTikTokComments
获取公开视频下的评论,或某条评论下的回复。
参数 | 类型 | 必填 | 说明 |
| string | 是 | 数字 id,即 TikTok URL 中 |
| string | 传入它以获取该评论的回复,而不是视频的顶层评论。同样出于 64 位的原因,请使用字符串,与 | |
| string | 上一次响应中的 token。获取第一页时省略 |
每条评论都带有 text、likes、createTime、replyCount 和 author,每位作者也都带有指向其资料页的 hasdataLink 和指向其视频列表的 hasdataPostsLink。pagination.total 报告的是该视频的评论总数,因此你可以在翻页前就知道深度。replyCount 不为零的评论有回复,你可以用它的 id 作为 commentId 再次调用以获取这些回复。
{
"id": "7677377150003053325",
"text": "How could someone turn down a car",
"createTime": "2026-08-23T23:45:06.000Z",
"likes": 3802,
"replyCount": 22,
"author": {
"username": "hohce.verggr",
"nickname": "Sasori",
"hasdataLink": "https://api.hasdata.com/scrape/tiktok/profile?handle=hohce.verggr",
"hasdataPostsLink": "https://api.hasdata.com/scrape/tiktok/posts?handle=hohce.verggr"
}
}搜索 TikTok
hasdata_tiktok_search_getTikTokSearch
在视频或创作者中进行关键词搜索。
参数 | 类型 | 必填 | 说明 |
| string | 是 | 要搜索的短语 |
| string | 默认为 | |
| string | 上一次响应中的 token。获取第一页时省略 |
当 type: video 时,响应中包含的视频与 posts 工具返回的形式相同,每个视频都有其作者。当 type: user 时,响应中包含创作者,每个创作者都有 username、nickname、signature(个人简介)、avatarUrl、followers,以及相同的 hasdataLink 和 hasdataPostsLink,可继续链入个人资料或其视频。带有认证标记的账户会显示 verified 标志。
{
"username": "la.mooncoldbrew",
"nickname": "lamoon cold brew coffee",
"signature": "อยากได้สูตรชงเมนูไหน Comment ไว้เลยน้า",
"followers": 48000,
"hasdataLink": "https://api.hasdata.com/scrape/tiktok/profile?handle=la.mooncoldbrew",
"hasdataPostsLink": "https://api.hasdata.com/scrape/tiktok/posts?handle=la.mooncoldbrew"
}错误与失败路径
你的客户端几乎不会从工具调用中看到 HTTP 错误码。MCP 层返回 200,并将失败信息放在结果中,isError 设置为 true,原因以文本形式给出。代理读取到的是一条消息,而不是你可能预期的状态行。
错误的密钥会以工具输出的形式暴露,而不是连接失败。 tools/list 接受任何非空密钥并返回全部四个工具,因此客户端完成握手并显示绿色。第一次工具调用随即返回 isError: true 和文本 HasData API error: 401 Unauthorized。请留意该字符串,因为流程中此前没有任何环节报告此问题。
缺少密钥是唯一真正的 HTTP 错误。 授权在任何工具之前执行,连接本身会以 401 失败。CORS 头存在,浏览器客户端读取到的是状态码,而不是一个不透明的网络故障。
破坏工具 schema 的参数会在成为一次抓取之前被拒绝。 服务器返回 isError: true 和文本 MCP error -32602: Input validation error,并指明违规字段。不会抓取任何内容,也不会产生任何费用。
调用成功但未找到任何内容,是最容易让人困惑的情况。 一个不存在的句柄会作为普通结果返回,requestMetadata.status 设置为 ok,而 data 键直接缺失。响应正文中没有任何内容表明结果为空。请测试你需要的字段,而不是测试错误。
平台拒绝的标识符会返回 400,requestMetadata.status 设置为 error。
携带数据的返回结果同时带有 requestMetadata.id,在联系支持时值得引用。
定价、免费套餐与限额
每个 TikTok 工具每次成功调用花费 10 个积分。响应大小不会改变价格。一整页视频与只有一个字段的个人资料花费相同。
免费试用为 30 天内 1,000 个积分,无需绑卡,即 100 次 TikTok 调用。此后,只要活跃账户的余额低于 100,每天都会补充 100 个积分,因此低流量代理可以无限期地在免费套餐上运行。
付费套餐起价为 每月 $49,包含 200,000 个积分,即 20,000 次调用。单价随用量下降,从入门套餐的 每 1,000 次调用 $2.45,到 Business 的 $0.99、Growth 的 $0.83,以及最大 高用量套餐 的 $0.75。
你的套餐还决定了并发数。免费试用允许同时 1 个请求,Startup 为 15,Business 为 30,Growth 为 50,高用量套餐为 200 到 1,500。在任何无人值守的流程中,都要防御性地处理超出上限的情况,因为扇出的代理会比你更早触达上限。
返回非 200 的请求不会计费。成功调用但未找到任何内容,仍然算一次调用。
工具选择
apis 查询参数决定你的代理能看到哪些工具。工具越少,意味着用于工具定义的上下文越少,模型选错工具的机会也越少。
?apis=tiktok the four tools in this repo
?apis=tiktok,instagram a social bundle
?apis=tiktok,google_serp add Google search该参数接受 tiktok 这样的提供商名称,也接受 tiktok_search 这样的单个 API 名称。拼写错误的名称会被忽略。如果所有名称都错误,请求将失败并返回 400,响应正文会列出它无法识别的名称以及所有有效值。去掉该参数后,同一端点会暴露全部 57 个 HasData 工具。
对比
TikTok 自己的开发者计划并不涵盖对公共内容的一般性读取。Research API 需要申请,并且仅向有限区域内获批的学术和非营利研究人员开放。Display API 只返回通过 OAuth 登录的账户自己的内容。两者都不适合需要读取任意公共个人资料、其视频或视频评论的代理。
官方 TikTok API | 本服务器 | |
访问 | Research API 需申请,或 Display API 用于自己的账户 | 一个密钥和一个 URL |
范围 | 获批的研究人员,或你自己的已认证账户 | 任何公共个人资料、视频或搜索 |
认证 | 应用审核或 OAuth | 一个 |
非自己视频的评论 | 受限 | 可以,包含回复线程 |
设置 | 开发者账户和审批 | 无 |
写入和私有数据 | 通过 OAuth 发帖和访问自己的账户数据 | 只读,仅公共数据 |
大多数其他 TikTok MCP 服务器只封装一个非官方端点。本服务器涵盖了代理实际串联的四种读取操作——个人资料、帖子、评论——以及搜索,因此整个研究流程只需请求一个服务器即可完成。
本服务器不做什么。 不支持发帖、不提供私信、不提供仅粉丝可见或私有内容,也不提供非你所有账户的分析数据。它只读取未登录访客能看到的内容。
常见问题
有官方的 TikTok MCP 服务器吗?
TikTok 没有发布官方的。所有选项都是由其他人构建的。本服务器由 HasData 维护,读取的是公共页面,因此不需要 TikTok 开发者账户。
什么是 TikTok MCP 服务器?
这是一种将 TikTok 数据作为工具暴露给 AI 客户端调用的服务器。客户端通过 Model Context Protocol 发送工具调用,服务器获取数据并返回结构化的 JSON,模型直接使用结果,永远不会看到 HTML 页面。本服务器暴露四个工具,并以远程方式运行。客户端连接到一个 URL,无需启动任何本地进程。
我需要 TikTok API 密钥或开发者账户吗?
不需要。唯一需要的凭证是你的 HasData 密钥。无需提交开发者申请,也没有 OAuth 授权界面,因为这些工具读取的是 TikTok 公共页面,而非 TikTok 开发者 API。
我需要托管或运行任何东西吗?
不需要。这是一个基于 streamable HTTP 的远程 MCP 服务器。无需安装任何东西,无需保持容器运行,也无需重启进程。
数据是实时的还是缓存的?
实时的。每次调用都会在请求时抓取数据,并带有自己的 requestMetadata.id。播放量和点赞数等计数器跟随页面变动,因此它们会随页面的变化而更新。
我可以读取私有账户吗?
不可以。这些工具返回的是未登录访客能看到的内容。私有账户的视频不是公开的,因此不会出现在任何响应中。
我可以读取评论回复,而不只是顶级评论吗?
可以。调用 comments 工具时,将评论的 id 作为 commentId 传入,它会返回该评论的回复。评论的 replyCount 会告诉你是否有回复。
我可以将它与 HasData 的其他 API 一起使用吗?
可以。apis 参数接受一个列表,?apis=tiktok,instagram 会为你的代理提供四个 TikTok 工具以及 Instagram。去掉该参数 即可获得所有工具。
合规性与个人数据
HasData 仅访问公开可用的数据。平台条款可能限制自动化访问,你需要自行负责合规。如果你收集的数据包含个人信息,请确保你根据 GDPR、CCPA 或你所在司法辖区的同等规则拥有合法的处理依据。
HasData 链接
产品页面和请求构建器 | |
服务器文档 | |
一个服务器中的全部 57 个工具 | |
客户端教程 | |
我们抓取的其他所有内容 | |
套餐和积分费用 | |
密钥与用量 | |
npm 上的 Node 启动器 | |
PyPI 上的 Python 启动器 |
开发
本仓库是远程服务器的配置和文档。没有构建步骤,也无需容器化。
test/ 中的测试断言的是工具契约,也就是即使本仓库没有提交也可能出问题的部分。它们检查 ?apis=tiktok 是否恰好返回四个工具、每个工具是否仍然声明其必需参数、是否有名称变更,以及正在使用的密钥是否真的被接受。最后一项检查会真实调用一次工具并花费 10 个积分,这正是金丝雀测试为正确原因而失败的代价。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test同一套测试会在每次推送时以及每周一次的定时任务中于 CI 中运行,因为上游工具列表可能在没有任何人改动本仓库的情况下发生变化。失败意味着工具列表发生了变动、密钥停止工作或端点不可达,断言消息会指明具体是哪一种。
贡献
对工具表格和响应示例的修正是最有用的贡献,因为这些是最容易偏离的部分。请附上你发出的调用和收到的响应。来自 fork 的拉取请求会在没有密钥的情况下运行测试套件,实时检查会跳过而不是报红。
许可证
MIT。参见 LICENSE。
Maintenance
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables access to TikTok data without watermarks, including trending users, hashtags, post analytics, user profiles, and download links for specific countries. Supports searching by username, user ID, or post links.10MIT
- FlicenseBqualityCmaintenanceMCP 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
- FlicenseNot gradedqualityCmaintenanceA remote MCP server that provides tools to query live Meta (Facebook+Instagram) and TikTok organic social data, such as follower counts, insights, recent posts, and aggregated overviews.
- FlicenseNot gradedqualityCmaintenanceProvides unified access to social media data across nine networks (Instagram, TikTok, YouTube, etc.) through a set of MCP tools for profiles, posts, search, and comments, backed by the SocialBridge API.
Related MCP Connectors
All HasData scraping tools in one MCP server: Google, TikTok, Instagram, maps, e-commerce and more.
TikTok profiles (followers, bio) and per-video stats by handle or URL. No login. Pay per result.
One MCP server for 180+ live web-data APIs returning clean JSON from sites that block scrapers.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/tiktok-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server