TikTok MCP Server
TikTok MCP Server
ホスト型の Model Context Protocol (MCP) サーバーで、Claude、Cursor、Windsurf、およびその他の MCP クライアントに、読み取り専用の TikTok ツールを4つ提供します。公開プロフィールの参照、アカウントの動画の一覧取得、動画のコメントの読み取り、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 にしか対応していないクライアントは、npm では @hasdata/tiktok-mcp、PyPI では hasdata-tiktok-mcp として公開されている薄いランナー(launcher)を経由して接続します。その例は後述します。
クイックスタート
サーバーの URL はどのクライアントでも同じです。このサーバーは Claude Code と Claude Desktop で実際に使っています。他のブロックは、各クライアントが公式に定めているリモートサーバー用の形式に従っています。
フィールド | 値 |
URL |
|
トランスポート | HTTP・streamable |
認証ヘッダー |
|
OAuth に対応したクライアントでは、同じ URL をコネクタとして追加し、設定ファイルにキーを書かずにサインインできます。
claude mcp add --transport http tiktok "https://mcp.hasdata.com/api/mcp?apis=tiktok" \
--header "x-api-key: HASDATA_API_KEY"設定 →「Connectors」→「Add custom connector」の順に選び、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 ではなく、uvx が手動インストールなしで実行できる PyPI パッケージにランチャーを置き換えます。
{
"mcpServers": {
"tiktok": {
"command": "uvx",
"args": ["hasdata-tiktok-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}すべてのプロジェクトでは ~/.cursor/mcp.json、1つのプロジェクトでは .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 はこのフィールドを url ではなく serverUrl と呼びます:
{
"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 を対象にします。そのプロフィールを取得し、動画の最初の2ページを読み進めて、それらの動画の再生回数の中央値を教えてください。
呼び出しは3回、30クレジットです(プロフィールが1回、動画のページが2回です)。
次に、その動画の上部コメントを読み取って、全体的な感情と、最もいいねを集めた返信3件を教えてください。
呼び出しは1回、10クレジットです。URL 内の数値IDが、コメントツールに必要な情報です。
その同じ動画を対象に、最もいいねの最も多いコメント以下の返信を展開してください。
呼び出しは2回、20クレジットです。まずトップコメントを取得し、次にそのコメントのIDを使って返信の2回目の呼び出しを行います。
"asmr" の動画を検索し、再生回数上位3本の著者のプロフィールを取得してください。
呼び出しは4回、40クレジットです。検索1回、プロフィール3回です。検索結果の各著者には、そのプロフィールエンドポイントへの直接リンクが含まれるため、ハンドルを推測する必要はありません。
ページ送りには毎回1つのファイルがかかります。プロフィールを読んでから動画のページを5ページ分たどるクリエイター監査は、呼び出し6回・60クレジットです。無料トークンは、限定的で対象を絞った質問の方が、全部をクロールする場合より長く持続します。
ツール
4つのツールはすべて読み取り専用です。以下に示すサンプルは、実際の呼び出し結果を短縮したもので、数値はTikTokの更新に伴って変わります。形としてだけ捉えてください。各ツール名は、フィールド一覧を持つエンドポイントのリファレンスにリンクしています。
サンプルはレスポンス全体ではなく、ペイロードです。tools/call 結果にはテキストブロックが1つ入っています。そのテキスト自体は url, status, text, json を持つJSONで、その json の下にスクレイピングされたデータがあります。生の JSON-RPC レスポンスから取り出す場合は、result.content[0].text を取得してパースし、次に .json を得ます。チャットクライアントはこれを自動的に展開してくれますが、エンドポイントに直接接続するコードでは自分で行う必要があります。
ハンドル、動画ID、コメントIDはチェーンになります。プロフィールは自分の投稿に、各投稿はコメントツール用の自身の動画 ID に、コメントや検索結果のすべての著者は、自身のプロフィールへの hasdataLink と動画への hasdataPostsLink に接続されています。エージェントは URL を組み立てることなく、キーワードからクリエイター、動画、コメントへと移動できます。
TikTok プロフィールを取得
hasdata_tiktok_profile_getTikTokProfile
ハンドル指定で公開アカウントを1つ取得します。
パラメータ | タイプ | 必須 | 備考 |
| 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
ハンドルで指定したアカウントの動画の1ページを、新しい順で取得します。
パラメータ | タイプ | 必須 | 備考 |
| string | はい | ユーザー名。先頭の |
| string | いいえ | 前回のレスポンスの |
1回の呼び出しで、約30件の動画と pagination が返ります。pagination には hasMore と、アカウントの履歴を1ページずつ進めるためにそのままフォードバックする 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
公開動画のコメント、または1つのコメントへの返信を取得します。
パラメータ | タイプ | 必須 | 備考 |
| string | はい | 数値 ID。TikTok の URL の |
| string | いいえ | この値を指定すると、動画のトップコメントではありませんに、そのコメントへの返信を取得します。 |
| string | いいえ | 前回のレスポンスのトークン。最初のページでは省略します。 |
各コメントには、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 | いいえ | 前回のレスポンスのトークン。最初のページでは省略します。 |
type: video では、投稿ツールと同じ形状の動画がレスポンスの返り、それぞれに作成者が含まれます。type: user の場合はクリエイターが返り、各クリエイターに username, nickname, signature(自己紹介), avatarUrl、および同じ 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は空でないキーなら何でも受け付け、4つのツールをすべて返すため、クライアントはハンドシェイクを完了してグリーン表示になります。その後の最初のツール呼び出しが、isError: trueとHasData API error: 401 Unauthorizedというテキストを返します。この文字列に注意してください。このフローの中のそれ以前のどこにも、この問題を報告するものはないからです。
キーがない場合だけが、唯一の本当のHTTPエラーです。 認証はどのツールよりも先に実行され、接続自体が401で失敗します。CORSヘッダーは存在するので、ブラウザのクライアントは不透明なネットワークエラーではなくステータスを読み取ります。
ツールのスキーマを壊す引数は、スクレイピングになる前に拒否されます。 サーバーはisError: trueと、問題のあるフィールドを指し示すMCP error -32602: Input validation errorというテキストで応答します。何も取得されず、課金も発生しません。
成功はするが何も見つからない呼び出し、それが人を惑わせるケースです。 存在しないハンドルは、requestMetadata.statusがokに設定され、dataキーが単に欠けた、ごく普通の結果として返されます。結果が空だったとは本文のどこにも書かれていません。エラーをテストするのではなく、必要なフィールドをテストしてください。
プラットフォームが拒否する識別子は400を返し、requestMetadata.statusはerrorに設定されます。
データを含む結果には、サポート問い合わせで引用する価値のあるrequestMetadata.idも含まれます。
料金、無料枠、上限
すべてのTikTokツールは、成功した呼び出し1回につき10クレジットかかります。レスポンスのサイズで料金は変わりません。動画が1ページ分あっても、フィールドが1つだけのプロフィールでも同じ料金です。
無料トライアルはカード不要で30日間1,000クレジット、つまりTikTok呼び出し100回分です。その後も、アクティブなアカウントには残高が100クレジットを下回るたびに毎日100クレジットが補充されるため、使用量の少ないエージェントなら無料枠で無期限に動かせます。
有料プランは月額$49で200,000クレジット、つまり20,000回の呼び出しから始まります。単価は量に応じて下がり、エントリープランは1,000回あたり$2.45、Businessは**$0.99**、Growthは**$0.83**、そして最大のhigh-volumeプランは**$0.75**です。
プランは同時実行数も決めます。無料トライアルは同時に1リクエスト、Startupは15、Businessは30、Growthは50、high-volumeプランは200〜1,500で動作します。無人で動くものはオーバーフローを防御的に扱ってください。ファンアウトするエージェントは、あなたが気づくよりも先に上限に達するからです。
非200で返ってきたリクエストは課金されません。成功しても何も見つからない呼び出しも、それでも1回の呼び出しです。
ツール選択
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で失敗し、ボディは認識できなかったものと有効な値のすべてを列挙します。パラメータを省略すると、同じエンドポイントがHasDataの全57ツールを公開します。
比較
TikTok公式のデベロープログラムは、公開コンテンツの一般的な読み取りを対象としていません。Research APIはアプリケーションによる審査の門戸があり、許可された学術・非営利の研究者だけが、限られた地域で利用できます。Display APIはOAuthでサインインしたアカウントのコンテンツしか返しません。どちらも、任意の公開プロフィール、その動画、動画のコメントを読みたいエージェントには向いていません。
公式TikTok API | このサーバー | |
アクセス | Research APIは申請による、または自分のアカウント向けDisplay API | キー1つでURL 1つ |
対象範囲 | 承認された研究者、または自分の認証済みアカウント | 任意の公開プロフィール、動画、検索 |
認証 | アプリレビューまたはAppID |
|
所有外の動画のコメント | 制限あり | 可(リプライスレッド付き) |
セットアップ | 開発者アカウントと承認 | 不要 |
書き込みと非公開データの取り扱い | OAuthによる投稿と自分のアカウントデータ | 読み取り専用、公開データのみ |
他のTikTok MCPサーバーのほとんどは、単一の非公式エンドポイントをラップしただけのものです。このサーバーは、エージェントが実際にチェーンする4つの読み取り——プロフィールから投稿、コメントへ——加えて検索にも対応しているので、一連のリサーチを1つのサーバーに全部まかせられます。
このサーバーがしないこと。 投稿、ダイレクトメッセージ、フォロワー限定閲覧・非公開のコンテンツ、自分が所有しないアカウントの分析APIは一切ありません。ログアウトした訪問者に見えるものだけを読み取ります。
FAQ
公式のTikTok MCPサーバーはありますか?
TikTokは公式のものを公開していません。どの選択肢も誰かが作ったものです。このサーバーはHasDataが運用し、公開ページを読み取るため、TikTokの開発者アカウントは不要です。
TikTok MCPサーバーとは何ですか?
TikTokのデータを、AIクライアントが呼び出せるツールとして公開する仕組みです。クライアントはModel Context Protocolでツール呼び出しを送り、サーバーがデータを取得して構造化されたJSONを返します。モデルはその結果を処理するだけで、HTMLページを見ることはありません。このサーバーは4つのツールを公開し、リモートで動作します。クライアントはURLに接続するだけで、ローカルプロセスは起動しません。
TikTokのAPIキーや開発者アカウントは必要ですか?
いいえ、必要ありません。唯一の認証情報はHasDataのキーです。開発者アプリの申請もOAuthの同意画面もありません。TikTok固有の開発者APIではなく、TikTokの公開ページを読み取るからです。
ホストや実行環境は必要ですか?
いいえ。これはstreamable HTTP上で動作するMTCP MCPサーバーです。インストールするものも、稼働させておくコンテナも、再起動するプロセスもありません。
データはライブですか、それともキャッシュですか?
ライブです。各呼び出しはリクエスト時に処理を取得し、それぞれ独自のrequestMetadata.idを持ちます。再生数やいいね数などのカウンターはページを追跡しているため、ページが動くとれだけ動きません。
非公開アカウントを読めますか?
いいえ。ツールが返すのは、ログアウトした訪問者に見えるものだけです。非公開アカウントの動画は公開されていないため、どのレスポンスにも含まれません。
トップレベルのコメントだけでなく、返信コメントも読めますか?
はい。コメントのidをcommentIdとしてコメントツールに渡すと、そのコメントへの返信が返ります。コメントのreplyCountを見ると、返信があるかどうかがわかります。
他のHasData APIと一緒に使えますか?
はい。apisパラメータはリストを受け取るので、?apis=tiktok,instagramとすると、エージェントにTikTokの4ツールにInstagramが加わります。パラメータを省くとすべてが使えます。
コンプライアンスと個人データ
HasDataは、一般で公開されているデータのみにアクセスします。プラットフォーム側の規約が自動アクセスに制限をかけることがあり、コンプライアンスの責任はあなた自身にあります。収集するデータに個人情報が含まれる場合、GDPR、CCPA、または管轄地域内の同等の命令に基づいて、その扱いに legally 有効な根拠があることを確認してください。
HasDataリンク
プロダクトページとリクエストビルダー | |
サーバー ドキュメント | |
1つのサーバーに全57ツール | |
クライアントの歩き方 | |
その他スクレイピング対象 | |
料金プランとクレジット費用 | |
キーと使用状況 |
開発
このリポジトリは、リモートサーバーのための設定とドキュメントです。ビルドステップはなく、コンテナ化するものもありません。
test/のテストは、ツールの契約——いまここにコミットしなくても壊れ得る部分——を検証します。テストでは、?apis=tiktokが正確に4つのツールを返すこと、すべてのツールが必須パラメータをまだ宣言していること、名前が変えてしままわないこと、使用中のキーが実際に受け入れられていることを確認します。最後のオートクリンツールを実際に呼び出して10クレジットを消費し、正しい理由で失敗するカナリアの節度として身代わりです。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test同じスイートは、すべてのプッシュと週一回のスケジュールでCIust動します。このリポジトリに誰も触らなくても、上流のツールリストは変わり得るからです。中断がある場合、ツールリストが動いたのか、キーが効かなくなったのか、エンドポイントが届かないのかをアサートのメッセージが示します。
コントリビューション
ツール表とレスポンスサンプルの修正が最も価値のあるコントリビューションです。それらは浮いてくる場所だからです。実施した呼び出しと得られた応答を含めてください。フォークからのプルリクエストはキーなしでスイートを実行し、ライブチェックは失敗するのではなくスキップされます。
ライセンス
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.
One MCP for 160+ live web-data APIs — clean JSON from sites that block scrapers.
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
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