# SOLARI > SOLARI CLI と MCP — ターミナルで使うクリエイター・ブランドインテリジェンス。 ## 概要 SOLARI CLI は SOLARI のクリエイター・コンテンツデータをターミナルに持ち込みます。Instagram・TikTok のブランドやクリエイターを検索し、広告コンテンツの規模を測り、キャプションと動画の文字起こしに実際に含まれる言葉を検索し、いま伸びている流れを読みます。jq・シェルスクリプト・AI コーディングエージェントとそのまま組み合わせられる、ふつうのコマンドです。 SOLARI は MCP サーバーとしても公開されており、Claude Desktop や ChatGPT のようなアプリは CLI なしで直接つなげます。どちらから来ても同じツールと同じ読み取り専用の権限を使います。 ```console $ solari instagram account search query=oliveyoung brands_only=true $ solari tiktok content search query=sunscreen region=KR $ solari instagram content trending region=KR limit=10 --json ``` ## インストール CLI はファイル 1 つで、ほかに入れておくものはありません。普段ツールを入れている方法のうち、使いやすいものを選んでください。どれを選んでも中身は同じです。 **macOS** Shell: ```bash curl -fsSL https://solari.sh/install | sh ``` Homebrew: ```bash brew install brandazine/solari/solari ``` npm: ```bash npm install -g @brandazine/solari ``` uv: ```bash uv tool install solari-cli ``` uv tool は CLI を専用の環境に入れて PATH に通します。プロジェクトの依存関係と衝突しません。 **Windows** PowerShell: ```powershell irm https://solari.sh/install.ps1 | iex ``` npm: ```bash npm install -g @brandazine/solari ``` uv: ```bash uv tool install solari-cli ``` uv tool は CLI を専用の環境に入れて PATH に通します。プロジェクトの依存関係と衝突しません。 **Linux** Shell: ```bash curl -fsSL https://solari.sh/install | sh ``` npm: ```bash npm install -g @brandazine/solari ``` uv: ```bash uv tool install solari-cli ``` uv tool は CLI を専用の環境に入れて PATH に通します。プロジェクトの依存関係と衝突しません。 インストールを確認してください: ```console $ solari --version 1.0.0-alpha.9 ``` ## クイックスタート 一度サインインしたら、ツールを見て 1 つ実行してみてください。閲覧は自分のマシンにある写しが答えるので、すぐに返ってきます。 ```console $ solari auth login # opens a browser; sign in with your SOLARI account $ solari # platforms and groups available to you $ solari instagram account # a group path lists its tools $ solari instagram account search --help # parameters, without calling $ solari instagram account search query=oliveyoung brands_only=true limit=3 ``` たいていは名前を account_id に変え、その id を他のツールに渡していく流れになります: ```console $ solari instagram account search query=innisfree brands_only=true --json \ | jq -r '.content[0].text | fromjson | .items[0].account_id' 018cabce-14cc-7544-8890-7811ec33ef74 $ solari instagram brand ad stats username=innisfreeofficial $ solari instagram brand top collaborators username=innisfreeofficial limit=20 ``` 入り口は名前だけではありません。query_type=bio はアカウントが自分について書いた文言を検索するので、すでに知っているブランドではなくカテゴリから始められます: ```console $ solari instagram account search query="협찬 문의" query_type=bio region=KR limit=10 $ solari instagram account search query=skincare query_type=bio brands_only=true limit=20 ``` ## コマンド構造 パスがそのままコマンドになります。途中まで打てばその下にあるものが一覧で出て、ツールのパスを最後まで打てば実行され、必要な値が抜けていれば実行せずに何が必要かを教えてくれます。空白とアンダースコアは同じように動き、solari_ の接頭辞は省けます。 ```console $ solari instagram brand # lists the group $ solari brand overview --help # unambiguous trailing paths resolve while browsing $ solari instagram brand overview username=innisfreeofficial # calls ``` 引数は key=value のペア。配列は JSON でもカンマ区切りリストでも受け付けます。 ```bash solari instagram content batch post_ids='["019f505f-…","019f5060-…"]' solari instagram content batch post_ids=019f505f-…,019f5060-… ``` - `solari help all` — すべてのコマンド・ツール・パラメータを 1 ページにまとめて表示します。自分のマシンから答え、--json を付けると機械が読みやすい形式になります。AI エージェントに一度でまとめて渡すときに便利です。 - `solari get ` — ツールの実行だけを行い、途中までのパスは受け付けません。タイプミスが黙って一覧表示に変わっては困るスクリプトで使ってください。 - `solari cache refresh` — 自分のマシンにあるツール一覧をすぐに更新します。ひとりでに更新されるのを待つ必要はありません。 ## 認証 サインインするとブラウザが開きます。ふつうのウェブサイトにサインインするのと同じです。 - `solari auth login` — ブラウザを開きます。開けない環境(SSH や、エージェントが代わりに実行している場合)では、サインイン用のリンクを代わりに表示します。 - `solari auth list` — サインイン済みの SOLARI アカウントをすべて表示します。 - `solari auth switch ` — すでにサインイン済みの別のアカウントに切り替えます。ブラウザを開き直す必要はありません。 - `solari auth status` — どのサーバーのどのアカウントか、何にアクセスできるか、サインインがいつ切れるかを表示します。終了コード 3 は、もう一度サインインが必要という意味です。 - `solari auth logout` — サインアウトします。--all を付けるとすべてのアカウントから一度にサインアウトします。 ブラウザがコマンドを実行したマシンに戻してくれない環境(SSH やコンテナの中)では、サインインを終えたあとブラウザのアドレスバーにある URL をコピーし、待機しているプロンプトに貼り付けてください。 ### どこまでアクセスできるか 権限は読み取り専用の 1 つだけで、すべてのツールに適用されます。サインインさえ済めば全部使えます。階層も、ツールごとの解放もありません。プランで制限する代わりに、1 つのアカウントがどれだけ頻繁に呼べるかにだけ上限があります。 ## 出力とパイプ 結果は標準出力へ、プロンプトとヒントは標準エラーへ出ます。そのためパイプにはデータだけが流れます。色は端末で人が見ているときにだけ付き、パイプや JSON に混ざることはありません。 - `--json` — 加工していない JSON。ツールの答えは一枚包まれた形で返ります。実際のデータは content[0].text の中の JSON 文字列です。 - `--ndjson` — 1 行に JSON オブジェクトを 1 つずつ、レスポンス内の項目を順に流します。それらを囲んでいた値(total、has_more など)は標準エラーへ送られます。jq と組み合わせたり、大量のデータをそのままファイルに書き出したりするためのオプションです。 - `--refresh` — 自分のマシンの写しを飛ばして、サーバーからツール一覧を取り直します。 - `--color[=always|never|auto]` — ヘルプとツール一覧に色を付けます。既定の auto は端末で見ているときだけ色を使います。NO_COLOR=1 で無効、FORCE_COLOR=1 ならパイプでも有効になります。--no-color は never と同じです。 - `--verbose, -v` — コマンドが動いている間、進行状況を標準エラーに出力します。秘匿値は伏せられます。 ```console $ solari instagram brand ad posts username=innisfreeofficial months=24 limit=200 --ndjson >> ads.ndjson $ jq -s 'group_by(.username) | map({creator: .[0].username, posts: length})' ads.ndjson ``` ## 設定 設定は ~/.solari/config.json にあります。どの設定にも対になる環境変数があり、指定するとその 1 回のコマンドだけそちらが優先されます。solari config list は、いま効いている値とその出どころを併せて表示します。 ```console $ solari config list $ solari config set server https://solari.sh $ solari config unset server ``` - `server · SOLARI_SERVER` — どの SOLARI サーバーに接続するか。既定は https://solari.sh で、サインインに成功するとそのとき使ったサーバーを覚えます。 - `cacheTtl · SOLARI_CACHE_TTL` — 自分のマシンのツール一覧を最新とみなす秒数。既定は 900 で、0 なら毎回サーバーに問い合わせます。 - `cacheShadow · SOLARI_CACHE_SHADOW` — 自分のマシンから答えたあと、裏で静かにツール一覧を更新するか。既定は true。 - `callTimeout · SOLARI_CALL_TIMEOUT` — ツール呼び出しを待つ秒数。既定は 150。 - `catalogTimeout · SOLARI_CATALOG_TIMEOUT` — ツール一覧を待つ秒数。既定は 8。つながらないサーバーにぶら下がらず、すぐに失敗します。 - `SOLARI_HOME` — SOLARI のファイルを ~/.solari 以外の場所に置きます。 - `SOLARI_NO_UPDATE_CHECK=1` — 1 日 1 回の更新チェックを完全に無効化します。NO_UPDATE_NOTIFIER=1 も同じ効果です。 ツール一覧はまず自分のマシンから答えます。そのため閲覧やパラメータの確認は一瞬で終わります。写しが上の時間より古くなると、裏で自動的に更新されます。写しが知らないパスはその場でサーバーに問い合わせるので、サーバー側で追加されたツールもすぐ使えます。 ## エージェント コマンドを実行するエージェントをすでにお使いなら、この 1 行を渡すだけで、このページは閉じて構いません。人ではなくエージェント向けに書いた短いセットアップページを取得し、あとは自分で進めます — 接続またはインストール、サインインの案内、このマシンのツールへの SOLARI の登録まで。 ```text set up solari.sh/get-started.md ``` 以下はそのページが行う内容です。手作業で進めたい場合はこのままお読みください。 solari init は、このマシンの AI エージェントに CLI の存在を伝えます。すると Instagram・TikTok データの質問が出たとき、エージェントが自分でこれを選ぶようになります。Claude Code 用の skill、Codex の AGENTS.md 内で管理するセクション、zsh のタブ補完を設定します。solari init --remove ですべて元に戻せます。 ```bash solari init # claude + codex + zsh, with a confirmation for each solari init claude # just one target solari init --remove ``` ターミナルやスクリプト、そしてコマンドを自分で実行するエージェントには CLI を使ってください。Claude Desktop や ChatGPT のように、アプリ自身がサーバーにつなぐ場合は MCP をお使いください。 ### 機械可読なドキュメント このサイトのすべてのページには、同じアドレスの末尾に .md を付けた Markdown 版があります。リファレンス全体を 1 ファイルで受け取り、そのままモデルに渡すこともできます。 - `/get-started.md` — このセクション冒頭の 1 行が指すセットアップページ。読むためではなく、エージェントが実行するために書いたものです。 - `/llms.txt` — llms.txt 形式でまとめたドキュメントの索引。 - `/llms-full.txt` — ガイドとツール全体を 1 つの Markdown ファイルに連結したもの。 - `/docs/tools.md` — 任意のページを Markdown で。?lang=ko や ?lang=ja を付けると他の言語で取得できます。 ## MCP でつなぐ SOLARI はリモート MCP サーバーとしても動いています。MCP に対応したホストはここに直接つなぎ、CLI と同じ読み取り専用ツールをインストールなしで使えます。必要なのはアドレス 1 つだけです: ```text https://solari.sh/mcp ``` 初回接続時はブラウザが開き、SOLARI アカウントでサインインします。その後ホストがどのツールを呼び出してよいかを尋ね、承認するまで何も実行されません。どのホストからつないでも読み取り専用です。 ### Claude Desktop 設定を開き、サイドバー最下部の Customize を選びます。 ![Claude Desktop の設定サイドバー。最下部に Customize があります。](https://solari.sh/docs/claude-desktop-settings.webp) _Settings → Customize_ Connectors を開いて Add を押し、ダイアログを入力します。一覧に表示する名前と、上のアドレスです。 ![Claude Desktop の Add custom connector ダイアログ。名前と SOLARI MCP のアドレスが入力されています。](https://solari.sh/docs/claude-desktop-add-connector.webp) _Connectors → Add → Add custom connector_ Continue を押すと一度だけサインインを通ります。以降はコネクタ一覧に SOLARI が残り、どの会話でもツールを使えます。claude.ai も同じ手順です。 ### Claude Code コマンド 1 つでサーバーを登録します。 ```bash claude mcp add --transport http solari https://solari.sh/mcp ``` Claude Code はサーバーに初めて接続するときにサインインを求めます。/mcp を実行すると接続状態が表示され、自分でサインインを開始することもできます。 ### ChatGPT ChatGPT も Claude Desktop と同じです。設定 → Connectors でアドレスをカスタムコネクタとして追加し、サインインします。カスタムコネクタは有料プラン向けの機能です。 ### その他のホスト リモート MCP サーバーに対応した他のアプリもつなげます。多くは設定ファイルにこうした項目を書きます: ```json { "mcpServers": { "solari": { "url": "https://solari.sh/mcp" } } } ``` > アプリによっては、自分のマシンに入れた MCP サーバーしか動かせないものがあります。そうしたアプリは SOLARI に直接つなげないので、CLI をお使いください。 ## エラーと終了コード エラーメッセージは次に何をすればよいかを伝えます。終了コードはスクリプトで分岐できるほど安定しています。 - `0` — 成功。 - `1` — ツールまたはサーバー側で失敗しました。 - `2` — CLI が受け付けられない入力です。存在しないパス、抜けている引数、不正な値のいずれかです。 - `3` — サインインが必要です。ブラウザでのサインインは人にしか完了できないため、エージェントは再試行を続けず利用者に伝えてください。 ### よく見るツールエラー - `auth expired, reconnect the connector` — サインインの有効期限が切れました。solari auth login を実行し直すか、アプリでコネクタをつなぎ直してください。 - `SOLARI access denied (403)` — SOLARI が呼び出しを拒否しました。すべてのツールはサインイン済みのアカウントに開かれているため、これはアカウント側の問題です。サインインし直し、それでも続くようならご連絡ください。 - `rate limited, retry shortly` — 短い時間に呼び出しが多すぎました。少し待ってから再試行してください。 - `SOLARI upstream timed out` — 呼び出しに時間がかかりすぎました。ほとんどのツールは 90 秒、集計とトレンドクラスターのツールは 120 秒です。範囲を狭めるか limit を下げて再試行してください。 ## データカバレッジ SOLARI が答えられる範囲は、どのツールを使うかで変わります。重要な制限は 2 つ。どのリージョンを対象にするか、そしてどこまで過去を見られるかです。 - キーワード検索と集計(両プラットフォームの content search・content aggregate)は KR・JP・US・TW の 4 リージョンを対象とし、直近およそ 6 か月分を保持します。それより前の日付を指定すると、扱える最も古い日付まで引き上げられ、実際に使われた日付がレスポンスで示されます。 - アカウント・ブランド・投稿の参照は履歴全体を使うため、4 リージョンや 6 か月の制限を受けません。 - リージョンの中では KR のカバレッジが最も深くなっています。 - 検索結果の件数は 10,000 まで正確で、それ以上は増えません。TikTok 検索は 9,800 でページ送りが止まるため、さらに先を見るには期間を狭めてください。 ### 識別子 - account_id はプラットフォームごとに発行される SOLARI アカウント UUID です。同じブランドでも Instagram の account_id と TikTok の account_id は別の値であり、相互に置き換えることはできません。 - アカウントを受け取る引数は account_id UUID と username の両方を受け付け、両方指定した場合は account_id が優先されます。 - post_id も同様にプラットフォームごとの SOLARI 投稿 UUID です。公開側の対応物は slug(Instagram の shortcode)または video_id(TikTok の数値 id)です。 ## よくある質問 ### CLI で SOLARI のデータを変更できますか? いいえ。すべてのツールは読み取り専用で、CLI にも MCP サーバーにも書き込む機能はありません。 ### Claude のようなエージェントでも使えますか? はい。solari init でこのマシンのエージェントに CLI を知らせるか、MCP サーバーに直接つないでください。どちらも読み取り専用です。 ### 検索が何も返さないのはなぜですか? アカウント検索はハンドルを先頭から、表示名は中のどこでも照合します。入力した語がそのどちらかに実際に含まれている必要があるため、通称や略称では見つかりません。アカウント自身が使っている綴りで試してください。コンテンツ検索なら、リージョンが KR・JP・US・TW のいずれかか、日付が直近 6 か月以内かをご確認ください。 ### 料金はかかりますか? いまは無料でご利用いただけます。変更がある場合は事前にご案内します。 ## ツールリファレンス SOLARI CLI と MCP サーバーが提供するすべてのツールを、パラメータ・レスポンスフィールド・実際の呼び出し例とともにまとめました。ツール名は solari___ の規則に従い、CLI では同じパスを空白区切りで書きます。 ### solari instagram account search > ブランド名・クリエイター名やプロフィール bio の語句を Instagram の account_id に変換します。 - **CLI**: `solari instagram account search` - **MCP ツール**: `solari_instagram_account_search` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 ブランド名・クリエイター名または Instagram ハンドルを、追跡中のアカウント候補に解決し、プロフィールの bio テキストも検索します。高速で決定的なインデックス検索を使い、typeahead のように候補をすべて返します。query_type で何を照合するかを選べます — auto(既定)はハンドルを前方一致、プロフィールの表示名(韓国語または英語)をテキスト一致で同時に見ます。username と full_name はそのどちらか一方に絞り、bio はプロフィールの bio テキストを全文検索します。bio モードは、名前ではなくアカウントが自分をどう説明しているかで探す方法です("skincare"、"협찬 문의"、"コスメ")。一致の質とフォロワー数でランク付けします。found と、最良のものから順に並んだ items(items[0] が最上位の一致)を返します。各 item は account_id(他のすべてのツールが受け取る SOLARI アカウントの UUID)、username、full_name、biography、follower_count、region、is_verified、profile_pic_url を持ちます。found=false で items が空の場合は、一致がなかったことを意味します。名前で探すモードでは query がハンドルまたは表示名に実際に含まれている必要があります — 音写のエイリアスや略称では解決できないため、ネイティブの綴り(例えば英語のブランド名)で再試行してください。ブランド名を解決するときは brands_only=true を指定してファンアカウントやミームアカウントを除外し、query_type=bio と組み合わせると、あるカテゴリのブランドをまとめて洗い出せます。region は特定の国を求められた場合以外は未設定のままにしてください — 設定するとそのリージョン以外のアカウントをすべて除外します。サインイン済みの SOLARI アカウントであれば利用できます。名前で言及されたエンティティを解決するには、まずこのツールをお使いください。 **どんなときに使うか** — ユーザーがエンティティを名前で挙げたら、まずこれを呼んでください。他のInstagram系ツールはすべて、このツールが返すaccount_idを受け取ります。 **何が返るか** — 最良のものから順に並んだアカウント候補。items[0]が最上位の一致。 #### パラメータ - `query` (string, 必須) — 解決するブランド名・クリエイター名(韓国語/英語)または Instagram ハンドル。query_type=bio のときはプロフィールの bio 内で探す語です。 - `query_type` (enum, 任意, 既定値 "auto") — 何を照合するかを選びます。auto = ハンドルと表示名の両方、username = ハンドルのみ、full_name = 表示名のみ、bio = プロフィールの bio テキスト。 値: `auto`, `username`, `full_name`, `bio`. - `brands_only` (boolean, 任意, 既定値 false) — 一致を既知のブランドアカウントに限定します。ブランド名を解決するときに推奨。 - `limit` (integer, 任意, ≥ 1) — 返す候補の最大数。デフォルトは8。50を超える値は50に切り詰められます。 - `region` (string, 任意, ≤ 8 chars) — KR、JP、US などのリージョンコード(任意)。特定の国を求められた場合以外は未設定のままにしてください — 設定するとそのリージョンだけが残ります。 #### レスポンス ##### `Response` - `found` (boolean) — 候補が1件以上一致した場合にtrue。 - `items` (object[]) — 候補。一致の質、次にフォロワー数でランク付けされます。 ##### `items[]` - `account_id` (uuid) — SOLARIのaccount id — 他のInstagram系ツールがすべて受け取る値。 - `username` (string) — Instagramのハンドル。 - `full_name` (string) — プロフィールの表示名。 - `biography` (string) — プロフィールの bio テキスト。 - `follower_count` (integer) — スナップショット時点のフォロワー数。 - `region` (string) — リージョンコード。 - `is_verified` (boolean) — Instagramの認証バッジ。 - `profile_pic_url` (string) — プロフィール画像のURL。 #### 例 ```console $ solari instagram account search query=oliveyoung brands_only=true limit=5 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "found": true, "items": [ { "account_id": "018cab6d-1648-7071-9734-c47a2be2fd19", "username": "oliveyoung_official", "full_name": "올리브영 OLIVE YOUNG", "biography": "ALL LIVE YOUNG 🫒\nALL LIVE BETTER @olivebetter.official", "follower_count": 1199628, "region": "KR", "is_verified": true, "profile_pic_url": "https://dcr.bzine.co/instagram/users/oliveyoung_official/profile-picture" }, { "account_id": "018dc63c-31b5-740f-bde0-2c00931385e1", "username": "oliveyoung_global", "full_name": "OLIVE YOUNG Global", "biography": "Korea's No.1 Health & Beauty Store\n✈️ FREE SHIPPING on orders over $60", "follower_count": 535949, "region": "KR", "is_verified": true, "profile_pic_url": "https://dcr.bzine.co/instagram/users/oliveyoung_global/profile-picture" }, { "account_id": "018cabcf-e60e-70af-95eb-eff777ce5195", "username": "oliveyoung_magazine", "full_name": "올리브영 매거진", "biography": "내 일상과 가까운 뷰티 매거진", "follower_count": 142316, "region": "KR", "is_verified": false, "profile_pic_url": "https://dcr.bzine.co/instagram/users/oliveyoung_magazine/profile-picture" }, "… 2 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_search", "arguments": { "query": "oliveyoung", "brands_only": true, "limit": 5 } } ``` #### 注意点 - 名前で探すモードでは query がハンドルまたは表示名に実際に含まれている必要があります。音写のエイリアスや略称では解決できません — ネイティブの綴りで再試行してください。 - ブランド名を解決するときはbrands_only=trueを指定してください。ファンアカウントやミームアカウントを除外できます。 - query_type=bio は名前ではなくプロフィールの bio テキストを検索します。アカウントが自分をどう説明しているかで見つけられます — "skincare"、"협찬 문의"、"コスメ"。日本語・韓国語・中国語の bio は部分文字列でも一致するため、検索語が bio 内で独立した単語である必要はありません。 - bio 検索の対象は SOLARI がすでに追跡しているアカウントで、10 件に 1 件ほどは bio がありません。網羅的な調査ではなく、発見のための手段としてお使いください。 - region は結果をそのリージョンに絞り、ほかのアカウントをすべて除外します。特定の国を求められた場合以外は未設定のままにしてください。 #### 関連ツール - [`solari_instagram_account_profile`](https://solari.sh/docs/tools/instagram-account-profile.md?lang=ja) - [`solari_instagram_account_posts`](https://solari.sh/docs/tools/instagram-account-posts.md?lang=ja) - [`solari_tiktok_account_search`](https://solari.sh/docs/tools/tiktok-account-search.md?lang=ja) ### solari instagram account similar > 指定したハンドルとリレーションシップグラフが重なる Instagram アカウントを探します。 - **CLI**: `solari instagram account similar` - **MCP ツール**: `solari_instagram_account_similar` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 リレーションシップグラフの重なりに基づいて、指定した username に類似する Instagram アカウントを探します。UUID ではなく Instagram ハンドル (@ なし) を受け取ります。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — 「このクリエイターに似ているのは誰か」。コラボレーション履歴ではなくグラフ上の隣接性を見ます。 **何が返るか** — シードアカウント、類似アカウント、および探索を説明する診断情報。 #### パラメータ - `username` (string, 必須) — 類似アカウントを探す対象の Instagram ハンドル。先頭の @ は付けないでください。 - `limit` (integer, 任意, ≥ 1) — 返す類似アカウントの数、デフォルトは 50。100 を超える値は上限の 100 に切り詰められます。 #### レスポンス ##### `Response` - `user_id` (uuid) — シードアカウントの id。 - `user` (object) — シードアカウントのプロフィール概要。 - `params` (object) — 実際に適用された探索パラメータ (k、hops、max_rank_to_use)。 - `results` (object[]) — 類似アカウント。スコアの降順。 - `diagnostics` (object) — 使用した近傍、アルゴリズム、構築時間。結果がおかしいときに役立ちます。 ##### `results[]` - `user_id` (uuid) — 類似アカウントの account_id。 - `username` (string) — ハンドル。 - `full_name / bio` (string) — 表示名と bio のテキスト。 - `score` (number) — グラフの重なりのスコア。このレスポンス内でのみ比較可能。 - `follower_count` (integer) — フォロワー数。 - `region` (string) — リージョンコード。 - `has_collaborated` (boolean) — このアカウントがシードと広告コラボレーションを持つかどうか。 - `last_collaboration_date` (date | null) — 直近のコラボレーション日。 - `recent_media` (object[]) — 最近の投稿のプレビュー。 #### 例 ```console $ solari instagram account similar username=oliveyoung_official limit=8 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "user_id": "018cab6d-1648-7071-9734-c47a2be2fd19", "user": { "user_id": "018cab6d-1648-7071-9734-c47a2be2fd19", "username": "oliveyoung_official", "full_name": "올리브영 OLIVE YOUNG", "profile_pic_url": "https://dcr.bzine.co/instagram/users/oliveyoung_official/profile-picture", "follower_count": 1199628, "region": "KR", "is_verified": null }, "params": { "k": 8, "hops": 3, "max_rank_to_use": 25 }, "results": [ { "user_id": "018cabd4-926b-7a58-b0cb-11dfc7c37006", "username": "gs25_official", "score": 0.1515, "profile_pic_url": "https://dcr.bzine.co/instagram/users/gs25_official/profile-picture", "follower_count": 1017802, "median_views": null, "full_name": "대한민국 대표 편의점 GS25", "bio": "더 재미있게 더 실속있게\n오늘 가장 최신의 트렌드를 만나는\n#25매거진 #재미있는GS25 #라이프스타일플랫폼", "region": "KR", "has_collaborated": false, "last_collaboration_date": null, "recent_media": [ { "post_id": "01a062a3-a504-7fe5-b53f-7cd291ffceff", "media_type": "image", "source_url": "https://bzine.co/cdn-cgi/image/fit=scale-down,width=480/https://smr-images.bzine.co/users/018cabd4-926b-7a58-b0cb-11dfc7c37006/posts/01a062a3-a504-7fe5-b53f-7cd291ffceff/medias/01a062a3-a7f8-702c-994f-bd426afe5d74.jpg", "thumbnail_url": "https://bzine.co/cdn-cgi/image/fit=scale-down,width=480/https://smr-images.bzine.co/users/018cabd4-926b-7a58-b0cb-11dfc7c37006/posts/01a062a3-a504-7fe5-b53f-7cd291ffceff/medias/01a062a3-a7f8-702c-994f-bd426afe5d74.jpg", "slug": "Dcx-Nrij7IV", "media_url": "https://bzine.co/cdn-cgi/image/fit=scale-down,width=480/https://smr-images.bzine.co/users/018cabd4-926b-7a58-b0cb-11dfc7c37006/posts/01a062a3-a504-7fe5-b53f-7cd291ffceff/medias/01a062a3-a7f8-702c-994f-bd426afe5d74.jpg", "play_count": null, "posted_at": "2026-09-02T10:00:09+00:00" }, "… 3 more" ], "collaborated_with": [] }, "… 7 more" ], "diagnostics": { "neighbors_used": 4930, "unique_terms": 25, "build_ms": 7664, "algorithm": "distance_weighted_jaccard", "max_rank_used": 25, "target_related_count": 25 } } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_similar", "arguments": { "username": "oliveyoung_official", "limit": 8 } } ``` #### 注意点 - 受け付けるのはハンドルのみ。ここでは account_id の UUID は受け付けません。 - グラフの重なりではなくブランドコラボレーションによる類似性を見るには brand top collaborators をお使いください。 #### 関連ツール - [`solari_instagram_account_search`](https://solari.sh/docs/tools/instagram-account-search.md?lang=ja) - [`solari_instagram_brand_top_collaborators`](https://solari.sh/docs/tools/instagram-brand-top-collaborators.md?lang=ja) ### solari instagram brand overview > ブランドのプロフィールと、その広告の広がりを表す id リスト。 - **CLI**: `solari instagram brand overview` - **MCP ツール**: `solari_instagram_brand_overview` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 ブランドのプロフィールと、その広告コラボレーションの範囲を返します。ブランドをターゲットにした広告投稿を制作したクリエイターの ID と、広告投稿の ID そのものを含みます (デフォルトでは先頭 20 件のプレビューと総数。full=true を指定すると完全なリストが返るが、それぞれ最大 100 件まで)。投稿 ID を solari_instagram_content_batch に渡すと詳細を取得できます。UUID ではなくブランドの Instagram ハンドル (@ なし) を受け取ります。サインイン済みの SOLARI アカウントであれば利用できます。ハンドルが未追跡の場合は 404 を返します。 **どんなときに使うか** — ブランド分析の起点。投稿 id を content batch に渡すと詳細を取得できます。 **何が返るか** — ブランドのプロフィールと、そのブランドをタグ付けしたクリエイターおよび投稿の id。 #### パラメータ - `username` (string, 必須) — ブランドの Instagram ハンドル。先頭の @ は付けないでください。 - `full` (boolean, 任意, 既定値 false) — 先頭 20 件のプレビューではなく、完全な ID リストを返します。 #### レスポンス ##### `Response` - `information` (object) — ブランドのプロフィール。user_id、username、full_name、bio、follower_count。 - `all_influencers_id` (uuid[]) — そのブランドの広告を制作したクリエイターの account_id。デフォルトでは先頭 20 件。 - `all_influencers_count` (integer) — 切り詰め前のクリエイター総数。 - `all_influencers_truncated` (boolean) — リストがプレビューの場合に true。 - `all_campaign_posts_id` (uuid[]) — 広告投稿の id。デフォルトでは先頭 20 件。 - `all_campaign_posts_count` (integer) — 切り詰め前の投稿総数。 - `all_campaign_posts_truncated` (boolean) — リストがプレビューの場合に true。 #### 例 ```console $ solari instagram brand overview username=innisfreeofficial ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "information": { "user_id": "018cabce-14cc-7544-8890-7811ec33ef74", "username": "innisfreeofficial", "full_name": "INNISFREE | 이니스프리", "bio": "NATURE MEETS KOREAN SKIN SCIENCE", "follower_count": 847619, "brand_id": null }, "all_influencers_id": [ "01935f3d-8188-727e-a0bb-09e54aadfdac", "018caf6e-abfd-73da-88ad-11a56c39358b", "019a0061-b1d4-7adb-8ea4-1c5572dca38c", "… 17 more" ], "all_campaign_ids": [], "all_campaign_posts_id": [ "019f505f-f8be-7e88-ae08-6fba999950b1", "019f5060-3449-779e-a08b-d6d49add90cd", "019f4342-3357-7418-916c-da1c44468308", "… 17 more" ], "post_id_to_campaign_id": {}, "all_influencers_count": 93, "all_influencers_truncated": true, "all_campaign_posts_count": 100, "all_campaign_posts_truncated": true } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_overview", "arguments": { "username": "innisfreeofficial" } } ``` #### 注意点 - full=true は完全なリストを返すが、それぞれ最大 100 件で頭打ちになります。正確な総数が必要な場合は id を数えるのではなく brand ad stats をお使いください。 - 受け付けるのはハンドルのみ。ここでは account_id の UUID は受け付けません。 - 未追跡のハンドルは 404 を返します。 #### 関連ツール - [`solari_instagram_brand_ad_stats`](https://solari.sh/docs/tools/instagram-brand-ad-stats.md?lang=ja) - [`solari_instagram_content_batch`](https://solari.sh/docs/tools/instagram-content-batch.md?lang=ja) - [`solari_instagram_brand_ad_posts`](https://solari.sh/docs/tools/instagram-brand-ad-posts.md?lang=ja) ### solari instagram brand ad stats > ブランドの直近期間における正確な広告ボリューム。 - **CLI**: `solari instagram brand ad stats` - **MCP ツール**: `solari_instagram_brand_ad_stats` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 ブランドの直近期間における広告投稿数とコラボレーションしたクリエイター数の正確な件数、および範囲が限定された再生数の合計。solari_instagram_brand_overviewのIDリストには上限があるため、正確な広告ボリュームの数値にはこちらをお使いください。行単位の元の投稿にはsolari_instagram_brand_ad_postsをお使いください。ブランドのInstagramハンドル(@なし)を受け取ります。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — 数値で答える質問のとき。「このブランドは広告をいくつ出したか」など。brand overviewのidリストには上限があるため、数えてはいけません。 **何が返るか** — 広告投稿数、コラボレーションしたクリエイター数、範囲が限定された再生数の合計。 #### パラメータ - `username` (string, 必須) — 先頭の@を除いたブランドのInstagramハンドル。 #### レスポンス ##### `Response` - `total_ad_posts` (integer) — 期間内の広告投稿数。正確な値。 - `unique_creator_count` (integer) — コラボレーションしたクリエイターの重複を除いた数。 - `total_play_count` (integer) — 再生数の合計。 - `play_count_covered_posts` (integer) — 再生数の合計が実際に対象としている投稿数。total_ad_postsより小さい場合、その合計は下限値です。 - `window_months` (integer) — 期間の長さ(月数)。 #### 例 ```console $ solari instagram brand ad stats username=innisfreeofficial ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "total_ad_posts": 405, "unique_creator_count": 360, "total_play_count": 27357941, "play_count_covered_posts": 405, "window_months": 3 } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_ad_stats", "arguments": { "username": "innisfreeofficial" } } ``` #### 注意点 - 受け付けるのはハンドルのみ。 - 元になった行が必要な場合はbrand ad postsをお使いください。 #### 関連ツール - [`solari_instagram_brand_ad_posts`](https://solari.sh/docs/tools/instagram-brand-ad-posts.md?lang=ja) - [`solari_instagram_brand_overview`](https://solari.sh/docs/tools/instagram-brand-overview.md?lang=ja) ### solari instagram brand ad posts > あるブランドを対象とした広告投稿を行単位で返します。各行に投稿したクリエイターが付きます。 - **CLI**: `solari instagram brand ad posts` - **MCP ツール**: `solari_instagram_brand_ad_posts` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 あるブランドを対象として特定された広告投稿の、行単位のページネーション付きリスト。各行にはslug、caption、posted_at、like/commentのカウント、動画の場合はplay_count、投稿したクリエイターのusernameとaccount_idが付きます。sort=recentは対象期間全体を新しい順にページングし、totalは正確な件数になります。sort=engagementは直近の限られた範囲内でランク付けし、その範囲の大きさをranking_windowとして返します(非nullなら、並び順が全体ではなく一部のみを対象としていることを意味します)。monthsで遡る期間を広げられます(デフォルトは3、最大24)。solari_instagram_brand_ad_statsの行単位版。ブランドのInstagramハンドル(@なし)を受け取ります。サインイン済みのSOLARIアカウントであれば利用できます。ハンドルが未追跡の場合は404を返します。 **どんなときに使うか** — ブランドの広告履歴を集計ではなく生の行として分析するとき。 **何が返るか** — 広告投稿。totalの意味はsortによって変わります。 #### パラメータ - `username` (string, 必須) — 先頭の@を除いたブランドのInstagramハンドル。 - `sort` (enum, 任意, 既定値 "recent") — recentは対象期間全体をページングし、totalは正確な件数になります。engagementはranking_windowの範囲内でランク付けします。 値: `recent`, `engagement`. - `months` (integer, 任意, ≥ 1) — 遡る期間(月数)。デフォルトは3。24を超える値は24に切り詰められます。 - `limit` (integer, 任意, ≥ 1) — 1ページあたりの投稿数。デフォルトは50。200を超える値は200に切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのoffset。デフォルトは0。 #### レスポンス ##### `Response` - `items` (object[]) — 広告投稿。 - `total` (integer) — sort=recentのときの、対象期間全体の正確な件数。 - `has_more` (boolean) — 次のページが存在するかどうか。 - `ranking_window` (integer | null) — engagementのランキングが実際にどこまで遡ったか。非nullなら、並び順が対象期間全体ではなく一部のみを対象としていることを意味します。 ##### `items[]` - `id` (uuid) — 投稿のID。 - `slug` (string) — Instagramのshortcode。 - `text` (string) — キャプションのテキスト。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `username / user_id / account_id` (string) — 投稿したクリエイター。現行の名称はaccount_idで、user_idも同じ値を持ちます。 - `like_count / comment_count / play_count` (integer) — エンゲージメントのスナップショット。 - `media_type` (string) — 投稿のフォーマット。 - `media / media_url / thumbnail_url` (string) — メディアのリンク。 - `virtual_campaign` (object | null) — 解決できた場合のキャンペーン単位のグルーピング。 #### 例 ```console $ solari instagram brand ad posts username=innisfreeofficial limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "id": "01a062a0-2747-72eb-b20d-670cf30f2c96", "slug": "DcygG05GrA-", "text": "#광고 요즘 부쩍 신경 쓰이기 시작한 모공 고민을 직접 경험해보고 싶어 방문한 이니스프리 레티놀 시카 강의실 무빙 팝업💙\n\n업그레이드된 레티놀 시카 모공 흔적 앰플을 직접 테스트해볼 수 있을 뿐 아니라, 제품을 알아보고 체험할 수 있는 다양한 프로그램과 이벤트가 마련되어 있어 더욱 재미있게 둘러볼 수 있었어요.\n\n특히 오늘 방문했을 때는 정말 많은 분들이 찾아와서 놀랐는데요. 대기 줄이 길게 …", "posted_at": "2026-09-02T14:56:19Z", "virtual_campaign": null, "username": "_mini_mming", "user_id": "018caf92-e08a-78a2-b9c3-59f6f5740182", "profile_picture_url": null, "like_count": 384, "comment_count": 4, "thumbnail_url": null, "media_url": null, "media": [], "media_type": "post", "account_id": "018caf92-e08a-78a2-b9c3-59f6f5740182" }, "… 1 more" ], "total": 405, "has_more": true, "ranking_window": null } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_ad_posts", "arguments": { "username": "innisfreeofficial", "limit": 2 } } ``` #### 注意点 - sort=recentは対象期間全体を新しい順にページングし、totalは正確な件数になります。sort=engagementは直近の限られた範囲内でランク付けし、その大きさをranking_windowとして返します。 - monthsのデフォルトは3で、24で切り詰められます。 - 受け取るのはハンドルのみ。未追跡のハンドルは404を返します。 #### 関連ツール - [`solari_instagram_brand_ad_stats`](https://solari.sh/docs/tools/instagram-brand-ad-stats.md?lang=ja) - [`solari_instagram_account_ad_posts`](https://solari.sh/docs/tools/instagram-account-ad-posts.md?lang=ja) ### solari instagram brand top collaborators > そのブランドの広告をどれだけ多く手がけたかで順位付けしたクリエイター。 - **CLI**: `solari instagram brand top collaborators` - **MCP ツール**: `solari_instagram_brand_top_collaborators` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 そのブランドを対象とする解決済みの広告投稿を投稿したクリエイターを、コラボレーション件数の順に並べたリスト。ブランドはaccount_id(solari_instagram_account_searchが返すSOLARIアカウントUUID)またはusername(Instagramハンドル)で指定します。未知の参照はnot-foundエラーを返します。過去のコラボレーション履歴であり、将来の相性スコアではありません。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — 「このブランドは誰と組んでいるか」。過去の履歴であり、将来の相性スコアではありません。 **何が返るか** — コラボレーション件数の順に並んだクリエイター。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — solari_instagram_account_searchが返すブランドのaccount_id(SOLARIアカウントUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — ブランドのInstagramハンドル。先頭の@はあってもなくても構いません。account_idが指定されている場合は無視されます。 - `promotion` (enum, 任意, 既定値 "all") — 広告投稿のpromotionフィルタ。全行、promotion=trueの行、promotion=falseの行のいずれか。 値: `all`, `true_only`, `false_only`. - `limit` (integer, 任意, ≥ 1) — 返されるクリエイターの最大数。デフォルトは20。1000を超える値は1000に上限で切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのオフセット。デフォルトは0。 #### レスポンス ##### `Response` - `brand_id` (uuid) — 解決されたブランドのaccount_id。 - `promotion_filter` (string) — 適用されたpromotionフィルタ。 - `items` (object[]) — クリエイター。コラボレーション件数の降順。 - `total_count` (integer) — フィルタに一致したクリエイター数。 ##### `items[]` - `creator_id` (uuid) — クリエイターのaccount_id。他のツールが受け付ける値。 - `username / full_name` (string) — ハンドルと表示名。 - `profile_pic_url` (string) — プロフィール画像。 - `follower_count` (integer) — フォロワー数。 - `collaboration_count` (integer) — このブランドとのコラボレーション投稿数。 #### 例 ```console $ solari instagram brand top collaborators username=innisfreeofficial limit=5 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "brand_id": "018cabce-14cc-7544-8890-7811ec33ef74", "promotion_filter": "all", "items": [ { "creator_id": "0195474c-8ee3-7690-a385-71b2913e31b5", "username": "donge_cos", "full_name": "💞동이💞", "profile_pic_url": "https://dcr.bzine.co/instagram/users/donge_cos/profile-picture", "follower_count": 83354, "collaboration_count": 31 }, { "creator_id": "018ecc75-55d8-70a7-a348-d370aa504ed9", "username": "beinny_motd", "full_name": "베이니 BEINNY", "profile_pic_url": "https://dcr.bzine.co/instagram/users/beinny_motd/profile-picture", "follower_count": 205754, "collaboration_count": 29 }, "… 3 more" ], "total_count": 2331 } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_top_collaborators", "arguments": { "username": "innisfreeofficial", "limit": 5 } } ``` #### 注意点 - limitは1000まで指定できます。creator_idsを100件ずつbrand collaborator postsに渡すと、その投稿を取得できます。 - クリエイター側から見た対の関係にあるのがaccount collabs。 #### 関連ツール - [`solari_instagram_brand_collaborator_posts`](https://solari.sh/docs/tools/instagram-brand-collaborator-posts.md?lang=ja) - [`solari_instagram_account_collabs`](https://solari.sh/docs/tools/instagram-account-collabs.md?lang=ja) ### solari instagram brand collaborator posts > 1 つのブランドと最大 100 件のクリエイターを、1 回の呼び出しでまとめて取得します。 - **CLI**: `solari instagram brand collaborator posts` - **MCP ツール**: `solari_instagram_brand_collaborator_posts` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 1 つのブランドと最大 100 件のクリエイター account_id を指定すると、各クリエイターがそのブランドをターゲットにした広告投稿を返します。クリエイターごとに post_count、reels_count、images_count、follower_count、および投稿そのもの (slug、キャプション、posted_at、like/comment の各カウント) を含み、エンゲージメント合計で並べ替えます。全期間の履歴を、クリエイターごとに 1 回ずつではなく 1 回の呼び出しで取得します。クリエイターの account_id は solari_instagram_brand_top_collaborators または solari_instagram_brand_overview から取得してください。ブランドは account_id (SOLARI アカウントの UUID) または username (Instagram ハンドル) で指定します。不明な指定は not-found エラーになります。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — クリエイターごとに 1 回ずつ呼び出す代わりにお使いください。直近のウィンドウではなく全期間の履歴を対象とします。 **何が返るか** — クリエイターごとの集計と投稿そのもの。エンゲージメント合計で並べ替えられます。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — ブランドの account_id (SOLARI アカウントの UUID)。これか username のいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — ブランドの Instagram ハンドル。先頭の @ はあってもなくても構いません。account_id が指定されている場合は無視されます。 - `account_ids` (uuid[], 必須, 1–100 items, uuid) — 取得対象のクリエイターの account_id (SOLARI アカウントの UUID)。1 回の呼び出しにつき最大 100 件。 #### レスポンス ##### `Response` - `(top level)` (object[]) — クリエイターの配列。このレスポンスに envelope オブジェクトはありません。 ##### `[]` - `user_id` (uuid) — クリエイターの account_id。 - `username / full_name` (string) — ハンドルと表示名。 - `follower_count` (integer) — フォロワー数。 - `post_count` (integer) — このブランドをターゲットにした投稿数。 - `reels_count / images_count` (integer) — フォーマット別の内訳。 - `posts` (object[]) — 投稿そのもの。id、slug、text、posted_at、like_count、comment_count、play_count。 - `like_count_avg / comment_count_avg` (number | null) — エンゲージメントの平均。算出されている場合。 #### 例 ```console $ solari instagram brand collaborator posts username=innisfreeofficial account_ids='["0195474c-8ee3-7690-a385-71b2913e31b5","018ecc75-55d8-70a7-a348-d370aa504ed9"]' ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json [ { "user_id": "018ecc75-55d8-70a7-a348-d370aa504ed9", "username": "beinny_motd", "full_name": "베이니 BEINNY", "post_count": 29, "follower_count": 205754, "reels_count": 1, "images_count": 28, "posts": [ { "id": "019c98bc-a666-717d-a5fe-ea96f1345042", "slug": "ByVKkIbnQ8S", "text": "#이니스프리 에서 새롭게 출시된 #구름블러틴트 ☁️💓\n비비드 코튼 잉크 블러버젼이에용\n.\n요즘 이런 블러틴트류 많이 출시돼서 넘 행복해요🥺💛\n이니스프리 블러틴트는 보송보송한 마무리지만 꽤 촉촉하고 가볍게 발리더라구요! 발림성 넘 좋았어요✨\n총 8가지 컬러인데 그중 제 맘에 드는 4가지 컬러는 입술에 발색해서 보여드려용 :) 특히 로즈+핑크 섞인듯한 2호 #로제핑크 완전 추천👍🏻✨\n가격은 9, …", "posted_at": "2019-06-05T14:02:19Z", "virtual_campaign": null, "like_count": 2399, "comment_count": 20, "play_count": null, "username": "beinny_motd", "user_id": "018ecc75-55d8-70a7-a348-d370aa504ed9" }, "… 10 more" ], "like_count_avg": null, "comment_count_avg": null, "synced_at": null }, "… 1 more" ] ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_collaborator_posts", "arguments": { "username": "innisfreeofficial", "account_ids": [ "0195474c-8ee3-7690-a385-71b2913e31b5", "018ecc75-55d8-70a7-a348-d370aa504ed9" ] } } ``` #### 注意点 - account_ids は JSON 配列またはカンマ区切りのリストを受け付けます。1 回の呼び出しにつき最大 100 件。 - 月単位のウィンドウはなく、全履歴を対象とします。 #### 関連ツール - [`solari_instagram_brand_top_collaborators`](https://solari.sh/docs/tools/instagram-brand-top-collaborators.md?lang=ja) - [`solari_instagram_brand_overview`](https://solari.sh/docs/tools/instagram-brand-overview.md?lang=ja) ### solari instagram brand lookalike content > ブランドの成績上位の広告に見た目も内容も似ている投稿。 - **CLI**: `solari instagram brand lookalike content` - **MCP ツール**: `solari_instagram_brand_lookalike_content` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 ブランドの成績上位の広告投稿と視覚的・意味的に類似したInstagram投稿。ブランド自身の広告投稿を種にしたベクトル近傍検索で見つけます。ブランドはaccount_id(solari_instagram_account_searchが返すSOLARIアカウントUUID)またはusername(Instagramハンドル)で指定します。未知の参照はnot-foundエラーを返します。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — 参考事例を探すとき。ブランド自身の上位広告を種にしたベクトル近傍検索。 **何が返るか** — 類似(lookalike)投稿と、検索の種になったブランド自身の広告。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — 類似(lookalike)検索の種となる広告投稿を持つブランドのaccount_id(SOLARIアカウントUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — ブランドのInstagramハンドル。先頭の@はあってもなくても構いません。account_idが指定されている場合は無視されます。 - `limit` (integer, 任意, ≥ 1) — 返される類似(lookalike)投稿の最大数。デフォルトは30。50を超える値は50に上限で切り詰められます。 - `region` (string, 任意, 既定値 "KR") — 検索範囲を限定するリージョンコード。KR、JP、USなど。 #### レスポンス ##### `Response` - `items` (object[]) — 類似(lookalike)投稿。 - `basis` (object[]) — 種として使われたブランド自身の広告投稿。 - `region` (string) — 検索の対象となったリージョン。 ##### `items[] · basis[]` - `post_id` (uuid) — SOLARIの投稿id。他のコンテンツ系ツールにそのまま渡せます。 - `slug` (string) — Instagramのショートコード。公開URLの/p/または/reel/の後ろのセグメント。 - `author_id` (uuid) — 投稿したアカウントのaccount_id。 - `username` (string) — 投稿者のハンドル。 - `full_name` (string | null) — プロフィールの表示名。 - `profile_pic_url` (string | null) — プロフィール画像のURL。 - `follower_count` (integer | null) — スナップショット時点の投稿者のフォロワー数。 - `region` (string | null) — 投稿者に割り当てられたリージョンコード。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `media_type` (string) — image、video、またはcarousel。 - `play_count` (integer | null) — 動画の再生数。image投稿ではnull。 - `like_count` (integer | null) — スナップショット時点のいいね数。 - `text` (string | null) — キャプションのテキスト。 - `media_url` (string) — オリジナルメディアのURL。 - `thumbnail_url` (string) — サムネイルのURL。 - `score` (number | null) — フィードのランキングスコア。1回のレスポンス内でのみ比較できます。 - `efficiency_score` (number | null) — 投稿者のフォロワー数に対する相対的なパフォーマンス。 - `est_percentile` (number | null) — リージョン内での推定パーセンタイル。0〜1。 - `total_views_3m` (integer | null) — 投稿者の直近3か月の累計再生数。 - `median_views_3m` (integer | null) — 投稿者の直近3か月の再生数の中央値。 - `recent_collab_brands` (string[]) — 投稿者が最近コラボレーションしたブランド。 - `item_type` (string) — アイテム種別のタグ。コンテンツフィードではpost。 - `content_source` (string | null) — このアイテムを提示したパイプライン。 - `is_saved` (boolean | null) — そのアイテムがSOLARIアプリに保存されているかどうか。 - `updated_at` (timestamp | null) — 指標のスナップショットが最後に更新された日時。 #### 例 ```console $ solari instagram brand lookalike content username=innisfreeofficial limit=3 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "item_type": "content", "post_id": "019ecb92-a677-7421-8ed6-752efe3d99d0", "author_id": "0196cb39-870a-7a76-9773-0b95789c877d", "username": "boo_rookie", "full_name": null, "profile_pic_url": null, "follower_count": null, "region": null, "posted_at": "2026-06-11T08:14:37Z", "media_type": "video", "play_count": 427258, "like_count": null, "score": null, "efficiency_score": null, "est_percentile": null, "updated_at": null, "media_url": "https://smr-images-b.bzine.co/users/0196cb39-870a-7a76-9773-0b95789c877d/posts/019ecb92-a677-7421-8ed6-752efe3d99d0/medias/019ecb92-a92e-7fc8-b644-69b930f2e197.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=100ms/https://smr-images-a.bzine.co/users/0196cb39-870a-7a76-9773-0b95789c877d/posts/019ecb92-a677-7421-8ed6-752efe3d99d0/medias/019ecb92-a92e-7fc8-b644-69b930f2e1 …", "slug": "DZcD8KXxKwd", "text": null, "brand_match_score": null, "recent_collab_brands": [], "total_views_3m": null, "median_views_3m": null, "is_saved": null, "content_source": "lookalikes_by_top_ad" }, "… 2 more" ], "basis": [ { "item_type": "content", "post_id": "01a04c73-3ec3-7873-9e84-334c644abfe4", "author_id": "0196c474-c96e-71ad-aceb-61af051c81d3", "username": "hwitto_", "full_name": null, "profile_pic_url": null, "follower_count": null, "region": null, "posted_at": null, "media_type": "video", "play_count": 155729, "like_count": null, "score": null, "efficiency_score": null, "est_percentile": null, "updated_at": null, "media_url": "https://smr-images-a.bzine.co/users/0196c474-c96e-71ad-aceb-61af051c81d3/posts/01a04c73-3ec3-7873-9e84-334c644abfe4/medias/01a04c73-4036-7a83-a52a-97b0058e6732.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=100ms/https://smr-images.bzine.co/users/0196c474-c96e-71ad-aceb-61af051c81d3/posts/01a04c73-3ec3-7873-9e84-334c644abfe4/medias/01a04c73-4036-7a83-a52a-97b0058e6732 …", "slug": "DckGrZ6vZiU", "text": null, "brand_match_score": null, "recent_collab_brands": [], "total_views_3m": null, "median_views_3m": null, "is_saved": null, "content_source": "lookalikes_by_top_ad" }, "… 5 more" ], "region": "KR" } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_brand_lookalike_content", "arguments": { "username": "innisfreeofficial", "limit": 3 } } ``` #### 注意点 - limitは50に上限で切り詰められます。 - basisが空の場合、そのブランドには種にできる広告投稿がまだないことを意味します。 #### 関連ツール - [`solari_instagram_brand_ad_posts`](https://solari.sh/docs/tools/instagram-brand-ad-posts.md?lang=ja) - [`solari_instagram_content_search`](https://solari.sh/docs/tools/instagram-content-search.md?lang=ja) ### solari instagram account profile > 1 件の Instagram アカウントについて SOLARI が持つ全情報と、パフォーマンス指標。 - **CLI**: `solari instagram account profile` - **MCP ツール**: `solari_instagram_account_profile` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中の Instagram アカウント 1 件の SOLARI プロフィール全体。username、フルネーム、bio、フォロワー数 / フォロー中の数 / 投稿数、認証フラグ、推定された account_type、再生数指標 (再生数の中央値と合計、広告投稿数、前月比の成長率、リージョン内パーセンタイル)、さらに最近の投稿と最近の広告コラボレーションのプレビューを埋め込んで返します。アカウントは account_id (solari_instagram_account_search が返す UUID) または username (Instagram ハンドル) で指定します。まだ追跡していない username は初回リクエスト時にライブ取得されます (数秒かかります。レスポンスでは fetched_on_demand=true となり、再生数指標もコラボレーション履歴もまだ構築されていません)。その後に not-found エラーが返る場合、そのハンドルは Instagram 上に存在しません。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — アカウントを深掘りする際の最初の呼び出し。最近の投稿と最近のコラボレーションが埋め込まれて返るため、追加の呼び出しを節約できます。 **何が返るか** — プロフィール項目、再生数ベースのパフォーマンス指標、埋め込みプレビュー。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — アカウントの account_id (SOLARI アカウントの UUID)。これか username のいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — Instagram ハンドル。先頭の @ はあってもなくても構いません。account_id が指定されている場合は無視されます。 #### レスポンス ##### `Response` - `user_id` (uuid) — account_id。 - `username / full_name / bio` (string) — ハンドル、表示名、bio のテキスト。 - `follower_count / following_count` (integer) — フォロワー数とフォロー中の数。 - `total_post_count` (integer) — 累計の投稿数。 - `post_count_3m` (integer) — 直近 3 か月の投稿数。 - `is_verified` (boolean) — 認証バッジ。 - `account_type` (string) — SOLARI が推定したアカウントの性格 (brand、creator、…)。 - `median_views_cur` (integer) — 現在のウィンドウにおける再生数の中央値。 - `total_views_cur` (integer) — 現在のウィンドウにおける再生数の合計。 - `ad_count_cur` (integer) — 現在のウィンドウにおける広告投稿数。 - `median_views_growth_m1` (number) — 前月に対する再生数中央値の変化。比率で表します。 - `total_views_growth_m1` (number) — 前月に対する再生数合計の変化。比率で表します。 - `median_views_region_pct` (number) — リージョン内での再生数中央値のパーセンタイル、0〜1。 - `total_views_region_pct` (number) — リージョン内での再生数合計のパーセンタイル、0〜1。 - `recent_posts` (object[]) — 最近の投稿のプレビュー。 - `recent_collabs` (object[]) — 最近の広告コラボレーションのプレビュー。 - `fetched_on_demand` (boolean) — このリクエストによって初めてそのアカウントが取り込まれた場合に true。 #### 例 ```console $ solari instagram account profile username=innisfreeofficial ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "user_id": "018cabce-14cc-7544-8890-7811ec33ef74", "username": "innisfreeofficial", "full_name": "INNISFREE | 이니스프리", "bio": "NATURE MEETS KOREAN SKIN SCIENCE", "profile_pic_url": "https://dcr.bzine.co/instagram/users/innisfreeofficial/profile-picture", "follower_count": 847619, "total_post_count": 4131, "post_count_3m": 100, "following_count": 17, "is_verified": true, "median_views_cur": 12409, "ad_count_cur": 0, "total_views_cur": 685771, "median_views_growth_m1": 0.04956440835659308, "total_views_growth_m1": 0.39407867587418205, "median_views_region_pct": 0.1736183168163037, "total_views_region_pct": 0.1457900950723917, "recent_posts": [ { "post_id": "01a06275-d974-7fda-98ee-dd3ee15b4dcf", "slug": "DcyMAmUh6FZ", "media_type": "video", "media_url": "https://smr-images-b.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …", "text": "Deeply hydrated skin—NO OFF HOURS. 💚\nwherever the day takes MINGYU (@min9yu_k)—his hydration stays SUPERCHARGED ⚡️\n\nGreen Tea Ceramide Milk: Lightweight milky toner that won‘t clog your pores\nGreen Tea Ceramide Mist: Tou …", "play_count": 22467, "like_count": 3224, "video_media_count": 0, "media_count": 1 }, "… 5 more" ], "recent_collabs": [], "account_type": "brand", "fetched_on_demand": false } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_profile", "arguments": { "username": "innisfreeofficial" } } ``` #### 注意点 - 未追跡のハンドルは初回リクエスト時にライブ取得されます。数秒かかります。その場合は fetched_on_demand=true が立ち、その状態では再生数指標もコラボレーション履歴もまだ構築されていません。 - その後に not-found エラーが返る場合、そのハンドルは Instagram 上に存在しません。 - 指標はスナップショットであり、リアルタイムの数値より遅れることがあります。 #### 関連ツール - [`solari_instagram_account_posts`](https://solari.sh/docs/tools/instagram-account-posts.md?lang=ja) - [`solari_instagram_account_collabs`](https://solari.sh/docs/tools/instagram-account-collabs.md?lang=ja) - [`solari_tiktok_account_profile`](https://solari.sh/docs/tools/tiktok-account-profile.md?lang=ja) ### solari instagram account posts > 1つのアカウントの投稿を新しい順にページングします。 - **CLI**: `solari instagram account posts` - **MCP ツール**: `solari_instagram_account_posts` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中の1つのInstagramアカウントの投稿を新しい順に返します。ページネーションとフィルタに対応します。アカウントはaccount_id(solari_instagram_account_searchが返すUUID)またはusername(Instagramハンドル)で指定します。各アイテムはpost_id(SOLARIの投稿UUID)、slugとurl(Instagramの公開パーマリンク)、post_type(reel、video、photo、carousel)、posted_at、キャプションのテキスト、like/comment/playの各カウント、media_count、is_paid_partnership、medias配列(投稿のすべてのメディアをカルーセル順に格納し、それぞれがmedia_type、media/thumbnailのURL、video_duration、tags(そのメディアにタグ付けされたアカウントとハッシュタグ。タグ付けされたアカウントが追跡中の場合はaccount_idを含む)を持つ)、および代表のthumbnail_urlを持ちます。レスポンスはfound、account_id、username、total、has_more、itemsを含みます。limitとoffsetでページングし、since/until(UTCの日付、両端を含む)とpost_typeで絞り込みます。未追跡のusernameは最初のリクエスト時にライブ取得されます(数秒かかります)。fetched_on_demand=trueは、現時点で直近の投稿のみ利用できることを示します。found=falseは、そのハンドルがInstagramに存在しないことを意味します。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — プロフィールのプレビューより深く掘り下げるとき、または期間とフォーマットで絞り込んだ生の行を取得するとき。 **何が返るか** — 各投稿のすべてのメディアを含む投稿。メディアにタグ付けされたアカウントとハッシュタグも含みます。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — アカウントのaccount_id(SOLARIアカウントUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — Instagramハンドル。先頭の@はあってもなくてもかまいません。account_idが指定されている場合は無視されます。 - `limit` (integer, 任意, ≥ 1) — 1ページあたりの投稿数。デフォルトは12。200を超える値は200に上限で切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのオフセット。デフォルトは0。 - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 - `post_type` (enum, 任意) — このフォーマットの投稿のみ。reelはショート形式の単一動画、videoはreel以外の動画。 値: `reel`, `video`, `photo`, `carousel`. #### レスポンス ##### `Response` - `found` (boolean) — falseは、そのハンドルがInstagramに存在しないことを意味します。 - `account_id / username` (string) — 解決されたアカウント。 - `total` (integer) — フィルタに一致した投稿数。 - `has_more` (boolean) — 次のページが存在するかどうか。 - `items` (object[]) — 投稿。新しい順。 - `fetched_on_demand` (boolean) — 現時点で直近の投稿のみ利用できる場合はtrue。 ##### `items[]` - `post_id` (uuid) — SOLARIの投稿id。 - `slug` (string) — Instagramのショートコード。 - `url` (string) — 公開パーマリンク。 - `post_type` (string) — reel、video、photo、またはcarousel。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `text` (string) — キャプションのテキスト。 - `like_count / comment_count / play_count` (integer) — エンゲージメントのスナップショット。 - `media_count` (integer) — 投稿内のメディア数。 - `is_paid_partnership` (boolean | null) — Instagram自身が付けるタイアップ投稿ラベル。 - `medias` (object[]) — カルーセル順のすべてのメディア。それぞれmedia_type、media/thumbnailのURL、video_durationを持ちます。 - `medias[].tags` (object[]) — そのメディアにタグ付けされたアカウントとハッシュタグ。タグ付けされたアカウントをSOLARIが追跡している場合はaccount_idを持ちます。 - `thumbnail_url` (string) — 代表のサムネイル。 #### 例 ```console $ solari instagram account posts username=innisfreeofficial limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "found": true, "account_id": "018cabce-14cc-7544-8890-7811ec33ef74", "username": "innisfreeofficial", "fetched_on_demand": false, "total": 4196, "has_more": true, "items": [ { "post_id": "01a06275-d974-7fda-98ee-dd3ee15b4dcf", "slug": "DcyMAmUh6FZ", "url": "https://www.instagram.com/p/DcyMAmUh6FZ/", "post_type": "reel", "posted_at": "2026-09-02T12:00:06+00:00", "text": "Deeply hydrated skin—NO OFF HOURS. 💚\nwherever the day takes MINGYU (@min9yu_k)—his hydration stays SUPERCHARGED ⚡️\n\nGreen Tea Ceramide Milk: Lightweight milky toner that won‘t clog your pores\nGreen Tea Ceramide Mist: Tou …", "like_count": 3224, "comment_count": 57, "play_count": 22467, "media_count": 1, "is_paid_partnership": false, "medias": [ { "media_type": "video", "media_url": "https://smr-images-b.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …", "video_duration": 23.868000030517578, "tags": [] } ], "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …" }, "… 1 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_posts", "arguments": { "username": "innisfreeofficial", "limit": 2 } } ``` #### 注意点 - 1ページあたり最大200件。大量に取得する場合は、メモリ上の大きなページよりも--ndjsonでファイルに追記する方法を選んでください。 - sinceとuntilはUTCの日付で、両端を含みます。 - post_type=reelはショート形式の単一動画、videoはreel以外の動画。 #### 関連ツール - [`solari_instagram_account_profile`](https://solari.sh/docs/tools/instagram-account-profile.md?lang=ja) - [`solari_instagram_content_detail`](https://solari.sh/docs/tools/instagram-content-detail.md?lang=ja) - [`solari_tiktok_account_posts`](https://solari.sh/docs/tools/tiktok-account-posts.md?lang=ja) ### solari instagram account collabs > クリエイターがどのブランドの広告を行ってきたかを、ブランド単位でまとめたもの。 - **CLI**: `solari instagram account collabs` - **MCP ツール**: `solari_instagram_account_collabs` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 1人のクリエイターが指定した月数の期間内に行った直近の広告コラボレーション。各アイテムは対象ブランド(target_account_id、target_username)で、collab_count、last_posted_at、サンプルのコラボレーション投稿を持ちます。items、has_more、totalを返します。limit/offsetでページングします。クリエイターはaccount_id(SOLARIアカウントUUID)またはusername(Instagramハンドル)で指定します。未知の参照はnot-foundエラーを返します。ブランド側から見た対の関係にあるのがsolari_instagram_brand_top_collaborators。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — 「このクリエイターは誰と組んでいるか」。ブランド側から見た対の関係にあるのがbrand top collaborators。 **何が返るか** — 対象ブランドごとに1行。各行はサンプルのコラボレーション投稿を持ちます。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — クリエイターのaccount_id(SOLARIアカウントUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — Instagramハンドル。先頭の@はあってもなくてもかまいません。account_idが指定されている場合は無視されます。 - `months` (integer, 任意, ≥ 1) — 遡及期間(月数)。デフォルトは3。12を超える値は12に上限で切り詰められます。 - `limit` (integer, 任意, ≥ 1) — 1ページあたりのアイテムの最大数。デフォルトは5。200を超える値は200に上限で切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのオフセット。デフォルトは0。 #### レスポンス ##### `Response` - `total` (integer) — フィルタに一致した総行数。 - `has_more` (boolean) — offset + limitより先に行が存在するかどうか。 - `items` (object[]) — コラボレーションの集計。対象ブランドごとに1件。 ##### `items[]` - `target_account_id` (uuid) — 対象ブランドのaccount_id。 - `target_username` (string) — 対象ブランドのハンドル。 - `collab_count` (integer) — このブランドとのコラボレーション投稿数。 - `last_posted_at` (timestamp) — 直近のコラボレーション。 - `post_id / slug` (string) — サンプル投稿の識別子。 - `text` (string) — サンプル投稿のキャプション。 - `like_count / play_count` (integer) — サンプル投稿のエンゲージメント。 - `media_type` (string) — サンプル投稿のフォーマット。 - `thumbnail_url / media_url` (string) — サンプル投稿のメディア。 - `bio` (string) — 対象ブランドのプロフィール文。 #### 例 ```console $ solari instagram account collabs username=beinny_motd months=6 limit=3 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "post_id": "01a05575-7c9b-7232-8519-4a38fa061389", "target_user_id": "018cab85-8ef8-7dc9-ab0a-7044d463f65e", "target_username": "dasique_official", "collab_count": 2, "last_posted_at": "2026-08-30T05:08:56+00:00", "slug": "DcpugJ2kzv8", "text": "#광고 무겁지 않은 가을 데일리 팔레트 로즈밀크티 . .🫖🤎\n차분하고 미지근한 로즈핑크 팔레트인데\n부드러운 밀크티 무드라서 분위기가 넘 예뻐요..🥺\n\n데이지크에서 올리브영 X 산리오 콜라보\n시티팝 에디션으로 미니섀도우팔레트 4종이 출시되는데\n그 중 자주 추천드렸던 로즈밀크티, 밀크라떼가 있더라구요 !\n\nNEW 컬러 피치레코드, 모브카세트도 출시되어요🤍\n도시의 아침과 저녁 무드를 담은 데일리한 …", "play_count": 0, "media_type": "8", "like_count": 878, "video_media_count": 0, "media_count": 15, "bio": "🫒올영세일 08.30 – 09.05\nUP TO 37% SALE\n올리브영X산리오,\n🌠데이지크 🆕 미니 섀도우", "thumbnail_url": "https://bzine.co/cdn-cgi/image/fit=scale-down,width=480/https://smr-images-c.bzine.co/users/018ecc75-55d8-70a7-a348-d370aa504ed9/posts/01a05575-7c9b-7232-8519-4a38fa061389/medias/01a05575-7dd3-779e-9050-a6cb59578cb9.jpg", "media_url": "https://bzine.co/cdn-cgi/image/fit=scale-down,width=480/https://smr-images-c.bzine.co/users/018ecc75-55d8-70a7-a348-d370aa504ed9/posts/01a05575-7c9b-7232-8519-4a38fa061389/medias/01a05575-7dd3-779e-9050-a6cb59578cb9.jpg", "target_account_id": "018cab85-8ef8-7dc9-ab0a-7044d463f65e" }, "… 2 more" ], "has_more": true, "total": 7 } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_collabs", "arguments": { "username": "beinny_motd", "months": 6, "limit": 3 } } ``` #### 注意点 - target_user_idはtarget_account_idと同じ値の旧名称。新しいコードではtarget_account_idを読んでください。 - monthsのデフォルトは3で、12に上限で切り詰められます。 - ブランド単位の集計ではなく行単位の履歴が必要な場合は、account ad postsをお使いください。 #### 関連ツール - [`solari_instagram_account_ad_posts`](https://solari.sh/docs/tools/instagram-account-ad-posts.md?lang=ja) - [`solari_instagram_brand_top_collaborators`](https://solari.sh/docs/tools/instagram-brand-top-collaborators.md?lang=ja) ### solari instagram account ad posts > クリエイターが投稿した広告投稿を行単位で返し、各行にターゲットブランドを付けます。 - **CLI**: `solari instagram account ad posts` - **MCP ツール**: `solari_instagram_account_ad_posts` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 1 人のクリエイターが投稿した、判定済みの広告投稿を行単位でページネーションして新しい順に返します。各行にはターゲットブランドが付きます。1 行が 1 つの投稿とブランドの組み合わせなので、複数ブランドの投稿はターゲットごとに 1 回ずつ現れます。各アイテムは post_id、slug と url、post_type、posted_at、キャプションのテキスト、like/comment/play の各カウント、media_count、is_paid_partnership、target_account_id / target_username を持ちます。target (ブランドの account_id または Instagram ハンドル) で 1 ブランドに絞り込めます。months で遡る期間を広げられます (デフォルト 3、最大 24)。同じ履歴をブランド単位でまとめる solari_instagram_account_collabs の行単位版。クリエイターは account_id (SOLARI アカウントの UUID) または username (Instagram ハンドル) で指定します。不明な指定は not-found エラーになります。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — コラボレーション履歴を生の行として分析するとき。複数ブランドをタグ付けした投稿はターゲットごとに 1 回ずつ現れるため、各行は投稿とブランドの組み合わせになります。 **何が返るか** — 広告投稿を新しい順に返します。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — クリエイターの account_id (SOLARI アカウントの UUID)。これか username のいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — Instagram ハンドル。先頭の @ はあってもなくてもかまいません。account_id が指定されている場合は無視されます。 - `months` (integer, 任意, ≥ 1) — 遡る期間を月数で指定、デフォルトは 3。24 を超える値は上限の 24 に切り詰められます。 - `limit` (integer, 任意, ≥ 1) — 1 ページあたりのアイテム数、デフォルトは 50。200 を超える値は上限の 200 に切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションの offset、デフォルトは 0。 - `target` (string, 任意, ≤ 64 chars) — 任意のターゲットブランドのフィルタ。ブランドの account_id (SOLARI アカウントの UUID) または Instagram ハンドル。 #### レスポンス ##### `Response` - `account_id / username` (string) — 解決されたクリエイター。 - `months` (integer) — 適用された遡及期間。 - `total` (integer) — 行の総数。 - `has_more` (boolean) — 次のページが存在するかどうか。 - `items` (object[]) — 投稿とブランドの組み合わせ。 ##### `items[]` - `post_id / slug / url` (string) — 投稿の識別子と公開リンク。 - `post_type` (string) — reel、video、photo、または carousel。 - `posted_at` (timestamp) — 公開時刻 (UTC)。 - `text` (string) — キャプションのテキスト。 - `like_count / comment_count / play_count` (integer) — エンゲージメントのスナップショット。 - `media_count` (integer) — メディアの数。 - `is_paid_partnership` (boolean | null) — Instagram のタイアップ投稿 (paid partnership) ラベル。 - `target_account_id / target_username` (string) — この行が帰属するブランド。 #### 例 ```console $ solari instagram account ad posts username=beinny_motd months=6 limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "account_id": "018ecc75-55d8-70a7-a348-d370aa504ed9", "username": "beinny_motd", "months": 6, "total": 12, "has_more": true, "items": [ { "post_id": "01a05575-7c9b-7232-8519-4a38fa061389", "slug": "DcpugJ2kzv8", "url": "https://www.instagram.com/p/DcpugJ2kzv8/", "post_type": "carousel", "posted_at": "2026-08-30T05:08:56Z", "text": "#광고 무겁지 않은 가을 데일리 팔레트 로즈밀크티 . .🫖🤎\n차분하고 미지근한 로즈핑크 팔레트인데\n부드러운 밀크티 무드라서 분위기가 넘 예뻐요..🥺\n\n데이지크에서 올리브영 X 산리오 콜라보\n시티팝 에디션으로 미니섀도우팔레트 4종이 출시되는데\n그 중 자주 추천드렸던 로즈밀크티, 밀크라떼가 있더라구요 !\n\nNEW 컬러 피치레코드, 모브카세트도 출시되어요🤍\n도시의 아침과 저녁 무드를 담은 데일리한 …", "like_count": 878, "comment_count": 19, "play_count": 0, "media_count": 15, "is_paid_partnership": null, "target_account_id": "018cab85-8ef8-7dc9-ab0a-7044d463f65e", "target_username": "dasique_official" }, "… 1 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_account_ad_posts", "arguments": { "username": "beinny_motd", "months": 6, "limit": 2 } } ``` #### 注意点 - target は 1 ブランドに絞り込むフィルタで、その account_id かハンドルのどちらでも受け付けます。 - months のデフォルトは 3 で、最大 24 まで遡れます。account collabs より長いです。 - 同じ履歴をブランド単位でまとめて見るには account collabs をお使いください。 #### 関連ツール - [`solari_instagram_account_collabs`](https://solari.sh/docs/tools/instagram-account-collabs.md?lang=ja) - [`solari_instagram_brand_ad_posts`](https://solari.sh/docs/tools/instagram-brand-ad-posts.md?lang=ja) ### solari instagram content detail > 1 件の Instagram 投稿の全項目。 - **CLI**: `solari instagram content detail` - **MCP ツール**: `solari_instagram_content_detail` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 1 件の Instagram 投稿の詳細を、solari_instagram_content_trending のエントリと同じアイテム形式で返します。投稿は post_id (solari_instagram_account_posts、solari_instagram_content_search、solari_instagram_content_trending、solari_instagram_content_rising が返す SOLARI の投稿 UUID)、slug (公開 Instagram ショートコード)、または url (公開投稿 URL) で指定します。まだ追跡していないショートコードや URL は初回リクエスト時にライブ取得され (数秒かかる)、その場合は fetched_on_demand=true が立ちます。投稿が存在しないか非公開の場合、または post_id が不明な場合、item は null になります。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — post_id、ショートコード、公開 URL のいずれかで 1 件の投稿を開くとき。 **何が返るか** — コンテンツフィードと同じ形式のアイテム 1 件。 #### パラメータ - `post_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — SOLARI の post_id UUID。これ、slug、url のいずれかを指定してください。 - `slug` (string, 任意, pattern ^[A-Za-z0-9_-]{3,20}$) — 公開 Instagram ショートコード。投稿 URL の /p/、/reel/、/tv/ の後ろのセグメント。post_id が指定されている場合は無視されます。 - `url` (string, 任意, ≤ 512 chars) — https://www.instagram.com/p// や .../reel// のような公開 Instagram 投稿 URL。post_id または slug が指定されている場合は無視されます。 #### レスポンス ##### `Response` - `item` (object | null) — 投稿。存在しない場合や非公開の場合は null。 - `fetched_on_demand` (boolean) — このリクエストによって初めてその投稿が取り込まれた場合に true。 ##### `item` - `post_id` (uuid) — SOLARI の post id。他のコンテンツ系ツールにそのまま渡せます。 - `slug` (string) — Instagram のショートコード。公開 URL の /p/ または /reel/ の後ろのセグメント。 - `author_id` (uuid) — 投稿したアカウントの account_id。 - `username` (string) — 投稿者のハンドル。 - `full_name` (string | null) — プロフィールの表示名。 - `profile_pic_url` (string | null) — プロフィール画像の URL。 - `follower_count` (integer | null) — スナップショット時点の投稿者のフォロワー数。 - `region` (string | null) — 投稿者に割り当てられたリージョンコード。 - `posted_at` (timestamp) — 公開時刻 (UTC)。 - `media_type` (string) — image、video、または carousel。 - `play_count` (integer | null) — 動画の再生数。image 投稿では null。 - `like_count` (integer | null) — スナップショット時点のいいね数。 - `text` (string | null) — キャプションのテキスト。 - `media_url` (string) — オリジナルメディアの URL。 - `thumbnail_url` (string) — サムネイルの URL。 - `score` (number | null) — フィードのランキングスコア。1 つのレスポンス内でのみ比較可能。 - `efficiency_score` (number | null) — 投稿者のフォロワー数に対する相対的なパフォーマンス。 - `est_percentile` (number | null) — リージョン内での推定パーセンタイル、0〜1。 - `total_views_3m` (integer | null) — 直近 3 か月の投稿者の累計再生数。 - `median_views_3m` (integer | null) — 直近 3 か月の投稿者の再生数の中央値。 - `recent_collab_brands` (string[]) — 投稿者が最近コラボレーションしたブランド。 - `item_type` (string) — アイテム種別のタグ。コンテンツフィードでは post。 - `content_source` (string | null) — このアイテムを抽出したパイプライン。 - `is_saved` (boolean | null) — そのアイテムが SOLARI アプリで保存済みかどうか。 - `updated_at` (timestamp | null) — 指標のスナップショットが最後に更新された時刻。 #### 例 ```console $ solari instagram content detail slug=DcyMAmUh6FZ ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "item": { "item_type": "content", "post_id": "01a06275-d974-7fda-98ee-dd3ee15b4dcf", "author_id": "018cabce-14cc-7544-8890-7811ec33ef74", "username": "innisfreeofficial", "full_name": "INNISFREE | 이니스프리", "profile_pic_url": "https://dcr.bzine.co/instagram/users/innisfreeofficial/profile-picture", "follower_count": 847619, "region": null, "posted_at": "2026-09-02T12:00:06Z", "media_type": "video", "play_count": 22467, "like_count": 3224, "score": null, "efficiency_score": null, "est_percentile": null, "updated_at": null, "media_url": "https://smr-images-b.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018cabce-14cc-7544-8890-7811ec33ef74/posts/01a06275-d974-7fda-98ee-dd3ee15b4dcf/medias/01a06275-db2b-77f7-a020-b4beb744771f.m …", "slug": "DcyMAmUh6FZ", "text": "Deeply hydrated skin—NO OFF HOURS. 💚\nwherever the day takes MINGYU (@min9yu_k)—his hydration stays SUPERCHARGED ⚡️\n\nGreen Tea Ceramide Milk: Lightweight milky toner that won‘t clog your pores\nGreen Tea Ceramide Mist: Tou …", "brand_match_score": null, "recent_collab_brands": [], "total_views_3m": null, "median_views_3m": null, "is_saved": null, "content_source": null }, "fetched_on_demand": false } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_detail", "arguments": { "slug": "DcyMAmUh6FZ" } } ``` #### 注意点 - url を渡すと、/p/、/reel/、/tv/ の後ろのショートコードが自動的に抽出されます。 - 未追跡のショートコードや URL は初回リクエスト時にライブ取得されます。 - 複数をまとめて開くには content batch をお使いください。 #### 関連ツール - [`solari_instagram_content_batch`](https://solari.sh/docs/tools/instagram-content-batch.md?lang=ja) - [`solari_instagram_account_posts`](https://solari.sh/docs/tools/instagram-account-posts.md?lang=ja) ### solari instagram content batch > 最大100件の投稿idを1回の呼び出しで取得します。 - **CLI**: `solari instagram content batch` - **MCP ツール**: `solari_instagram_content_batch` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 solari_instagram_content_detailのバッチ版。SOLARIの投稿UUIDを指定して、最大100件の投稿を1回の呼び出しで取得します。各行はslug、caption、posted_at、like/commentの各カウント、動画の場合はplay_count、投稿者のusernameとaccount_idを持ちます。未追跡のidは省かれるため、foundはリクエストした数より少なくなることがあります。solari_instagram_brand_overview(full=true)、solari_instagram_account_posts、solari_instagram_content_search、またはトレンドフィードから得たpost_idのリストを渡してください。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — brand overviewやトレンドフィードから得たidリストを、実際のキャプションと指標に変えるとき。 **何が返るか** — リクエストしたidのうち見つかった投稿。 #### パラメータ - `post_ids` (uuid[], 必須, 1–100 items, uuid) — 取得するSOLARIの投稿UUID。1回の呼び出しにつき最大100件。Instagramのショートコード/slugではありません。 - `sort` (enum, 任意, 既定値 "recent") — アイテムの並び順。posted_atの降順(recent)またはlike+commentのエンゲージメントの降順。 値: `recent`, `engagement`. #### レスポンス ##### `Response` - `items` (object[]) — 見つかった投稿。 - `requested` (integer) — 送信されたidの件数。 - `found` (integer) — 解決できた件数。未追跡のidは除外されるため、送信した数より少なくなることがあります。 ##### `items[]` - `id` (uuid) — 投稿のid。 - `slug` (string) — Instagramのショートコード。 - `text` (string) — キャプションのテキスト。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `username / user_id / account_id` (string) — 投稿したアカウント。現行の名称はaccount_id。 - `like_count / comment_count` (integer) — エンゲージメントのスナップショット。 - `play_count` (integer | null) — 動画の再生数。 - `media_type` (string) — 投稿のフォーマット。 #### 例 ```console $ solari instagram content batch post_ids='["019f505f-f8be-7e88-ae08-6fba999950b1","019f5060-3449-779e-a08b-d6d49add90cd"]' ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "id": "019f505f-f8be-7e88-ae08-6fba999950b1", "slug": "Dam_BYyJxtR", "text": "#광고 ₊✩‧₊˚ @innisfreeofficial ˚₊✩‧₊ \n공들인 나의 화장.. 찜통 더위에 무너져 내릴때\n이니스프리 노세범 선 파우더 하나면 고민 끝!\n\n유분 가득한 피부.. 꺼진 부위, 모공, 요철 부각되어\n10년은 늙어보이는 몰골에서 노세범 선 파우더 바르는\n즉시 핑크빛 필터를 씌운 듯~ 뽀용 피부 완성 ⭒˚.⋆\n\n노세범 맛집 답게 과다 피지와 유분을 즉각 흡착시키고\n무엇보다 가벼 …", "posted_at": "2026-07-10T10:34:01Z", "virtual_campaign": null, "username": "the_ketchap", "user_id": "018d3b53-c0c1-71cc-a44f-204f7d850267", "profile_picture_url": null, "like_count": 38579, "comment_count": 31, "thumbnail_url": null, "media_url": null, "media": [], "media_type": "reel", "play_count": 676825, "account_id": "018d3b53-c0c1-71cc-a44f-204f7d850267" }, "… 1 more" ], "requested": 2, "found": 2 } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_batch", "arguments": { "post_ids": [ "019f505f-f8be-7e88-ae08-6fba999950b1", "019f5060-3449-779e-a08b-d6d49add90cd" ] } } ``` #### 注意点 - 受け付けるのはSOLARIの投稿UUIDのみ。Instagramのショートコードはここには渡さないでください。それはcontent detailにslugとして渡してください。 - sort=engagementは新しさではなくlike + commentで並べます。 #### 関連ツール - [`solari_instagram_content_detail`](https://solari.sh/docs/tools/instagram-content-detail.md?lang=ja) - [`solari_instagram_brand_overview`](https://solari.sh/docs/tools/instagram-brand-overview.md?lang=ja) ### solari instagram content search > キャプション、クリエイターのbio、動画の文字起こしを横断するキーワード検索。 - **CLI**: `solari instagram content search` - **MCP ツール**: `solari_instagram_content_search` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中の投稿に対する字句キーワード検索。キャプション、クリエイターのbio、動画の文字起こしテキストに照合し(韓国語対応の解析とn-gramによる部分一致)、関連度順にランク付けしてマッチ箇所のハイライトを返します。各itemはpost_id、投稿者のaccount_id/username、caption、文字起こしテキスト、エンゲージメントの各カウント、scoreを持ちます。post_idはsolari_instagram_content_detailまたはsolari_instagram_content_batchに、アカウントの参照はアカウント系ツールに渡してください。カバー範囲はKR、JP、US、TWの各リージョンのみで、およそ直近6か月の投稿を保持します。totalは10,000までは正確で、そこで頭打ちになります。since/until(UTC日付)で絞り込みます。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — トピックや言い回しから投稿を探すとき。答えが件数になる場合はcontent aggregateをお使いください。 **何が返るか** — 関連度順のヒット。マッチ箇所のハイライト付き。 #### パラメータ - `query` (string, 必須) — キャプション、クリエイターのbio、動画の文字起こしに対して照合するフリーテキストのキーワードクエリ。 - `region` (enum, 任意, 既定値 "KR") — 検索対象のリージョン。インデックスがあるのはこの4リージョンのみ。 値: `KR`, `JP`, `US`, `TW`. - `limit` (integer, 任意, ≥ 1) — 返すヒットの最大数。デフォルトは20。100を超える値は100に切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのoffset。デフォルトは0。 - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。約6か月より古いデータはインデックスされていません。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 #### レスポンス ##### `Response` - `query / region` (string) — 適用されたqueryとregion。 - `total` (integer) — 一致した総数。10,000までは正確で、それ以降は頭打ちになります。 - `took_ms` (integer) — 検索にかかった時間。 - `items` (object[]) — ヒット。score降順。 ##### `items[]` - `post_id` (uuid) — SOLARIのpost id。 - `slug` (string) — Instagramのshortcode。 - `account_id / author_id / username` (string) — 投稿したアカウント。現行の名称はaccount_id。 - `caption` (string) — キャプションのテキスト。 - `user_bio` (string) — 投稿者のbio — 検索対象テキストの一部。 - `transcription_text` (string | null) — 動画の音声の文字起こし。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `like_count / comment_count` (integer) — エンゲージメントのスナップショット。 - `follower_count` (integer) — 投稿者のフォロワー数。 - `score` (number) — 関連度スコア。このレスポンス内でのみ比較できます。 - `highlight` (object) — フィールドごとの一致した断片: caption、user_bio、transcription_text。 - `is_video` (boolean) — その投稿が動画かどうか。 #### 例 ```console $ solari instagram content search query="이니스프리 그린티" limit=3 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "query": "이니스프리 그린티", "region": "KR", "total": 10000, "took_ms": 1586, "items": [ { "post_id": "019f12d8-3e72-78e9-b7e5-39293bc56f23", "author_id": "019f12d8-3e0f-7c74-afc6-e14405bd1523", "username": "hanydiary", "caption": "[이니스프리에디터 4기 1-2 : 그린티 PDRN 아이&립 세럼] #이니스프리 #그린티PDRN 💚 자세한 포스팅은 프로필 링크 참고해주세요 :)", "user_bio": "대외활동 | 휴학생 | 취준일기 🪽과 학생회 2년 연임 🪽이니스프리 대학생 에디터 3기 / 4기", "transcription_text": null, "posted_at": "2026-02-16T05:44:45Z", "like_count": 3, "comment_count": 3, "follower_count": 972, "score": 140.43787, "slug": "DUzrl1UkoJb", "highlight": { "caption": [ "[이니스프리에디터 4기 1-2 : 그린티 PDRN 아이&립 세럼] #이니스프리 #그린티PDRN 💚 자세한 포스팅은 프로필 링크 참고해주세요 :)" ], "user_bio": [ "대외활동 | 휴학생 | 취준일기 🪽과 학생회 2년 연임 🪽이니스프리 대학생 에디터 3기 / 4기" ], "transcription_text": [] }, "is_video": false, "media_url": null, "thumbnail_url": null, "account_id": "019f12d8-3e0f-7c74-afc6-e14405bd1523" }, "… 2 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_search", "arguments": { "query": "이니스프리 그린티", "limit": 3 } } ``` #### 注意点 - インデックスの対象はKR、JP、US、TWのみで、およそ直近6か月を保持します。それより古いsinceを指定すると何も返りません。 - totalは10,000までは正確で、そこで止まります。 - 韓国語対応の解析とn-gramによる部分一致を組み合わせています。 #### 関連ツール - [`solari_instagram_content_aggregate`](https://solari.sh/docs/tools/instagram-content-aggregate.md?lang=ja) - [`solari_instagram_content_batch`](https://solari.sh/docs/tools/instagram-content-batch.md?lang=ja) - [`solari_tiktok_content_search`](https://solari.sh/docs/tools/tiktok-content-search.md?lang=ja) ### solari instagram content trending > リージョン内で今トレンドになっている Instagram 投稿。 - **CLI**: `solari instagram content trending` - **MCP ツール**: `solari_instagram_content_trending` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 リージョン内で現在トレンドになっている Instagram 投稿を、クリエイターのプロフィール項目を付加して返します。前回のレスポンスの next_cursor によるカーソルページネーションに対応します。ブランドの account_id または username を指定すると、ランキングをパーソナライズできます。サインイン済みの SOLARI アカウントであれば利用できます。伸び率主導で加速している投稿には、代わりに solari_instagram_content_rising をお使いください。 **どんなときに使うか** — 「今なにが効いているか」。量ではなく伸び率を見るなら content rising をお使いください。 **何が返るか** — 投稿者のプロフィール項目を付加したトレンド投稿。カーソルでページングされます。 #### パラメータ - `region` (string, 任意, 既定値 "KR") — KR、JP、US などのリージョンコード。 - `limit` (integer, 任意, ≥ 1) — 1 ページあたりの最大投稿数、デフォルトは 20。50 を超える値は上限の 50 に切り詰められます。 - `cursor` (string, 任意) — 前回のレスポンスの next_cursor から得られる不透明なページネーションカーソル。 - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — ブランド親和性によるパーソナライズ用の任意のブランド account_id (SOLARI アカウントの UUID)。 - `username` (string, 任意, ≤ 64 chars) — ブランド親和性によるパーソナライズ用の任意のブランドの Instagram ハンドル。account_id が指定されている場合は無視されます。 #### レスポンス ##### `Response` - `items` (object[]) — トレンド投稿。 - `total_count` (integer) — フィードの件数。 - `region` (string) — 適用されたリージョン。 - `content_type` (string) — フィード種別のタグ。 - `next_cursor` (string | null) — 次のページを取得する際に cursor として渡す値。 ##### `items[]` - `post_id` (uuid) — SOLARI の post id。他のコンテンツ系ツールにそのまま渡せます。 - `slug` (string) — Instagram のショートコード。公開 URL の /p/ または /reel/ の後ろのセグメント。 - `author_id` (uuid) — 投稿したアカウントの account_id。 - `username` (string) — 投稿者のハンドル。 - `full_name` (string | null) — プロフィールの表示名。 - `profile_pic_url` (string | null) — プロフィール画像の URL。 - `follower_count` (integer | null) — スナップショット時点の投稿者のフォロワー数。 - `region` (string | null) — 投稿者に割り当てられたリージョンコード。 - `posted_at` (timestamp) — 公開時刻 (UTC)。 - `media_type` (string) — image、video、または carousel。 - `play_count` (integer | null) — 動画の再生数。image 投稿では null。 - `like_count` (integer | null) — スナップショット時点のいいね数。 - `text` (string | null) — キャプションのテキスト。 - `media_url` (string) — オリジナルメディアの URL。 - `thumbnail_url` (string) — サムネイルの URL。 - `score` (number | null) — フィードのランキングスコア。1 つのレスポンス内でのみ比較可能。 - `efficiency_score` (number | null) — 投稿者のフォロワー数に対する相対的なパフォーマンス。 - `est_percentile` (number | null) — リージョン内での推定パーセンタイル、0〜1。 - `total_views_3m` (integer | null) — 直近 3 か月の投稿者の累計再生数。 - `median_views_3m` (integer | null) — 直近 3 か月の投稿者の再生数の中央値。 - `recent_collab_brands` (string[]) — 投稿者が最近コラボレーションしたブランド。 - `item_type` (string) — アイテム種別のタグ。コンテンツフィードでは post。 - `content_source` (string | null) — このアイテムを抽出したパイプライン。 - `is_saved` (boolean | null) — そのアイテムが SOLARI アプリで保存済みかどうか。 - `updated_at` (timestamp | null) — 指標のスナップショットが最後に更新された時刻。 #### 例 ```console $ solari instagram content trending region=KR limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "item_type": "content", "post_id": "01a055fe-d72c-7005-8709-eef67b4be6f0", "author_id": "018ecc27-f8e7-7100-9339-bb050ea44a7f", "username": "sixpackpiggy", "full_name": "Jinmin Park", "profile_pic_url": "https://dcr.bzine.co/instagram/users/sixpackpiggy/profile-picture", "follower_count": 93442, "region": "KR", "posted_at": "2026-08-29T02:02:20Z", "media_type": "video", "play_count": 286749, "like_count": null, "score": 96.69330916066565, "efficiency_score": null, "est_percentile": 96.69330916066565, "updated_at": "2026-09-03T04:51:42.797111Z", "media_url": "https://smr-images-b.bzine.co/users/018ecc27-f8e7-7100-9339-bb050ea44a7f/posts/01a055fe-d72c-7005-8709-eef67b4be6f0/medias/01a055fe-d964-7d73-9a77-d06823a2abc2.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images.bzine.co/users/018ecc27-f8e7-7100-9339-bb050ea44a7f/posts/01a055fe-d72c-7005-8709-eef67b4be6f0/medias/01a055fe-d964-7d73-9a77-d06823a2abc2.m …", "slug": "Dcmzs05SAae", "text": "How dedicated are you to your Korean skincare? 💅@patinaosaka \n#koreanskincare #osaka #japan #kbeauty #traveling", "brand_match_score": null, "recent_collab_brands": [], "total_views_3m": 1875678, "median_views_3m": 57780, "is_saved": false, "content_source": null }, "… 1 more" ], "total_count": 213635, "region": "KR", "content_type": "trending", "next_cursor": "eyJhcyI6ICIyMDI2LTA5LTAzVDA1OjIwOjIzLjM4Mzk3NCswMDowMCIsICJzYyI6ICIyMDI2LTA5LTAzVDA0OjQ0OjQ3LjkzNTI1OCswMDowMCIsICJzcCI6ICIwMWEwNTVmZS1mOWIyLTdiNmYtYjY1OS05ZGE1OTM3NjgzMWMifQ==" } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_trending", "arguments": { "region": "KR", "limit": 2 } } ``` #### 注意点 - ブランドの account_id またはハンドルを渡すと、ブランド親和性でランキングがパーソナライズされます。 - ページネーションは offset ではなくカーソル方式。next_cursor を次の呼び出しに渡してください。 #### 関連ツール - [`solari_instagram_content_rising`](https://solari.sh/docs/tools/instagram-content-rising.md?lang=ja) - [`solari_instagram_content_trend_clusters`](https://solari.sh/docs/tools/instagram-content-trend-clusters.md?lang=ja) ### solari instagram content rising > ベースラインより速く加速している Instagram 投稿。 - **CLI**: `solari instagram content rising` - **MCP ツール**: `solari_instagram_content_rising` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 リージョン内で直近のパフォーマンスがベースラインより速く加速している Instagram 投稿。カーソルページネーションや、ブランドの account_id または username による任意のブランドパーソナライズを含め、solari_instagram_content_trending と同じ形式。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — 絶対値よりも勢いが重要なとき。ピークを迎える前の投稿を捉えます。 **何が返るか** — content trending と同じ形式。ランキングのみが異なります。 #### パラメータ - `region` (string, 任意, 既定値 "KR") — KR、JP、US などのリージョンコード。 - `limit` (integer, 任意, ≥ 1) — 1 ページあたりの最大投稿数、デフォルトは 20。50 を超える値は上限の 50 に切り詰められます。 - `cursor` (string, 任意) — 前回のレスポンスの next_cursor から得られる不透明なページネーションカーソル。 - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — ブランド親和性によるパーソナライズ用の任意のブランド account_id (SOLARI アカウントの UUID)。 - `username` (string, 任意, ≤ 64 chars) — ブランド親和性によるパーソナライズ用の任意のブランドの Instagram ハンドル。account_id が指定されている場合は無視されます。 #### レスポンス ##### `Response` - `items` (object[]) — 急上昇中の投稿。 - `total_count` (integer) — フィードの件数。 - `region` (string) — 適用されたリージョン。 - `content_type` (string) — フィード種別のタグ。 - `next_cursor` (string | null) — 次のページを取得する際に cursor として渡す値。 ##### `items[]` - `post_id` (uuid) — SOLARI の post id。他のコンテンツ系ツールにそのまま渡せます。 - `slug` (string) — Instagram のショートコード。公開 URL の /p/ または /reel/ の後ろのセグメント。 - `author_id` (uuid) — 投稿したアカウントの account_id。 - `username` (string) — 投稿者のハンドル。 - `full_name` (string | null) — プロフィールの表示名。 - `profile_pic_url` (string | null) — プロフィール画像の URL。 - `follower_count` (integer | null) — スナップショット時点の投稿者のフォロワー数。 - `region` (string | null) — 投稿者に割り当てられたリージョンコード。 - `posted_at` (timestamp) — 公開時刻 (UTC)。 - `media_type` (string) — image、video、または carousel。 - `play_count` (integer | null) — 動画の再生数。image 投稿では null。 - `like_count` (integer | null) — スナップショット時点のいいね数。 - `text` (string | null) — キャプションのテキスト。 - `media_url` (string) — オリジナルメディアの URL。 - `thumbnail_url` (string) — サムネイルの URL。 - `score` (number | null) — フィードのランキングスコア。1 つのレスポンス内でのみ比較可能。 - `efficiency_score` (number | null) — 投稿者のフォロワー数に対する相対的なパフォーマンス。 - `est_percentile` (number | null) — リージョン内での推定パーセンタイル、0〜1。 - `total_views_3m` (integer | null) — 直近 3 か月の投稿者の累計再生数。 - `median_views_3m` (integer | null) — 直近 3 か月の投稿者の再生数の中央値。 - `recent_collab_brands` (string[]) — 投稿者が最近コラボレーションしたブランド。 - `item_type` (string) — アイテム種別のタグ。コンテンツフィードでは post。 - `content_source` (string | null) — このアイテムを抽出したパイプライン。 - `is_saved` (boolean | null) — そのアイテムが SOLARI アプリで保存済みかどうか。 - `updated_at` (timestamp | null) — 指標のスナップショットが最後に更新された時刻。 #### 例 ```console $ solari instagram content rising region=KR limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "items": [ { "item_type": "content", "post_id": "01a0495a-4e46-73d5-a111-a818248b665b", "author_id": "019e4a24-ee85-78e9-8763-602930999853", "username": "iiiwantkitty", "full_name": "주 령", "profile_pic_url": "https://dcr.bzine.co/instagram/users/iiiwantkitty/profile-picture", "follower_count": 706, "region": "KR", "posted_at": "2026-08-28T07:38:46Z", "media_type": "video", "play_count": 48092, "like_count": null, "score": 0.1292899036795201, "efficiency_score": 0.1292899036795201, "est_percentile": 84.68488691008565, "updated_at": "2026-09-03T05:20:45.496271Z", "media_url": "https://smr-images-b.bzine.co/users/019e4a24-ee85-78e9-8763-602930999853/posts/01a0495a-4e46-73d5-a111-a818248b665b/medias/01a0495a-4fc0-7352-92dd-a04afe898589.mp4", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=0ms/https://smr-images-a.bzine.co/users/019e4a24-ee85-78e9-8763-602930999853/posts/01a0495a-4e46-73d5-a111-a818248b665b/medias/01a0495a-4fc0-7352-92dd-a04afe898589 …", "slug": "Dck0Wj8xeq3", "text": "이정도가 아니면 뮤트라고 하지말자..⭐️ 뮤트톤 친구 입술에 빡빡 발라주고싶음\n\n컬러 보자마자 아 내꺼하자ㅡㅡ 하고 바로 겟한 것\n\n그레이애쉬,, 핑크 ,, 브라운 다 들어간 밑힌 컬러 이거 뮤트톤들이 바르면 진짜 분위기 미처버리는 립이걸랑 영상보다 실물이 더 뮤트!\n\n입술에 올리면 좀더 투명하게 올라가면서 회끼도는데 뉴트럴하면서도 팥앙금 같은 고런 깔 느낌\n안쪽에만 톡톡 발라서 쌩얼립으로도 …", "brand_match_score": null, "recent_collab_brands": [ "apieu_cosmetics", "… 8 more" ], "total_views_3m": 2389749, "median_views_3m": 5215, "is_saved": false, "content_source": null }, "… 1 more" ], "total_count": 291665, "region": "KR", "content_type": "rising", "next_cursor": "eyJhcyI6ICIyMDI2LTA5LTAzVDA1OjIwOjQ5LjA3Mjg3MiswMDowMCIsICJzYyI6ICIyMDI2LTA5LTAzVDA1OjE5OjQwLjc1NzUwOCswMDowMCIsICJzcCI6ICIwMWEwNDNmOC1hODdlLTdiMWItYjFiNi1iODliMTU2YjU0ODgifQ==" } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_rising", "arguments": { "region": "KR", "limit": 2 } } ``` #### 注意点 - パラメータとレスポンスは content trending と同一。ブランドパーソナライズも含みます。 #### 関連ツール - [`solari_instagram_content_trending`](https://solari.sh/docs/tools/instagram-content-trending.md?lang=ja) - [`solari_instagram_content_trend_clusters`](https://solari.sh/docs/tools/instagram-content-trend-clusters.md?lang=ja) ### solari instagram content trend clusters > SOLARIのトレンドダイジェスト。直近のコンテンツを名前付きのテーマにまとめたもの。 - **CLI**: `solari instagram content trend clusters` - **MCP ツール**: `solari_instagram_content_trend_clusters` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 SOLARIのトレンドダイジェスト。リージョンごとの直近のコンテンツトレンドクラスタを、クラスタのメタデータと所属投稿とともに返します。ブランドのaccount_idまたはusernameを渡した場合は、ブランド親和性で再ランキングできます。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — 個別の投稿ではなく、今の全体像を読むとき。 **何が返るか** — 名前付きクラスタ。規模、変化、所属投稿のプレビューを含みます。 #### パラメータ - `region` (string, 任意, 既定値 "KR") — リージョンコード。KR、JP、USなど。 - `since_days` (integer, 任意, 既定値 7, 1–90) — トレンドクラスタの遡及期間(日数)。1〜90の範囲。 - `limit` (integer, 任意, ≥ 1) — 返されるトレンドクラスタの最大数。デフォルトは20。24を超える値は24に上限で切り詰められます。 - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — ブランド親和性による再ランキング用のブランドaccount_id(SOLARIアカウントUUID)。省略可。 - `username` (string, 任意, ≤ 64 chars) — ブランド親和性による再ランキング用のブランドのInstagramハンドル。省略可。account_idが指定されている場合は無視されます。 - `brand_aware` (boolean, 任意, 既定値 true) — account_idが指定されている場合に、ブランド親和性でクラスタを再ランキングします。 #### レスポンス ##### `Response` - `success` (boolean) — ダイジェストが生成されたかどうか。 - `trend_count` (integer) — 返されたクラスタ数。 - `header_text` (string) — ダイジェストの見出し。 - `region / since_days` (string · integer) — 適用されたリージョンと遡及期間。 - `brand_aware` (boolean) — ブランド親和性の再ランキングが要求されたかどうか。 - `als_applied` (boolean) — 親和性モデルが実際に実行されたかどうか。 - `trends` (object[]) — クラスタ。 ##### `trends[]` - `cluster_id` (string) — クラスタのid。 - `name` (string) — クラスタ名。 - `bullets` (string[]) — クラスタを説明する文。 - `count` (integer) — 所属する投稿数。 - `count_delta` (integer) — 前の期間と比べた所属投稿数の変化。 - `growth_pct` (number) — 成長率(パーセント)。 - `avg_play_delta` (number) — 平均再生数の変化。 - `distinct_creators` (integer) — クラスタに寄与しているクリエイター数。 - `creator_delta` (integer) — クリエイター数の変化。 - `is_new` (boolean) — そのクラスタが今期に初めて現れたかどうか。 - `member_thumbnails` (object[]) — 所属投稿のサムネイルプレビュー。 #### 例 ```console $ solari instagram content trend clusters region=KR since_days=7 limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "success": true, "trend_count": 2, "header_text": "최근 7일 인기 트렌드 2개 (브랜드 컨텍스트 없음)", "brand_aware": true, "als_applied": false, "region": "KR", "since_days": 7, "directive": null, "trends": [ { "cluster_id": "01a05857-7727-74d8-8da5-4e95981aca8d", "name": "GV90의 미래형 하이테크 기능", "bullets": [ "화면이 회전하거나 시트가 뒤로 돌아가는 등 물리적으로 변형되는 자동차 내부 장치들을 직접 시연함", "… 1 more" ], "count": 7, "count_delta": 0, "growth_pct": 0, "avg_play_delta": 0, "creator_delta": 0, "distinct_creators": 3, "is_new": false, "early_zone_creator_count": null, "early_zone_creator_ratio": null, "als_member_count": null, "mean_als_score": null, "annotation": null, "group": null, "member_thumbnails": [ { "post_id": "01a030df-c4b3-739c-9214-44b3b9463c7b", "thumbnail_url": "https://bzine.co/cdn-cgi/media/width=480,mode=frame,time=100ms/https://smr-images-c.bzine.co/users/018cb4c9-da89-7b02-8efd-53ccb65c26c9/posts/01a030df-c4b3-739c-9214-44b3b9463c7b/medias/01a030df-c7c3-788e-8775-1096728e07 …", "slug": "DcP6jgRMTRv", "username": "sol.bpd", "media_url": "https://smr-images-c.bzine.co/users/018cb4c9-da89-7b02-8efd-53ccb65c26c9/posts/01a030df-c4b3-739c-9214-44b3b9463c7b/medias/01a030df-c7c3-788e-8775-1096728e07f2.mp4", "media_type": "video", "play_count": 1947419, "posted_at": "2026-08-20T04:37:17+00:00" }, "… 3 more" ] }, "… 1 more" ], "insights": null, "insight_query": null } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_trend_clusters", "arguments": { "region": "KR", "since_days": 7, "limit": 2 } } ``` #### 注意点 - 重い呼び出し。ゲートウェイは120秒まで許容します。 - since_daysは1〜90。limitは24に上限で切り詰められます。 - ブランドを渡すとbrand_awareの再ランキングが有効になります。元の並び順のままにするにはbrand_aware=falseを指定してください。 #### 関連ツール - [`solari_instagram_content_trending`](https://solari.sh/docs/tools/instagram-content-trending.md?lang=ja) - [`solari_instagram_content_rising`](https://solari.sh/docs/tools/instagram-content-rising.md?lang=ja) ### solari instagram content aggregate > 投稿を列挙するのではなく数えます。アカウント、フォーマット、ハッシュタグ、メンション、キーワード単位。 - **CLI**: `solari instagram content aggregate` - **MCP ツール**: `solari_instagram_content_aggregate` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中の投稿に対する件数とエンゲージメントの集計。個々の投稿ではなく数値で答える問いに使います。アカウント別・月別の投稿数、あるトピックで優勢なハッシュタグ、フォーマット別の平均いいね数など。account、post_type、hashtag、mention、caption_keyword、transcription_keywordのいずれかでグループ化でき、任意で各グループをday、week、monthで分割できます。post_countは常に返ります。like/comment/viewの合計と平均、平均フォロワー数、ユニークアカウント数はmetricsで要求してください。対象はフリーテキストのquery、usernames、hashtags、mentions、post_typesで絞り込んでください。mentionsで絞り込みaccountでグループ化すると、指定したハンドルをタグ付けしたアカウントが分かります。カバー範囲はKR、JP、US、TWの各リージョンで、保持期間はおよそ直近6か月。それより古いsinceは切り詰められ、適用された値がレスポンスに返されます。バケットは件数の多い順。truncated=trueは、limitで返した数より多くのグループが存在したことを意味します。件数ではなく投稿そのものが必要な場合はsolari_instagram_content_searchをお使いください。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — 数値で答える問い。アカウント別・月別の投稿数、あるトピックで優勢なハッシュタグ、フォーマット別の平均いいね数。 **何が返るか** — グループごとの件数とエンゲージメント集計。件数の多いグループ順。 #### パラメータ - `region` (enum, 任意, 既定値 "KR") — 集計対象のリージョン。インデックスがあるのはこの4リージョンのみ。 値: `KR`, `JP`, `US`, `TW`. - `group_by` (enum, 任意) — グループ化する軸。省略すると、絞り込み後の集合全体を単一の合計バケットに集計します。 値: `account`, `post_type`, `hashtag`, `mention`, `caption_keyword`, `transcription_keyword`. - `interval` (enum, 任意) — 分割するカレンダー間隔。単独では期間ごとに1バケットを返し、group_byと組み合わせると各グループが時系列を持ちます。 値: `day`, `week`, `month`. - `metrics` (string[], 任意) — 常に返るpost_count以外に取得する追加メトリクス。メトリクスの値はスナップショットであり、実際の最新値より遅れることがあります。 値: `like_sum`, `like_avg`, `comment_sum`, `comment_avg`, `view_sum`, `view_avg`, `follower_avg`, `account_count`. - `query` (string, 任意) — キャプション、クリエイターのbio、動画の文字起こしに対して照合するフリーテキストのフィルタ。 - `usernames` (string[], 任意) — これらのInstagramハンドルに限定します。 - `hashtags` (string[], 任意) — これらのハッシュタグをすべて含む投稿に限定します。 - `mentions` (string[], 任意) — これらのハンドルをすべてタグ付けした投稿に限定します。group_by=accountと組み合わせると、指定したハンドルをタグ付けしているアカウントをランキングできます。 - `post_types` (string[], 任意) — これらの投稿フォーマットに限定します。 - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。デフォルトは183日前で、これが受け付けられる最も古い境界でもあります。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 - `limit` (integer, 任意, ≥ 1) — group_byを指定したときに返すグループの最大数。デフォルトは20。50を超える値は50に切り詰められます。 #### レスポンス ##### `Response` - `region` (string) — 集計を実行したリージョン。 - `since` (date) — 実際に適用された開始日。保持期間より古いリクエストは切り詰められ、その値がここに返されます。 - `until` (date | null) — 実際に適用された終了日。 - `group_by` (string | null) — 適用されたグループ化の軸。 - `interval` (string | null) — 適用されたカレンダー間隔。 - `total_posts` (integer) — フィルタに一致した投稿数。グループが重複する場合、バケット件数の合計と一致しないことがあります。 - `truncated` (boolean) — limitで返した数より多くのグループが存在した場合にtrue。 - `buckets` (object[]) — グループごとに1エントリ。件数の多い順。 ##### `buckets[]` - `key` (string) — グループの値 — ハンドル、ハッシュタグ、フォーマットなど。group_byを省略した場合は単一の合計バケットになります。 - `metrics.post_count` (integer) — 投稿数。常に返ります。 - `metrics.like_sum / like_avg` (number | null) — いいねの合計と平均。metricsで要求した場合のみ。 - `metrics.comment_sum / comment_avg` (number | null) — コメントの合計と平均。 - `metrics.view_sum / view_avg` (number | null) — 再生数の合計と平均。 - `metrics.share_sum / collect_sum` (number | null) — TikTok専用のメトリクス。Instagramでは常にnull。 - `metrics.follower_avg` (number | null) — 投稿したアカウントの平均フォロワー数。 - `metrics.account_count` (integer | null) — グループ内のユニークアカウント数。 - `series` (object[] | null) — 期間ごとの内訳。intervalを指定した場合に返ります。 #### 例 ```console $ solari instagram content aggregate group_by=hashtag query="이니스프리" metrics='["like_avg","view_sum","account_count"]' limit=5 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "region": "KR", "since": "2026-03-04", "until": null, "group_by": "hashtag", "interval": null, "total_posts": 1647, "truncated": true, "buckets": [ { "key": "이니스프리", "metrics": { "post_count": 772, "like_sum": null, "like_avg": 320.7240932642487, "comment_sum": null, "comment_avg": null, "view_sum": 9400953, "view_avg": null, "share_sum": null, "share_avg": null, "collect_sum": null, "collect_avg": null, "follower_avg": null, "account_count": 587 }, "series": null }, { "key": "광고", "metrics": { "post_count": 548, "like_sum": null, "like_avg": 373.04021937842776, "comment_sum": null, "comment_avg": null, "view_sum": 5463711, "view_avg": null, "share_sum": null, "share_avg": null, "collect_sum": null, "collect_avg": null, "follower_avg": null, "account_count": 381 }, "series": null }, "… 3 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_content_aggregate", "arguments": { "group_by": "hashtag", "query": "이니스프리", "metrics": [ "like_avg", "view_sum", "account_count" ], "limit": 5 } } ``` #### 注意点 - post_countは常に返ります。それ以外はmetricsで指定しない限りnull。 - mentionsで絞り込みaccountでグループ化すると、「どのアカウントがこのハンドルをタグ付けしたか」が分かります。 - インデックスの対象はKR、JP、US、TWで、範囲はおよそ直近6か月。sinceのデフォルトは183日前で、これが受け付けられる下限でもあります。それより古い値は切り詰められ、適用された値がレスポンスに返されます。 - interval単独では期間ごとに1バケットを返します。group_byと組み合わせると、各グループが時系列を持ちます。 - 投稿そのものが答えになる場合はcontent searchをお使いください。 #### 関連ツール - [`solari_instagram_content_search`](https://solari.sh/docs/tools/instagram-content-search.md?lang=ja) - [`solari_tiktok_content_aggregate`](https://solari.sh/docs/tools/tiktok-content-aggregate.md?lang=ja) ### solari instagram tag search > 完全一致のハッシュタグ1つ、または@メンションが付いた投稿をすべて。 - **CLI**: `solari instagram tag search` - **MCP ツール**: `solari_instagram_tag_search` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 指定したタグと完全に一致する、追跡中の投稿をすべて内容まで含めて返します — '#ootd' はハッシュタグ、'@handle' はそのアカウントへのメンションで、収集の新しい順・カーソルページングです。タグ全体が完全に一致する必要があり、追跡した全期間・全リージョンをカバーします(solari_instagram_content_search は自由テキスト検索ですが、4リージョン・約6か月のみです)。サインイン済みの SOLARI アカウントであればどなたでもご利用いただけます。 **どんなときに使うか** — キャンペーンハッシュタグの実際の広がりを測るとき、または特定のアカウントをメンションした投稿をすべて探すときです。追跡した全期間に対して、タグ全体が完全に一致するものだけを探します。テキストのどこかにあるキーワードを探すなら content search ですが、そちらは4リージョン・約6か月しか見ません。 **何が返るか** — タグが付いた投稿を収集の新しい順に整えて、次のページ用のカーソルとともに返します。 #### パラメータ - `query` (string, 必須, ≤ 200 chars) — 完全一致のタグ1つ。'#ootd' または 'ootd' はハッシュタグを、'@oliveyoung_official' はそのアカウントへのメンションを検索します。空白とワイルドカードは使えません。 - `limit` (integer, 任意, ≥ 1) — 1ページあたりの投稿数、既定値20。1000を超える値は1000に丸められます。ページを大きくしてもコストは増えません。 - `cursor` (string, 任意) — 前回のレスポンスの next_cursor。最初のページでは省略してください。 #### レスポンス ##### `Response` - `query` (string) — 実際に検索に使われたタグの値。先頭の # や @ は含まれません。 - `tag_kind` (string) — hashtag または mention — query をどちらとして読んだかを示します。 - `matched_tags` (integer) — query が一致した、保存されているタグ表記の数。1より大きいのが普通です — メンションはハンドルとそのアカウントの数値 id の両方に、ハングルのハッシュタグは2種類の Unicode 表記の両方に一致するためです。0 はそのタグが一度も出現していないことを意味します。 - `items` (object[]) — 見つかった投稿。 - `found` (integer) — 実際に取得できた投稿数。タグ索引の更新後に削除された投稿があると、ページサイズより小さくなります。 - `next_cursor` (string | null) — 次のページを取得するにはこの値を cursor として渡してください。最後のページでは null です。 - `mirror_synced_at` (timestamp | null) — タグ索引が最後に更新された時刻(UTC)。この時刻より後に公開された投稿には、まだタグが付いていないことがあります。 ##### `items[]` - `id` (uuid) — 投稿 id。 - `slug` (string) — Instagram のショートコード。 - `text` (string) — キャプションのテキスト。 - `posted_at` (timestamp) — 公開時刻(UTC)。 - `username / user_id / account_id` (string) — 投稿アカウント。account_id が現在の名称です。 - `like_count / comment_count` (integer) — エンゲージメントのスナップショット。 - `play_count` (integer | null) — 動画の再生数。 - `media_type` (string) — 投稿の形式。 #### 例 ```console $ solari instagram tag search query=#ootd limit=3 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "query": "ootd", "tag_kind": "hashtag", "matched_tags": 1, "items": [ { "id": "01a06a16-781f-7578-822b-1c326e72f28d", "slug": "DW1jniHiVSU", "text": "御殿場是一個一天逛不完的地方 希望下次有時間可以慢慢逛 —— OOTD —— Pants:LAKOLE / Shirt:HARE #LYNN__OOTD #日常穿搭 #ootd …", "posted_at": "2026-04-07T16:16:21Z", "virtual_campaign": null, "username": "llling_yinnnnn", "user_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04", "account_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04", "profile_picture_url": null, "like_count": 3, "comment_count": 4, "media_type": "post", "play_count": null, "media": [] }, { "id": "01a06a16-552d-7099-ae0a-77e6b68de960", "slug": "DaS66VzJBPW", "text": "SEOUL OOTD — 這次搭配了四種完全不同風格 #ootd #lynn__ootd #穿搭販賣機 #韓國穿搭", "posted_at": "2026-07-02T15:33:13Z", "virtual_campaign": null, "username": "llling_yinnnnn", "user_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04", "account_id": "019dbc46-1a67-7ef5-b95a-2fb466790d04", "profile_picture_url": null, "like_count": 32, "comment_count": 1, "media_type": "reel", "play_count": 888, "media": [] }, "… 1 more" ], "found": 3, "next_cursor": "01a06a16-552d-7099-ae0a-77e6b68de960", "mirror_synced_at": "2026-09-03T21:47:19Z" } ``` #### MCP 呼び出しとして ```json { "name": "solari_instagram_tag_search", "arguments": { "query": "#ootd", "limit": 3 } } ``` #### 注意点 - 並び順は公開日ではなく収集時刻です — 1つのアカウントの投稿はまとめて収集されるため、連続する項目が同じ投稿者になりやすく、posted_at はばらつきます。公開順が重要な場合はご自身で posted_at 順に並べ替えてください。 - タグの索引は1日1回作り直されます。直近数時間の投稿にはまだタグが付いていないことがあり、正確な基準時刻は mirror_synced_at にあります。キャプションとエンゲージメント数値は常に最新です。 - ページがどれだけ大きくても計算コストは同じです。50件を20ページたどるより、1000件を1ページで取得するほうが有利です。 - タグ全体が完全に一致する必要があります。'#ootd' は '#ootdkorea' に一致せず、ワイルドカードもありません。 - 先頭に @ を付けると、そのアカウントをメンションした投稿を検索します: 'query=@oliveyoung_official'。 #### 関連ツール - [`solari_instagram_content_search`](https://solari.sh/docs/tools/instagram-content-search.md?lang=ja) - [`solari_instagram_content_aggregate`](https://solari.sh/docs/tools/instagram-content-aggregate.md?lang=ja) ### solari tiktok account search > ブランド名やクリエイター名をTikTokのaccount_idに変換します。 - **CLI**: `solari tiktok account search` - **MCP ツール**: `solari_tiktok_account_search` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 ブランド名・クリエイター名またはTikTokハンドルを、追跡中のTikTokアカウント候補に解決します。高速で決定的なインデックス検索をtypeahead形式で行い、ハンドルは前方一致、表示用のnicknameはテキスト一致で照合し、一致の質とフォロワー数でランク付けします。foundと、最良のものから順に並んだitems(items[0]が最上位の一致)を返します。各itemはaccount_id(他のsolari_tiktok_*系ツールが受け取るSOLARIアカウントのUUID。TikTokのaccount_idはInstagramのaccount_idとは別の値であり、両者は決して互換ではありません)、username(TikTokハンドル)、nickname、follower_count、video_count、region、is_verified、is_private、is_commerce_user、commerce_user_category、profile_urlを持ちます。found=falseでitemsが空の場合は、一致がなかったことを意味します。queryはハンドルまたはnicknameに実際に含まれている必要があるため、音写のエイリアスで解決できない場合はネイティブの綴りで再試行してください。ユーザーが特定の1か国を指定した場合を除き、regionは未設定のままにしてください。追跡中のTikTokアカウントの多くはregionを持たず、regionフィルタを掛けるとそれらが除外されます。未追跡のハンドルはここには現れません。solari_tiktok_account_profileまたはsolari_tiktok_account_postsにそのまま渡せば、ライブ取得されます。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — TikTokに関する問いでの最初の呼び出し。Instagramのaccount_idはここでは使えません。 **何が返るか** — 最良のものから順に並んだアカウント候補。items[0]が最上位の一致。 #### パラメータ - `query` (string, 必須) — 解決したいブランド名・クリエイター名またはTikTokハンドル。 - `limit` (integer, 任意, ≥ 1) — 返す候補の最大数。デフォルトは8。50を超える値は50に切り詰められます。 - `region` (string, 任意, ≤ 8 chars) — KR、JP、USなどの任意のリージョンコード。ユーザーが特定の1か国を指定した場合を除き、未設定のままにしてください。regionを指定すると、リージョンが判明していないアカウントは除外されます。 #### レスポンス ##### `Response` - `found` (boolean) — 候補が1件以上一致した場合にtrue。 - `items` (object[]) — 候補。 ##### `items[]` - `account_id` (uuid) — TikTokのaccount_id。同じブランドであっても、Instagramのaccount_idと互換になることは決してありません。 - `username` (string) — TikTokのハンドル。 - `nickname` (string) — 表示名。 - `follower_count / video_count` (integer) — フォロワー数と動画数。 - `region` (string | null) — リージョンコード。追跡中のアカウントの多くは持ちません。 - `is_verified / is_private` (boolean) — 認証と非公開のフラグ。 - `is_commerce_user` (boolean) — コマースアカウントかどうか。 - `commerce_user_category` (string | null) — コマースのカテゴリ。例: Beauty。 - `profile_url` (string) — 公開プロフィールのURL。 #### 例 ```console $ solari tiktok account search query=innisfree limit=5 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "found": true, "items": [ { "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "nickname": "Innisfreeofficial", "follower_count": 143800, "video_count": 767, "region": "KR", "is_verified": true, "is_private": false, "is_commerce_user": true, "commerce_user_category": "Beauty", "profile_url": "https://www.tiktok.com/@innisfree_official" } ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_account_search", "arguments": { "query": "innisfree", "limit": 5 } } ``` #### 注意点 - ユーザーが特定の1か国を指定した場合を除き、regionは未設定のままにしてください。追跡中のアカウントの多くはregionを持たず、regionを指定するとそれらが完全に除外されます。 - 未追跡のハンドルはここには現れません。tiktok account profileまたはtiktok account postsにそのまま渡せば、ライブ取得されます。 #### 関連ツール - [`solari_tiktok_account_profile`](https://solari.sh/docs/tools/tiktok-account-profile.md?lang=ja) - [`solari_tiktok_account_posts`](https://solari.sh/docs/tools/tiktok-account-posts.md?lang=ja) - [`solari_instagram_account_search`](https://solari.sh/docs/tools/instagram-account-search.md?lang=ja) ### solari tiktok account profile > SOLARIが把握しているTikTokアカウント1件の全情報。 - **CLI**: `solari tiktok account profile` - **MCP ツール**: `solari_tiktok_account_profile` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 TikTokアカウント1件の完全なSOLARIプロフィール。username(ハンドル)、nickname、bio、follower/following/like/videoの各カウント、region、verified/private/commerceの各フラグ、profile_url、および直近投稿の埋め込みプレビュー(recent_posts)を返します。アカウントはaccount_id(solari_tiktok_account_searchが返すTikTokアカウントのUUID)またはusername(TikTokハンドル)で指定してください。未追跡のハンドルは初回リクエスト時にライブ取得されます(10〜40秒かかります。レスポンスではfetched_on_demand=trueとなり、バックグラウンドのクロールが完了するまでは直近の投稿しか利用できません)。その上でnot-foundエラーが返る場合、そのハンドルはTikTokに存在しません。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — TikTokアカウントを掘り下げる際の最初の呼び出し。直近の投稿は埋め込みで返ります。 **何が返るか** — プロフィールの各フィールド、直近投稿のプレビュー、追跡状態。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — TikTokアカウントのaccount_id(SOLARIアカウントのUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — TikTokハンドル。先頭の@はあってもなくてもかまいません。account_idが指定されている場合は無視されます。 #### レスポンス ##### `Response` - `account_id` (uuid) — TikTokのaccount_id。 - `username / nickname / bio` (string) — ハンドル、表示名、bioのテキスト。 - `bio_links` (string[]) — bio内のリンク。 - `follower_count / following_count` (integer) — フォロワー数とフォロー数。 - `heart_count` (integer) — アカウント全体の累計いいね数。 - `video_count` (integer) — 公開した動画数。 - `is_verified / is_private` (boolean) — 認証と非公開のフラグ。 - `is_commerce_user / commerce_user_category` (boolean · string) — コマースの状態とカテゴリ。 - `region / language` (string | null) — リージョンコードと言語コード。 - `avatar_url / profile_url` (string) — アバターと公開プロフィールのリンク。 - `tracked` (boolean) — アカウントが定期クロールの対象かどうか。 - `sync_status` (string) — クロールの状態。 - `synced_at` (timestamp) — 最終クロール時刻。 - `recent_posts` (object[]) — 直近投稿のプレビュー。 - `fetched_on_demand` (boolean) — このリクエストが初めてそのアカウントを取り込んだ場合にtrue。 ##### `recent_posts[]` - `post_id` (uuid) — SOLARIのpost id。Instagramのpost idとは別の名前空間。 - `video_id` (string) — 公開されているTikTokの数値ID — /video/または/photo/以降の数字。 - `url` (string) — TikTokの公開パーマリンク。 - `account_id` (uuid) — 投稿者のTikTok account_id。 - `username` (string) — 投稿者のハンドル。 - `post_type` (string) — video(単一クリップ)またはcarousel(画像スライドショー)。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `caption` (string) — キャプションのテキスト。 - `duration_seconds` (integer) — 動画の長さ。 - `width / height` (integer) — 動画の解像度。 - `play_count` (integer) — 再生数。 - `like_count` (integer) — いいね数。 - `comment_count` (integer) — コメント数。 - `share_count` (integer) — シェア数。 - `collect_count` (integer) — 保存数。 - `is_ad` (boolean) — TikTokがその投稿を広告として扱っているかどうか。 - `is_pinned` (boolean) — プロフィール上部にピン留めされているか。 - `aigc_label_type` (string | null) — TikTokが付与した場合のAI生成コンテンツラベル。 - `original_language_code` (string | null) — 元の言語コード。 - `cover_url` (string) — カバー画像のURL。 - `video_url` (string) — 動画ファイルのURL。 - `images` (string[]) — カルーセルのスライド。video投稿では空。 - `hashtags` (string[]) — キャプションから抽出したハッシュタグ。 - `mentions` (string[]) — キャプション内でメンションされたハンドル。 - `transcript` (string | null) — 音声の文字起こし。include_transcript=trueのときのみ入ります。 #### 例 ```console $ solari tiktok account profile username=innisfree_official ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "nickname": "Innisfreeofficial", "bio": "NATURE MEETS KOREAN SKIN SCIENCE", "bio_links": [ "https://linktr.ee/innisfree_official" ], "follower_count": 143900, "following_count": 14, "heart_count": 2200000, "video_count": 767, "is_verified": true, "is_private": false, "is_commerce_user": true, "commerce_user_category": "Beauty", "region": "KR", "language": null, "avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-avt-0068/3f8e48dc4a284a8ead37e93175ebdb86~tplv-tiktokx-cropcenter:720:720.jpeg?dr=10399&refresh_token=04b90255&x-expires=1788541200&x-signature=Gd3gJu4HyBZPCr%2FqEevyDs6 …", "profile_url": "https://www.tiktok.com/@innisfree_official", "sync_status": "OK", "tracked": true, "synced_at": "2026-09-02T17:16:05.835000Z", "recent_posts": [ { "post_id": "01a0631e-f0df-7e9d-a09b-d84bc31d3834", "video_id": "7680375687139642645", "url": "https://www.tiktok.com/@innisfree_official/video/7680375687139642645", "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "post_type": "video", "posted_at": "2026-09-02T12:00:00Z", "caption": "Deeply hydrated skin—NO OFF HOURS. 💚 wherever the day takes MINGYU—his hydration stays SUPERCHARGED ⚡️ Green Tea Ceramide Milk: Lightweight milky toner that won't clog your pores Green Tea Ceramide Mist: Touch-free, fa …", "duration_seconds": 23, "width": 1080, "height": 1920, "play_count": 493, "like_count": 37, "comment_count": 2, "share_count": 0, "collect_count": 3, "is_ad": false, "is_pinned": false, "aigc_label_type": null, "original_language_code": null, "cover_url": "https://smr-images-a.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/cover.jpg", "video_url": "https://smr-images-a.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/origin.mp4", "images": [], "hashtags": [], "mentions": [], "transcript": null }, "… 5 more" ], "fetched_on_demand": false } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_account_profile", "arguments": { "username": "innisfree_official" } } ``` #### 注意点 - 未追跡のハンドルは初回リクエスト時にライブ取得されます。10〜40秒かかります。fetched_on_demand=trueがその印で、バックグラウンドのクロールが完了するまでは直近の投稿しか存在しません。 - その後にnot-foundエラーが返る場合、そのハンドルはTikTokに存在しません。 #### 関連ツール - [`solari_tiktok_account_posts`](https://solari.sh/docs/tools/tiktok-account-posts.md?lang=ja) - [`solari_tiktok_account_search`](https://solari.sh/docs/tools/tiktok-account-search.md?lang=ja) - [`solari_instagram_account_profile`](https://solari.sh/docs/tools/instagram-account-profile.md?lang=ja) ### solari tiktok account posts > 1つのTikTokアカウントの投稿を新しい順にページングします。 - **CLI**: `solari tiktok account posts` - **MCP ツール**: `solari_tiktok_account_posts` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 1つのTikTokアカウントの投稿を新しい順に返します。ページネーションとフィルタに対応。アカウントはaccount_id(solari_tiktok_account_searchが返すTikTokアカウントのUUID)またはusername(TikTokハンドル)で指定してください。各アイテムはpost_id(SOLARIの投稿UUID)、video_id(公開されている数値のTikTok id)とurl、post_type(videoまたはcarousel)、posted_at、caption、duration_seconds、play/like/comment/share/collectの各カウント、is_ad、cover_url、images(カルーセルのスライド)、hashtags、mentions、およびinclude_transcript=trueのときはtranscriptを持ちます。文字起こしは長いため、include_transcriptはデフォルトで無効。発話内容が重要な場合のみ有効にしてください。レスポンスはfound、account_id、username、total、has_more、itemsを含みます。limitとoffsetでページングし、since/until(UTCの日付、両端を含む)とpost_typeで絞り込みます。未追跡のハンドルは最初のリクエスト時にライブ取得されます(10〜40秒かかります)。fetched_on_demand=trueは、バックグラウンドのクロールが完了するまで直近の投稿のみ利用できることを示します。found=falseは、そのハンドルがTikTokに存在しないことを意味します。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — プロフィールのプレビューより深く掘り下げるとき、または期間とフォーマットで絞り込むとき。 **何が返るか** — 投稿。オプションで発話の文字起こしを含みます。 #### パラメータ - `account_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — TikTokアカウントのaccount_id(SOLARIアカウントUUID)。これかusernameのいずれかを指定してください。 - `username` (string, 任意, ≤ 64 chars) — TikTokハンドル。先頭の@はあってもなくてもかまいません。account_idが指定されている場合は無視されます。 - `limit` (integer, 任意, ≥ 1) — 1ページあたりの投稿数。デフォルトは12。200を超える値は200に上限で切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのオフセット。デフォルトは0。 - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 - `post_type` (enum, 任意) — このフォーマットの投稿のみ。videoは単一クリップ、carouselは画像のスライドショー。 値: `video`, `carousel`. - `include_transcript` (boolean, 任意, 既定値 false) — 各アイテムに発話の文字起こしを付けます。文字起こしは長いためデフォルトで無効。 #### レスポンス ##### `Response` - `found` (boolean) — falseは、そのハンドルがTikTokに存在しないことを意味します。 - `account_id / username` (string) — 解決されたアカウント。 - `total` (integer) — フィルタに一致した投稿数。 - `has_more` (boolean) — 次のページが存在するかどうか。 - `items` (object[]) — 投稿。新しい順。 - `fetched_on_demand` (boolean) — 現時点で直近の投稿のみ利用できる場合はtrue。 ##### `items[]` - `post_id` (uuid) — SOLARIの投稿id。Instagramの投稿idとは別の名前空間。 - `video_id` (string) — 公開されている数値のTikTok id。/video/または/photo/の後ろの数字。 - `url` (string) — TikTokの公開パーマリンク。 - `account_id` (uuid) — 投稿者のTikTok account_id。 - `username` (string) — 投稿者のハンドル。 - `post_type` (string) — video(単一クリップ)またはcarousel(画像のスライドショー)。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `caption` (string) — キャプションのテキスト。 - `duration_seconds` (integer) — 動画の長さ。 - `width / height` (integer) — 動画の解像度。 - `play_count` (integer) — 再生数。 - `like_count` (integer) — いいね数。 - `comment_count` (integer) — コメント数。 - `share_count` (integer) — シェア数。 - `collect_count` (integer) — 保存数。 - `is_ad` (boolean) — TikTokがその投稿を広告としてフラグ付けしているかどうか。 - `is_pinned` (boolean) — プロフィール上部に固定されているか。 - `aigc_label_type` (string | null) — TikTokが付与した場合のAI生成コンテンツラベル。 - `original_language_code` (string | null) — ソース言語のコード。 - `cover_url` (string) — カバー画像のURL。 - `video_url` (string) — 動画ファイルのURL。 - `images` (string[]) — カルーセルのスライド。video投稿では空。 - `hashtags` (string[]) — キャプションから抽出されたハッシュタグ。 - `mentions` (string[]) — キャプション内でメンションされたハンドル。 - `transcript` (string | null) — 発話の文字起こし。include_transcript=trueのときのみ入ります。 #### 例 ```console $ solari tiktok account posts username=innisfree_official limit=2 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "found": true, "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "total": 87, "has_more": true, "items": [ { "post_id": "01a0631e-f0df-7e9d-a09b-d84bc31d3834", "video_id": "7680375687139642645", "url": "https://www.tiktok.com/@innisfree_official/video/7680375687139642645", "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "post_type": "video", "posted_at": "2026-09-02T12:00:00Z", "caption": "Deeply hydrated skin—NO OFF HOURS. 💚 wherever the day takes MINGYU—his hydration stays SUPERCHARGED ⚡️ Green Tea Ceramide Milk: Lightweight milky toner that won't clog your pores Green Tea Ceramide Mist: Touch-free, fa …", "duration_seconds": 23, "width": 1080, "height": 1920, "play_count": 493, "like_count": 37, "comment_count": 2, "share_count": 0, "collect_count": 3, "is_ad": false, "is_pinned": false, "aigc_label_type": null, "original_language_code": null, "cover_url": "https://smr-images-b.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/cover.jpg", "video_url": "https://smr-images-a.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/origin.mp4", "images": [], "hashtags": [], "mentions": [], "transcript": null }, "… 1 more" ], "fetched_on_demand": false } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_account_posts", "arguments": { "username": "innisfree_official", "limit": 2 } } ``` #### 注意点 - 文字起こしは長いため、include_transcriptはデフォルトで無効。発話内容が重要な場合のみ有効にしてください。 - 1ページあたり最大200件。 #### 関連ツール - [`solari_tiktok_account_profile`](https://solari.sh/docs/tools/tiktok-account-profile.md?lang=ja) - [`solari_tiktok_content_detail`](https://solari.sh/docs/tools/tiktok-content-detail.md?lang=ja) - [`solari_instagram_account_posts`](https://solari.sh/docs/tools/instagram-account-posts.md?lang=ja) ### solari tiktok content detail > TikTok投稿1件の全情報。 - **CLI**: `solari tiktok content detail` - **MCP ツール**: `solari_tiktok_content_detail` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 TikTok投稿1件の詳細。solari_tiktok_account_postsのエントリと同じitem構造で返ります(文字起こしが存在する場合は含まれます)。投稿はpost_id(solari_tiktok_account_posts、solari_tiktok_content_search、solari_tiktok_account_profileが返すSOLARIのpost UUID)、video_id(公開されているTikTokの数値video id)、またはurl(vm.tiktok.comおよびvt.tiktok.comの短縮リンクを含む任意の公開TikTok投稿URL。アップストリームで解決される)で指定してください。未追跡のvideo_idまたはurlは初回リクエスト時にライブ取得され(10〜40秒かかる)、その場合はfetched_on_demand=trueとなります。投稿が存在しない、公開されていない、またはpost_idが未知の場合、itemはnull。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — post_id、video_id、または公開URLで単一の投稿を開くとき。 **何が返るか** — account-postsと同じ構造のitem1件。文字起こしが存在する場合は含まれます。 #### パラメータ - `post_id` (string, 任意, uuid, pattern ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$) — SOLARIのpost_id UUID。これ、video_id、urlのいずれかを指定してください。 - `video_id` (string, 任意, pattern ^\d{15,20}$) — 公開されているTikTokの数値video id。投稿URLの/video/または/photo/以降の数字。post_idが指定されている場合は無視されます。 - `url` (string, 任意, ≤ 512 chars) — https://www.tiktok.com/@/video/ のような公開TikTok投稿URL、またはvm.tiktok.com / vt.tiktok.comの短縮リンク。post_idまたはvideo_idが指定されている場合は無視されます。 #### レスポンス ##### `Response` - `item` (object | null) — 投稿。存在しないか公開されていない場合はnull。 - `fetched_on_demand` (boolean) — このリクエストが初めてその投稿を取り込んだ場合にtrue。 ##### `item` - `post_id` (uuid) — SOLARIのpost id。Instagramのpost idとは別の名前空間。 - `video_id` (string) — 公開されているTikTokの数値ID — /video/または/photo/以降の数字。 - `url` (string) — TikTokの公開パーマリンク。 - `account_id` (uuid) — 投稿者のTikTok account_id。 - `username` (string) — 投稿者のハンドル。 - `post_type` (string) — video(単一クリップ)またはcarousel(画像スライドショー)。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `caption` (string) — キャプションのテキスト。 - `duration_seconds` (integer) — 動画の長さ。 - `width / height` (integer) — 動画の解像度。 - `play_count` (integer) — 再生数。 - `like_count` (integer) — いいね数。 - `comment_count` (integer) — コメント数。 - `share_count` (integer) — シェア数。 - `collect_count` (integer) — 保存数。 - `is_ad` (boolean) — TikTokがその投稿を広告として扱っているかどうか。 - `is_pinned` (boolean) — プロフィール上部にピン留めされているか。 - `aigc_label_type` (string | null) — TikTokが付与した場合のAI生成コンテンツラベル。 - `original_language_code` (string | null) — 元の言語コード。 - `cover_url` (string) — カバー画像のURL。 - `video_url` (string) — 動画ファイルのURL。 - `images` (string[]) — カルーセルのスライド。video投稿では空。 - `hashtags` (string[]) — キャプションから抽出したハッシュタグ。 - `mentions` (string[]) — キャプション内でメンションされたハンドル。 - `transcript` (string | null) — 音声の文字起こし。include_transcript=trueのときのみ入ります。 #### 例 ```console $ solari tiktok content detail video_id=7680375687139642645 include_transcript=true ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "item": { "post_id": "01a0631e-f0df-7e9d-a09b-d84bc31d3834", "video_id": "7680375687139642645", "url": "https://www.tiktok.com/@innisfree_official/video/7680375687139642645", "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "post_type": "video", "posted_at": "2026-09-02T12:00:00Z", "caption": "Deeply hydrated skin—NO OFF HOURS. 💚 wherever the day takes MINGYU—his hydration stays SUPERCHARGED ⚡️ Green Tea Ceramide Milk: Lightweight milky toner that won't clog your pores Green Tea Ceramide Mist: Touch-free, fa …", "duration_seconds": 23, "width": 1080, "height": 1920, "play_count": 493, "like_count": 37, "comment_count": 2, "share_count": 0, "collect_count": 3, "is_ad": false, "is_pinned": false, "aigc_label_type": null, "original_language_code": null, "cover_url": "https://smr-images-b.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/cover.jpg", "video_url": "https://smr-images-c.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/origin.mp4", "images": [], "hashtags": [], "mentions": [], "transcript": null }, "fetched_on_demand": false } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_content_detail", "arguments": { "video_id": "7680375687139642645" } } ``` #### 注意点 - vm.tiktok.comとvt.tiktok.comの短縮リンクも受け付け、アップストリームで解決されます。 - 未追跡のvideo_idまたはURLは初回リクエスト時にライブ取得されます — 10〜40秒かかります。 #### 関連ツール - [`solari_tiktok_content_batch`](https://solari.sh/docs/tools/tiktok-content-batch.md?lang=ja) - [`solari_tiktok_account_posts`](https://solari.sh/docs/tools/tiktok-account-posts.md?lang=ja) ### solari tiktok content batch > 最大100件のTikTok投稿idを1回の呼び出しで取得します。 - **CLI**: `solari tiktok content batch` - **MCP ツール**: `solari_tiktok_content_batch` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 solari_tiktok_content_detailのバッチ版。SOLARIの投稿UUIDを指定して、最大100件のTikTok投稿を1回の呼び出しで取得します。アイテムの形はsolari_tiktok_account_postsのエントリと同じ。未追跡のidは省かれるため、foundはリクエストした数より少なくなることがあります。文字起こしは長いため、include_transcriptはデフォルトで無効。solari_tiktok_account_posts、solari_tiktok_content_search、solari_tiktok_account_profileから得たpost_idのリストを渡してください。TikTokのpost_idsはInstagramのpost_idsとは別。サインイン済みのSOLARIアカウントであれば利用できます。 **どんなときに使うか** — 検索やアカウント投稿から得たidリストを一括で開くとき。 **何が返るか** — リクエストしたidのうち見つかった投稿。 #### パラメータ - `post_ids` (uuid[], 必須, 1–100 items, uuid) — 取得するSOLARIの投稿UUID。1回の呼び出しにつき最大100件。TikTokの動画idではありません。 - `sort` (enum, 任意, 既定値 "recent") — アイテムの並び順。posted_atの降順(recent)またはエンゲージメントの降順。 値: `recent`, `engagement`. - `include_transcript` (boolean, 任意, 既定値 false) — 各アイテムに発話の文字起こしを付けます。文字起こしは長いためデフォルトで無効。 #### レスポンス ##### `Response` - `requested` (integer) — 送信されたidの件数。 - `found` (integer) — 解決できた件数。 - `items` (object[]) — 見つかった投稿。 ##### `items[]` - `post_id` (uuid) — SOLARIの投稿id。Instagramの投稿idとは別の名前空間。 - `video_id` (string) — 公開されている数値のTikTok id。/video/または/photo/の後ろの数字。 - `url` (string) — TikTokの公開パーマリンク。 - `account_id` (uuid) — 投稿者のTikTok account_id。 - `username` (string) — 投稿者のハンドル。 - `post_type` (string) — video(単一クリップ)またはcarousel(画像のスライドショー)。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `caption` (string) — キャプションのテキスト。 - `duration_seconds` (integer) — 動画の長さ。 - `width / height` (integer) — 動画の解像度。 - `play_count` (integer) — 再生数。 - `like_count` (integer) — いいね数。 - `comment_count` (integer) — コメント数。 - `share_count` (integer) — シェア数。 - `collect_count` (integer) — 保存数。 - `is_ad` (boolean) — TikTokがその投稿を広告としてフラグ付けしているかどうか。 - `is_pinned` (boolean) — プロフィール上部に固定されているか。 - `aigc_label_type` (string | null) — TikTokが付与した場合のAI生成コンテンツラベル。 - `original_language_code` (string | null) — ソース言語のコード。 - `cover_url` (string) — カバー画像のURL。 - `video_url` (string) — 動画ファイルのURL。 - `images` (string[]) — カルーセルのスライド。video投稿では空。 - `hashtags` (string[]) — キャプションから抽出されたハッシュタグ。 - `mentions` (string[]) — キャプション内でメンションされたハンドル。 - `transcript` (string | null) — 発話の文字起こし。include_transcript=trueのときのみ入ります。 #### 例 ```console $ solari tiktok content batch post_ids='["01a0631e-f0df-7e9d-a09b-d84bc31d3834"]' ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "requested": 1, "found": 1, "items": [ { "post_id": "01a0631e-f0df-7e9d-a09b-d84bc31d3834", "video_id": "7680375687139642645", "url": "https://www.tiktok.com/@innisfree_official/video/7680375687139642645", "account_id": "019b2137-f76e-7b33-9437-26044fa7b1ed", "username": "innisfree_official", "post_type": "video", "posted_at": "2026-09-02T12:00:00Z", "caption": "Deeply hydrated skin—NO OFF HOURS. 💚 wherever the day takes MINGYU—his hydration stays SUPERCHARGED ⚡️ Green Tea Ceramide Milk: Lightweight milky toner that won't clog your pores Green Tea Ceramide Mist: Touch-free, fa …", "duration_seconds": 23, "width": 1080, "height": 1920, "play_count": 493, "like_count": 37, "comment_count": 2, "share_count": 0, "collect_count": 3, "is_ad": false, "is_pinned": false, "aigc_label_type": null, "original_language_code": null, "cover_url": "https://smr-images-b.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/cover.jpg", "video_url": "https://smr-images-b.bzine.co/tiktok/users/019b2137-f76e-7b33-9437-26044fa7b1ed/posts/01a0631e-f0df-7e9d-a09b-d84bc31d3834/medias/origin.mp4", "images": [], "hashtags": [], "mentions": [], "transcript": null } ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_content_batch", "arguments": { "post_ids": [ "01a0631e-f0df-7e9d-a09b-d84bc31d3834" ] } } ``` #### 注意点 - 受け付けるのはSOLARIの投稿UUIDのみ。数値のTikTok動画idはここには渡さないでください。それはcontent detailにvideo_idとして渡してください。 - TikTokの投稿idとInstagramの投稿idは別の名前空間。 #### 関連ツール - [`solari_tiktok_content_detail`](https://solari.sh/docs/tools/tiktok-content-detail.md?lang=ja) - [`solari_tiktok_content_search`](https://solari.sh/docs/tools/tiktok-content-search.md?lang=ja) ### solari tiktok content search > TikTokのキャプションと動画の文字起こしを横断するキーワード検索。 - **CLI**: `solari tiktok content search` - **MCP ツール**: `solari_tiktok_content_search` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中のTikTok投稿に対する字句キーワード検索。キャプションと動画の文字起こしに照合し(韓国語対応の解析とn-gramによる部分一致)、関連度順にランク付けしてマッチ箇所のハイライトを返します。各itemはpost_id、video_id、url、投稿者のaccount_id/username、caption、transcription_text、post_type、posted_at、play/like/comment/share/collectの各カウント、follower_count、duration_seconds、is_ad、cover_url、score、highlightを持ちます。post_idはsolari_tiktok_content_detailまたはsolari_tiktok_content_batchに、アカウントの参照はsolari_tiktok_account_*系のツールに渡してください。カバー範囲はKR、JP、US、TWの各リージョンのみで、およそ直近6か月の投稿を保持します。totalは10,000までは正確で、そこで頭打ちになります。since/until(UTC日付)で絞り込みます。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — トピック、または実際に画面で話されている内容からTikTok投稿を探すとき。 **何が返るか** — 関連度順のヒット。ハイライトと文字起こしのテキストを含みます。 #### パラメータ - `query` (string, 必須) — キャプションと動画の文字起こしに対して照合するフリーテキストのキーワードクエリ。 - `region` (enum, 任意, 既定値 "KR") — 検索対象のリージョン。インデックスがあるのはこの4リージョンのみ。 値: `KR`, `JP`, `US`, `TW`. - `limit` (integer, 任意, ≥ 1) — 返すヒットの最大数。デフォルトは20。100を超える値は100に切り詰められます。 - `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのoffset。デフォルトは0。9800を超える値は9800に切り詰められます。 - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。約6か月より古いデータはインデックスされていません。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。 #### レスポンス ##### `Response` - `query / region` (string) — 適用されたqueryとregion。 - `total` (integer) — 一致した総数。10,000までは正確で、それ以降は頭打ちになります。 - `took_ms` (integer) — 検索にかかった時間。 - `items` (object[]) — ヒット。score降順。 ##### `items[]` - `post_id / video_id / url` (string) — 投稿の各種IDと公開リンク。 - `account_id / username` (string) — 投稿したアカウント。 - `caption` (string) — キャプションのテキスト。 - `user_bio` (string) — 投稿者のbio。 - `transcription_text` (string | null) — 音声の文字起こし — 検索対象テキストの一部。 - `transcription_language` (string | null) — 文字起こしの言語コード。 - `post_type` (string) — videoまたはcarousel。 - `posted_at` (timestamp) — 投稿日時(UTC)。 - `duration_seconds` (integer) — 動画の長さ。 - `play_count / like_count / comment_count / share_count / collect_count` (integer) — エンゲージメントのスナップショット。 - `follower_count` (integer) — 投稿者のフォロワー数。 - `is_ad` (boolean) — TikTok自身の広告フラグ。 - `cover_url` (string) — カバー画像。 - `score` (number) — 関連度スコア。 - `highlight` (object) — フィールドごとの一致した断片。 #### 例 ```console $ solari tiktok content search query="올리브영 세일" limit=3 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "query": "올리브영 세일", "region": "KR", "total": 4041, "took_ms": 29, "items": [ { "post_id": "01a05c46-9a08-7e92-a40e-b1a039103118", "video_id": "7679484556189207815", "url": "https://www.tiktok.com/@flos_bonita/video/7679484556189207815", "account_id": "0196cb39-87a7-7be3-ac4a-4a80b7818a90", "username": "flos_bonita", "caption": "태닝한 산리오 키링이라니…☀️🥹💗 푸드올로지 X 산리오 콜라보 실물 너무 귀엽잖아!! 헬로키티·쿠로미·한교동·마이멜로디까지🎀 제품마다 다른 키링이라 산리오 덕후들 취향 제대로 저격💘 올영 세일 시작했으니 얼른 구경해봐요👀🛒 #푸드올로지 #태닝키티 #올리브영추천템 #올영세일", "user_bio": "화미 프로필 링크", "transcription_text": "살리오 덕후라면 절대 그냥 넘길 수 없는 영상 오늘부터 시작인 올리브영 세일과 함께 푸드올로지와 살리오 콜라보 나왔어요 이번 콜라보는 젤리 폼 앰플 젤리 3 종으로 피디아렌 앰플 젤리 글루타치원 씨 앰플 젤리 히알루론산 앰플 젤리까지 제품마다 귀여운 살리오 굿즈도 함께 만나 볼 수 있는데 헬로키티 크로미 한교동부터 마이 멜로디까지 저는 역시 헬로키티 더 쿠답게 키티 키링으로 폼구 최애 캐릭터 …", "transcription_language": "ko", "post_type": "video", "posted_at": "2026-08-29T16:02:22Z", "duration_seconds": 37, "play_count": 955, "like_count": 26, "comment_count": 0, "share_count": 0, "collect_count": 5, "follower_count": 1345, "is_ad": true, "cover_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-alisg-p-0037/oEu4VAolaEBAAYjMAjBtiyCIAABiPp9TOCAME~tplv-tiktokx-origin.image?dr=10395&x-expires=1788426000&x-signature=FAP0C10M1M1gEwD4YMB03pYd0YA%3D&t=4d5b0474&ps=13740610&sh …", "score": 53.787056, "highlight": { "caption": [ "헬로키티·쿠로미·한교동·마이멜로디까지🎀 제품마다 다른 키링이라 산리오 덕후들 취향 제대로 저격💘 올 세일 시작했으니 얼른 구경해봐요👀🛒 #푸드올로지 #태닝키티 #올리브영추천템 #올영세일" ], "user_bio": [], "transcription_text": [ "살리오 덕후라면 절대 그냥 넘길 수 없는 영상 오늘부터 시작인 올리브 세일과 함께 푸드올로지와 살리오 콜라보 나왔어요 이번 콜라보는 젤리 폼 앰플 젤리 3 종으로 피디아렌 앰플 젤리 글루타치원 씨 앰플 젤리 히알루론산 앰플 젤리까지 제품마다 귀여운 살리오 굿즈도 함께", "… 1 more" ] } }, "… 2 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_content_search", "arguments": { "query": "올리브영 세일", "limit": 3 } } ``` #### 注意点 - インデックスの対象はKR、JP、US、TWで、範囲はおよそ直近6か月。 - offsetは9,800で切り詰められます。それより深く辿るには、日付範囲を狭めて再検索してください。 - totalは10,000までは正確で、そこで止まります。 #### 関連ツール - [`solari_tiktok_content_aggregate`](https://solari.sh/docs/tools/tiktok-content-aggregate.md?lang=ja) - [`solari_tiktok_content_batch`](https://solari.sh/docs/tools/tiktok-content-batch.md?lang=ja) - [`solari_instagram_content_search`](https://solari.sh/docs/tools/instagram-content-search.md?lang=ja) ### solari tiktok content aggregate > TikTok 投稿を列挙せずに集計します。 - **CLI**: `solari tiktok content aggregate` - **MCP ツール**: `solari_tiktok_content_aggregate` - **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。 追跡中の TikTok 投稿に対する件数とエンゲージメントの集計。個別の投稿ではなく数値で答える問いにお使いください。アカウントごとの月間投稿数、あるトピックで優勢なハッシュタグ、フォーマット別の平均再生数など。account、post_type、hashtag、mention、caption_keyword でグループ化し、さらに各グループを day、week、month で分割できます。post_count は常に返ります。metrics を指定すると like/comment/view/share/collect の合計と平均 (view_* 系の指標は再生数を数える)、フォロワー数の平均、ユニークアカウント数が返ります。フリーテキストの query (キャプションと動画の文字起こしが対象)、usernames、hashtags、mentions、post_types (video、carousel) で対象を絞り込みます。mentions で絞り込み account でグループ化すると、特定のハンドルをタグ付けしたアカウントが分かります。カバー範囲は KR、JP、US、TW のリージョンで、おおよそ直近 6 か月分を保持します。それより古い since は切り詰められ、適用された値がレスポンスに返されます。バケットは大きい順。truncated=true は limit で返した数より多くのグループが存在したことを意味します。件数ではなく投稿そのものが必要な場合は solari_tiktok_content_search をお使いください。サインイン済みの SOLARI アカウントであれば利用できます。 **どんなときに使うか** — 数値で答える問い。アカウントごとの投稿頻度、トピック内のハッシュタグ分布、フォーマット別の平均再生数など。 **何が返るか** — グループごとの件数とエンゲージメント集計。大きいグループ順。 #### パラメータ - `region` (enum, 任意, 既定値 "KR") — 集計対象のリージョン。インデックスされているのはこの 4 リージョンのみ。 値: `KR`, `JP`, `US`, `TW`. - `group_by` (enum, 任意) — グループ化する軸。省略すると、絞り込んだ集合全体を 1 つの合計バケットに集計します。 値: `account`, `post_type`, `hashtag`, `mention`, `caption_keyword`. - `interval` (enum, 任意) — 分割するカレンダー間隔。単独で指定すると期間ごとに 1 バケットを返し、group_by と組み合わせると各グループが時系列を持ちます。 値: `day`, `week`, `month`. - `metrics` (string[], 任意) — 常に返る post_count に加えて取得する指標。view_* 系の指標は再生数を数えます。指標値はスナップショットであり、リアルタイムの数値より遅れることがあります。 値: `like_sum`, `like_avg`, `comment_sum`, `comment_avg`, `view_sum`, `view_avg`, `share_sum`, `share_avg`, `collect_sum`, `collect_avg`, `follower_avg`, `account_count`. - `query` (string, 任意) — キャプションと動画の文字起こしに対して照合するフリーテキストのフィルタ。 - `usernames` (string[], 任意) — これらの TikTok ハンドルに限定します。 - `hashtags` (string[], 任意) — これらのハッシュタグをすべて含む投稿に限定します。 - `mentions` (string[], 任意) — これらのハンドルをすべてタグ付けしている投稿に限定します。group_by=account と組み合わせると、特定のハンドルをタグ付けしているアカウントをランキングできます。 - `post_types` (string[], 任意) — これらの投稿フォーマットに限定します。 値: `video`, `carousel`. - `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — この UTC 日付以降の投稿のみ。YYYY-MM-DD 形式で当日を含みます。デフォルトは 183 日前で、これが受け付ける最も古い境界でもあります。 - `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — この UTC 日付以前の投稿のみ。YYYY-MM-DD 形式で当日を含みます。 - `limit` (integer, 任意, ≥ 1) — group_by を指定したときに返るグループの最大数、デフォルトは 20。50 を超える値は上限の 50 に切り詰められます。 #### レスポンス ##### `Response` - `region` (string) — 集計を実行したリージョン。 - `since` (date) — 実際に適用された開始日。保持期間より古いリクエストは切り詰められ、その値がここに返されます。 - `until` (date | null) — 実際に適用された終了日。 - `group_by` (string | null) — 適用されたグループ化の軸。 - `interval` (string | null) — 適用されたカレンダー間隔。 - `total_posts` (integer) — フィルタに一致した投稿数。グループが重複する場合、バケット件数の合計と一致しないことがあります。 - `truncated` (boolean) — limit で返した数より多くのグループが存在した場合に true。 - `buckets` (object[]) — グループごとに 1 エントリ。大きい順。 ##### `buckets[]` - `key` (string) — グループの値。ハンドル、ハッシュタグ、フォーマットなど。group_by を省略した場合は合計バケット 1 つになります。 - `metrics.post_count` (integer) — 投稿数。常に返ります。 - `metrics.like_sum / like_avg` (number | null) — いいねの合計と平均。metrics で要求した場合のみ。 - `metrics.comment_sum / comment_avg` (number | null) — コメントの合計と平均。 - `metrics.view_sum / view_avg` (number | null) — 再生数の合計と平均。 - `metrics.share_sum / collect_sum` (number | null) — シェアと保存の合計、および対応する _avg 版。 - `metrics.follower_avg` (number | null) — 投稿したアカウントのフォロワー数の平均。 - `metrics.account_count` (integer | null) — グループ内のユニークアカウント数。 - `series` (object[] | null) — 期間ごとの内訳。interval を指定した場合に含まれます。 #### 例 ```console $ solari tiktok content aggregate group_by=account query="이니스프리" metrics='["view_sum","like_avg","account_count"]' limit=5 ``` _読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_ ```json { "region": "KR", "since": "2026-03-04", "until": null, "group_by": "account", "interval": null, "total_posts": 20, "truncated": true, "buckets": [ { "key": "merryview_", "metrics": { "post_count": 2, "like_sum": null, "like_avg": 2378.5, "comment_sum": null, "comment_avg": null, "view_sum": 179504, "view_avg": null, "share_sum": null, "share_avg": null, "collect_sum": null, "collect_avg": null, "follower_avg": null, "account_count": 1 }, "series": null }, { "key": "_kimdayun_", "metrics": { "post_count": 1, "like_sum": null, "like_avg": 1829, "comment_sum": null, "comment_avg": null, "view_sum": 102000, "view_avg": null, "share_sum": null, "share_avg": null, "collect_sum": null, "collect_avg": null, "follower_avg": null, "account_count": 1 }, "series": null }, "… 3 more" ] } ``` #### MCP 呼び出しとして ```json { "name": "solari_tiktok_content_aggregate", "arguments": { "group_by": "account", "query": "이니스프리", "metrics": [ "view_sum", "like_avg", "account_count" ], "limit": 5 } } ``` #### 注意点 - view_* 系の指標は再生数を数えます。 - Instagram 版と違い、share_* と collect_* には実際に値が入ります。また transcription_keyword によるグループ化はありません。 - インデックスは KR、JP、US、TW をおおよそ直近 6 か月分カバーします。since の下限は 183 日前。それより古い値は切り詰められ、適用値が返されます。 #### 関連ツール - [`solari_tiktok_content_search`](https://solari.sh/docs/tools/tiktok-content-search.md?lang=ja) - [`solari_instagram_content_aggregate`](https://solari.sh/docs/tools/instagram-content-aggregate.md?lang=ja)