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 として公開されている軽量ランチャーを経由して接続します。以下に示します。
クイックスタート
サーバー 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"Settings から 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" }
}
}
}Node ではなく Python を使いますか? ランチャーを 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 は 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 回、動画の各ページがそれぞれ 1 回です。
TikTok で「cold brew coffee」に関するクリエイターを検索し、フォロワー数で上位 10 人を、それぞれのプロフィール文とともにランキングして教えてください。
1 回の呼び出し、10 クレジット。ユーザー検索にはフォロワー数とプロフィール文がすでに含まれるため、プロフィールごとの追跡呼び出しは不要です。
動画 URL があります。その上位コメントを読み、全体的な感情と「いいね」が多かった 3 件の返信を教えてください。
1 回の呼び出し、10 クレジット。URL 内の数値 ID だけでコメントツールは動作します。
同じ動画について、最も「いいね」が多いコメントの返信を展開してください。
2 回の呼び出し、20 クレジット。まずトップレベルコメントを取得し、次にそのコメントの ID を使ってもう 1 回呼び出して返信を取得します。
「asmr」の動画を検索し、再生回数が最も多い 3 本の著者のプロフィールを取得してください。
4 回の呼び出し、40 クレジット。検索が 1 回、その後のプロフィールが各 1 回です。検索結果の各著者にはプロフィールエンドポイントへのリンクが直接含まれるため、エージェントはハンドルを推測する必要がありまません。
ページングには呼び出しが 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を実行するエージェントが null に対して例外を投げます。
{
"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、playes、collects、reposts の整数カウントが含まれます。
hashtagsとmentionsは、それらを利用している動画にのみ存在します。実際の 27 本の動画の 1 ページでは、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 が 0 以外のコメントには返信があり、その 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 の場合、レスポンスには 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 は空でないキーをすべて受け入れ、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 ツールは、成功した呼び出しごとに 10 クレジット かかります。レスポンスのサイズによって価格は変わりません。動画の全ページも、フィールドが 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 つのキーと 1 つの URL |
範囲 | 承認された研究者、または自分自身の認証済みアカウント | 任意の公開プロフィール、動画、検索 |
認証 | アプリケーション審査または OAuth |
|
自分が所有していない動画のコメント | 制限あり | はい。返信スレッド付き |
セットアップ | 開発者アカウントと承認 | 不要 |
書き込みとプライベートデータ | OAuth による投稿と自分のアカウントデータ | 読み取り専用、公開データのみ |
ほとんどの他の TikTok MCP サーバーは、単一の非公式エンドポイントをラップしています。このサーバーは、エージェントが実際にチェーンする 4 つの読み取り(プロフィール、投稿、コメント)に加えて検索をカバーしているため、調査全体を 1 つのサーバーに対して実行できます。
このサーバーが行わないこと。 投稿はなく、ダイレクトメッセージもなく、フォロワー限定や非公開のコンテンツもなく、自分が所有していないアカウントの分析もありません。サインアウトした訪問者が見られるものを読み取ります。
FAQ
公式の TikTok MCP サーバーはありますか?
TikTok は公式のものを公開していません。すべての選択肢は誰か他の人が構築したものです。これは HasData がメンテナンスし、公開ページを読み取るものであり、そのため TikTok 開発者アカウントは不要です。
TikTok MCP サーバーとは何ですか?
AI クライアントが呼び出せるツールとして TikTok データを公開するサーバーです。クライアントは Model Context Protocol を介してツール呼び出しを送信し、サーバーはデータを取得して構造化 JSON を返し、モデルは結果を処理し、HTML ページを見ることはありません。このサーバーは 4 つのツールを公開し、リモートで実行されます。クライアントは URL に接続するだけで、ローカルプロセスは起動しません。
TikTok API キーまたは開発者アカウントは必要ですか?
いいえ。唯一の認証情報は HasData キーです。提出する開発者アプリケーションも、OAuth の同意画面もありません。ツールが読み取るのは TikTok 開発者 API ではなく、TikTok の公開ページだからです。
何かをホストまたは実行する必要がありますか?
いいえ。これはストリーミング可能な HTTP 上のリモート MCP サーバーです。インストールするものも、ウォームに保つコンテナも、再起動するプロセスもありません。
データはライブですか、それともキャッシュされていますか?
ライブです。各呼び出しはリクエスト時に取得し、独自の requestMetadata.id を持ちます。再生数やいいねなどのカウンターはページを追跡するため、ページが動くにつれて動きます。
非公開アカウントを読むことはできますか?
いいえ。ツールはサインアウトした訪問者が見るものを返します。非公開アカウントの動画は公開されていないため、どのレスポンスにも含まれません。
トップレベルのコメントだけでなく、コメントへの返信も読めますか?
はい。コメントの id を commentId として comments ツールを呼び出すと、そのコメントへの返信が返されます。コメントの replyCount は、返信があるかどうかを示します。
他の HasData API と一緒に使えますか?
はい。apis パラメータはリストを受け取り、?apis=tiktok,instagram とすると、エージェントに 4 つの TikTok ツールに加えて Instagram が提供されます。パラメータを省約すると、すべてを取得できます。
コンプライアンスと個人データ
HasData は公開されているデータのみにアクセスします。プラットフォームの利用規約が自動アクセスを制限する場合があり、各自のコンプライアンスについてはお客様自身が責任を負います。収集するデータに個人情報が含まれる場合は、GDPR、CCPA、またはお客様の管轄区域の同等の規則の下で、それに対する適法な根拠があることを確認してください。
HasData リンク
製品ページとリクエストビルダー | |
サーバードキュメント | |
全 57 ツールを 1 つのサーバーで | |
クライアントチュートリアル | |
その他にスクレイピングするすべて | |
プランとクレジットコスト | |
キーと使用状況 | |
npm の Node ランチャー | |
PyPI の Python ランチャー |
開発
このリポジトリは、リモートサーバーの設定とドキュメントです。ビルドステップはなく、コンテナ化するものもありません。
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同じスイートが CI で、プッシュのたびとスケジュールによる週 1 回実行されます。上流のツールリストが、このリポジトリに誰も触れずに変更される可能性があるからです。失敗は、ツールリストが変わった、キーが機能しなくなった、またはエンドポイントに到達できなかったことを意味し、アサーションメッセージがどれかを示します。
コントリビューション
ツールの表とレスポンスサンプルへの修正が最も有用な貢献です。それらは乖離しやすい部分だからです。行った呼び出しと得られたレスポンスを含めてください。フォークからのプルリクエストはキーなしでスイートを実行し、ライブチェックはレッドになる代わりにスキップされます。
ライセンス
MIT。 LICENSE を参照してください。
Available Tools
4 toolshasdata_tiktok_comments_getTikTokCommentstiktok_comments: GET /AInspect
Get TikTok Comments
Fetches the comments on a public TikTok video by its numeric video id, or the replies to a specific comment when commentId is given. Each comment returns text, like count, timestamp, reply count, and author (username, nickname, avatar, plus hasdataLink to the profile endpoint and hasdataPostsLink to the posts endpoint). Supports token-based pagination via nextPageToken. Use for sentiment analysis, engagement research, or building comment datasets from a video discovered via the posts or search APIs.
| Name | Required | Description | Default |
|---|---|---|---|
| videoId | Yes | The numeric id of the video (the number after `/video/` in a TikTok URL). | |
| commentId | No | When provided, returns the replies to this comment instead of the video's top-level comments. | |
| nextPageToken | No | Defines the next page token. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and explains read-only fetching of public comments, pagination via nextPageToken, and the returned comment fields. It does not mention rate limits or error behavior, but the disclosed behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, well-organized, and free of filler. Key information about input, output fields, pagination, and use cases is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description enumerates returned comment fields and pagination behavior, which gives an agent enough context for typical use. It lacks response envelope or error details, but those are not essential for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptive schema entries, and the description adds practical context: videoId is the number after /video/ in a TikTok URL, commentId selects replies, and nextPageToken uses the previous response value with omission for the first page.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches TikTok comments by video ID or replies by comment ID, distinguishing it from sibling TikTok profile, posts, and search tools. The verb 'Fetches' and the resource 'comments on a public TikTok video' make the purpose specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete use cases such as sentiment analysis, engagement research, and building comment datasets, and notes that videos may be discovered via posts or search APIs. It does not explicitly contrast with sibling tools, but the guidance is sufficient for typical selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_tiktok_posts_getTikTokPoststiktok_posts: GET /AInspect
Get TikTok Posts
Fetches a page of videos for a public TikTok account by username (handle) and returns each video with description, hashtags, mentions, like/comment/share/play/collect counts, cover and playable video URLs, music, duration, and timestamp. Returns a page of ~35 videos plus a nextPageToken; pass that token back to walk the account history one page at a time. Use to monitor competitor content, track engagement of creator videos, or build datasets of account content for vetting and analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | The TikTok username of the account whose videos you want to scrape, with or without the `@` symbol. | |
| nextPageToken | No | Defines the next page token. It is used for retrieving the next page of results. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses pagination via nextPageToken, a page size of ~35 videos, and the public-account constraint. It does not mention rate limits or error cases, but the read-only nature is clearly implied by 'Fetches'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, with the core behavior stated immediately and use cases at the end. The opening line repeats the title, but the rest of the content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter fetch tool with no output schema, the description covers what is returned, pagination, and typical use cases. It is complete enough for correct invocation, though it omits potential failure modes and rate-limit context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are already well-documented in the schema. The description reinforces the handle and pagination concepts but does not add significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a page of videos for a public TikTok account by username, and enumerates the returned fields. This distinguishes it from sibling tools focused on comments, profile, and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are given: monitoring competitors, tracking engagement, and building datasets for analytics. It does not name alternative tools or exclusions, but the context is clear enough for selecting this tool over the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_tiktok_profile_getTikTokProfiletiktok_profile: GET /AInspect
Get TikTok Profile
Fetches a public TikTok profile by username (handle) and returns nickname, biography, bio link, avatar URLs, verified/private flags, account creation time, and followers, follows, likes, videos, and friends counts. Use to enrich CRM/lead records, verify influencer reach before outreach, monitor competitor accounts, or build datasets of creator metadata for vetting and analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | The TikTok username of the profile you want to scrape, with or without the `@` symbol. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It accurately conveys that this is a read operation (fetches) on public profiles, but it does not disclose potential edge cases like errors for non-existent handles, rate limits, or authentication requirements. For a simple GET it is acceptable but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the tool's purpose, and avoids unnecessary fluff. The second sentence adds value by listing return fields and use cases. It is efficiently written without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers the essential information: what it does, what it returns, and typical use cases. It does not discuss error handling or output formatting, but given the simplicity of the operation, it is sufficiently complete for an agent to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'handle' is fully documented in the schema with an explanation of format (with or without '@'). The description adds no additional semantics beyond restating the parameter name. Since schema coverage is 100%, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches a public TikTok profile by username and enumerates the exact data returned (nickname, bio, counts, flags). It is specific about the resource and action, and its distinctness from sibling tools (comments, posts, search) is evident from the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage contexts (CRM enrichment, influencer vetting, competitor monitoring) which implicitly distinguish it from siblings that handle posts, comments, or search. It does not explicitly state when not to use it or name alternatives, but the context is unambiguous enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hasdata_tiktok_search_getTikTokSearchtiktok_search: GET /AInspect
Search TikTok
Searches TikTok by keyword and returns either videos (with description, hashtags, mentions, like/comment/share/play counts, cover and playable video URLs, music, and author) or users (nickname, bio, avatar, verified flag, follower count). Each author and each user carries a hasdataLink to their profile endpoint and a hasdataPostsLink to their posts endpoint. Supports token-based pagination via nextPageToken. Use for content discovery, trend research, influencer discovery, or building datasets from a keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | What to search for — videos or users. Defaults to video. | |
| keyword | Yes | The phrase to search for on TikTok. | |
| nextPageToken | No | Defines the next page token. Use the `nextPageToken` value returned by the previous response. Omit it to fetch the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description should carry the full burden of disclosing behavioral traits. It does not state that the operation is read-only, nor does it mention rate limits, data modification, or other side effects. The absence of such details leaves behavioral transparency incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise and well-structured. It conveys the core functionality and relevant details without unnecessary verbosity, though it could be slightly tighter by removing redundant phrasing like repeating 'hasdataLink' and 'hasdataPostsLink'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description does well to enumerate the return fields (e.g., description, likes, comments, author) and explain pagination. It also gives practical use cases. Minor gaps include not explaining the structure of the nested author/user objects or the exact format of the response envelope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all parameters with descriptions (100% coverage), and the tool description adds some context about pagination usage. However, it largely repeats the schema information without significantly deepening understanding, so it provides marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches TikTok by keyword and returns videos or users, with a list of fields. It also names specific use cases like content discovery and trend research, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use the tool (content discovery, trend research, etc.) and explains pagination with nextPageToken. However, it does not explicitly contrast with sibling tools, though the distinct focus on search is implicit.
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.
4 tool updates
v0.1.0- First observed
hasdata_tiktok_comments_getTikTokComments - First observed
hasdata_tiktok_posts_getTikTokPosts - First observed
hasdata_tiktok_profile_getTikTokProfile - First observed
hasdata_tiktok_search_getTikTokSearch
TDQS
Scored across 4 tools
Each tool targets a distinct data surface: search, profile metadata, account posts, and comments. Even though profile and posts are both keyed by username, their return shapes are clearly different, so an agent should not confuse them.
Every tool follows the same strict pattern: hasdata_tiktok_<resource>_getTikTok<Resource>. The verb-first camelCase naming is applied uniformly across the entire set.
Four tools is a focused, appropriate scope for a read-only TikTok data server. Each tool covers a distinct public-data API surface and none feel redundant.
The set covers the main public TikTok use cases: discovery via search, profile lookup, posts retrieval, and comment fetching. A direct get-video-by-ID tool is missing, but search and posts largely fill that gap.
Maintenance
Related MCP Connectors
Unified social scraper MCP — profiles, posts, videos across ~40 platforms via Streamable HTTP.
TikTok videos, profiles, hashtags, search, comments and followers as JSON. No login. $0.35/1k videos
TikTok profiles, video stats and transcripts by handle or URL. No login. Pay per result.
TikTok search demand, videos, creators, comments and captions for AI agents. OAuth or API key.
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
- FlicenseBqualityDmaintenanceMCP 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-
- AlicenseAqualityBmaintenanceEnables downloading TikTok videos and photos without watermarks, extracting metadata and analytics, and performing bulk downloads of user profiles via CLI or as an MCP server for AI assistants.512 npm1MIT
- AlicenseAqualityAmaintenanceA hosted Model Context Protocol server providing read-only YouTube tools for search, video/channel data, and transcripts, with no Google Cloud project or API key required.450 npm67 PyPI6MIT