Trendzeist – Google Trends for content ideation について
trendzeist-mcpは、コンテンツ企画向けのGoogle Trends MCPサーバーです。Google Autocomplete、Google News、Wikipediaの情報を組み合わせ、テーマや検索質問、需要の変化を順位付けしてローカルに記録します。
主な機能
- 01急上昇・上昇・定番テーマの順位付け
- 02ロングテール質問とAEO機会の抽出
- 03キーワード・チャネル・地域需要の比較
- 04季節性とトレンド変化の追跡
- 05結果のキャッシュとローカル記録
活用シーン
- 01ブログのテーマやタイトル案の企画
- 02FAQ向けのユーザー質問の発見
- 03コンテンツの不足箇所の特定と更新計画
MCP 対応
Google Trendsと関連ソースのデータを、ツールとプロンプトとしてMCPクライアントに提供します。テーマ発見、質問抽出、トレンド比較、コンテンツ概要の作成に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx trendzeist-mcpTRENDZEIST_HLGoogle Trends UI language, e.g. en-US or pt-BR.TRENDZEIST_MIN_INTERVALMinimum seconds between requests to Google (rate-limit protection).TRENDZEIST_PROXIESシークレットOptional comma-separated proxy URLs for rotation.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| geo | string | いいえ | |
| gprop | string | いいえ | |
| category | integer | いいえ | |
| keywords | array | はい | |
| timeframe | string | いいえ |
詳細
trendzeist-mcp
Google Trends を次のブログ記事 10 本に活用しましょう。たった 1 回の呼び出しで実現できます。
trendzeist-mcp は、AI アシスタントに評価順の 急上昇/上昇中/定番トピック、実際に人々が尋ねている質問、トレンド、ニュースの報道状況、Wikipedia での掲載状況、引用されやすさのヒントをもとに質問クラスターを評価する AEO の機会発見ツールに加え、関心の推移、地域ごとの需要、リアルタイムのトレンド、Google ニュースでそのトピックを取り上げているメディア、Wikipedia での注目度を提供します。無料で、ローカル環境で動作し、プライベートです。API キー、アカウント、ブラウザーは不要です。
*SEO と AEO:*人々が尋ね、回答エンジンが回答する質問を見つけ、それに答えて、引用元として選ばれるサイトを目指しましょう。ChatGPT/Perplexity/AI Overviews 内での自サイトの可視性を測定することは 対象外です。このサーバーが示すのは 何を書くかであり、誰が引用するかではありません。
You: Give me blog post ideas about home espresso for US readers.
Agent: → discover_topics(["espresso", "espresso machine"], geo="US")
← 1 breakout, 14 rising, 14 evergreen candidates with growth %, angles and 6 questions
→ mine_questions("espresso machine", geo="US")
← 30 long-tail questions: how-to 18, comparison 6, definition 4, listicle 2
→ compare_keywords(["how to descale espresso machine", "best coffee beans for espresso"])
← "Interest in 'how to descale espresso machine' rose 120% ... peaking 2026-08-30 (rising)."
"1. How to Descale Your Espresso Machine (how-to, rising +120%, publish now) ..."
使用技術
trendzeist-mcp は、すべての Google Trends リクエストを処理する pytrends-modern 上に構築された薄い MCP レイヤーです。Trendzeist は MCP ツールとプロンプト、リクエストのスロットリング、永続的なディスクキャッシュ、厳格な入力検証、LLM に適した JSON 出力、評価順の discover_topics ワークフローを追加します。その他のランタイム依存関係は、mcp(公式 MCP Python SDK)、pandas、platformdirs、requests です。すべて MIT/BSD/Apache ライセンスです。Google Autocomplete、Google News RSS、Wikimedia REST API には、requests を使って直接アクセスします(API キー不要)。
クイックスタート
# any one of these
uvx trendzeist-mcp
pipx run trendzeist-mcp
pip install trendzeist-mcp && trendzeist-mcp
docker run -i --rm ghcr.io/phalkmin/trendzeist-mcp
Claude Desktop — claude_desktop_config.json の mcpServers の下に追加します
(macOS ~/Library/Application Support/Claude/、Windows %APPDATA%\Claude\、Linux ~/.config/Claude/):
"trendzeist": { "command": "uvx", "args": ["trendzeist-mcp"] }
Claude Code: claude mcp add trendzeist -- uvx trendzeist-mcp
Cursor/VS Code/Codex: 同じ command/args の形式です。llms-install.md を参照してください
(AI アシスタントに貼り付けて、インストールを実行させられるように記述されています)。
ツール
| ツール | 得られる情報 |
|---|---|
discover_topics | 1〜5 個のシードから、ブレイクアウト > 上昇中 > エバーグリーンの順にランク付けしたブログトピックを、重複を除いて取得します。それぞれにタイトルの angle と、根拠を説明できる score が付きます。また、ユーザーが尋ねる questions[] と、スパムのような上昇中のクエリとしてランキングから除外された suspect[] も取得します。site_queries(自サイトがすでにランクインしているクエリ)を渡すと、各トピックに covered / partial / gap のいずれかが付与されます |
mine_questions | Google Autocomplete からシードに関するロングテールの質問(how to、why、what is、vs など)を取得し、重複を除いてアングルをタグ付けします。FAQ/AEO の材料になります |
aeo_opportunities | シード × アングルごとの質問クラスターをスコア付けします。シードの最近のトレンド(12 か月間の direction_now、growth_3m)、Google ニュースでの掲載状況(引用先/提案先のパブリッシャー)、Wikipedia への掲載、自サイトでのカバー状況(site_queries)、引用されやすさのヒントが含まれます。1 回の呼び出しで取得でき、ソースごとの部分的な失敗にも対応します |
what_changed | 前回のスナップショットから何が変化したかを取得します(1〜90 日)。新規および昇格したブレイクアウト(今すぐ調査)、新たな上昇中のクエリ(検討)、勢いが弱まった/消えたクエリ(既存の投稿を更新、または確認。削除する前に interest_over_time で検証してください)、順位の変動、direction_now の反転を、ローカルの観測アーカイブから取得します |
seasonality | 需要が毎年いつピークを迎えるかを取得します(週ごとの 5 年分のデータ)。peak_months、seasonal_strength、next_peak、publish_by(6 週間前)、1 文の insight が含まれます |
compare_channels | トピックがどのチャネルで成長しているかを取得します。Web/YouTube/ニュース/画像/ショッピングの growth_3m、direction_now、fastest_channel、momentum(成長中/横ばい/すべて下降中)と、format_hint(動画チュートリアル、購入ガイド、ニュースに便乗した記事など)が含まれます |
trend_history | キーワードについてローカルアーカイブが記録したすべての情報を取得します。first_seen、breakout_episodes(個別の発生回。再発する場合は、持続性のあるページの候補)と breakout_observations(ポーリング回数)、期間ごとの direction_timeline、seen_under_seeds が含まれます。無料で、リクエストは発生しません |
news_coverage | Google ニュースでそのトピックを取り上げている媒体を取得します。見出し、パブリッシャーの頻度表、掲載時期のヒストグラム、掲載状況ラベルが含まれます |
wiki_attention | 完全一致タイトルの Wikipedia 記事と、日別のページビュー(方向、成長)を取得します。別の検索結果しか見つからない場合は has_article=false となり、任意で related_article も返されます |
trendzeist_status | すべてのソースの健全性(稼働中/エラー/アイドル)、キャッシュの使用状況、観測アーカイブ(行数、日付、最終エラー)、有効な設定を取得します。無料で、リクエストは発生しません |
interest_over_time | 平均、ピーク、direction(期間全体)、direction_now(最近の傾向)、growth_3m/growth_12m、平易な英語での insight を含む、0〜100 の関心度推移を取得します |
compare_keywords | 2〜5 個のキーワードについて、直接比較したシェアと勝者を取得します |
related_queries | ブレイクアウトのフラグ、アングル、questions[] を含む、関連検索の上位クエリと上昇中のクエリを取得します |
related_topics | ナレッジグラフのトピックの上位項目と上昇中の項目を取得します(ベストエフォート) |
interest_by_region | 需要がどこにあるかを取得します。COUNTRY(世界全体)、REGION(国内の地域)、CITY/DMA(米国または世界全体)を指定できます |
suggest_keywords | 用語を Google エンティティ(タイトル、種類、mid)に照らして曖昧さを解消します |
trending_now | ニュースの見出しとともに、現在トレンドになっているものを取得します。topic_filter を指定すると、指定した語句を含むトレンドだけに絞り込めます |
list_categories | 任意のクエリを絞り込むための、Google Trends のカテゴリ ID を検索します |
プロンプト:blog_ideas_from_trends(topic, audience, geo)(ガイド付きのアイデア創出)、
content_brief(topic, audience, geo)(タイトル、アウトライン、FAQ、地域、パブリッシャー)、
answer_brief(question, geo)(引用可能な回答:直接的な回答、統計、引用、出典、
FAQ、スキーマ)、weekly_review(seeds, geo, site_queries)(コンテンツ会議:今すぐ公開/
日付を決めて計画/更新/削除)。すぐに使えるエージェントスキルは SKILL.md にあります。
出力の規則
- すべての結果には、
schema_version(現在は3。フィールドが削除された場合、または意味が変わった場合にのみ更新されます)と、その呼び出しでのrequests_made、cache_hit、cache_hits、cache_missesを含む_metaが付与されます。これにより、モデルは処理を遅くするタイミングを判断できます。_meta.archive_errorは、ローカルアーカイブに書き込めなかった場合にのみ表示されます(ツールの結果には影響しません)。 - 説明可能なスコア。
discover_topics.topics[]とaeo_opportunities.opportunities[]には、score(0~100)と、5つの要素を含むscore_breakdownが付与されます。各要素は{points, max, reason}の形式です。demandは25(見つかった質問または上位クエリの人気度)、momentumは25(direction_now+急上昇/上昇)、freshnessは15(Google ニュース。取得されていない場合は0)、gapは20(site_queriesとの比較:ギャップは20/部分的は10/網羅済みは0。データがない場合は中立の10)、aeoは15(質問形式。Wikipediaの記事がない定義の切り口)です。スコアは同じ呼び出し内でのみ比較してください。 - 観測アーカイブ。 関連クエリ、トレンドラベル、急上昇検索、抽出した質問の新しい取得(キャッシュヒットを除く)はそれぞれ1つのスナップショットになります(一意のIDを付与。Googleの回答が空でもスナップショットになります)。正規化された行は、ディスクキャッシュの隣にある
archive.sqlite3に保存されます(標準ライブラリのsqlite3を使用し、保持期間は365日、必要時に遅延オープンします)。関連クエリのスナップショットには、呼び出し元のlimitにかかわらず完全なリストが保存されるため、比較時に減少を誤って検出することはありません。what_changedとtrend_historyはこのアーカイブを読み取り、trendzeist_status.archiveで状態を報告します。急上昇が疑われるクエリはアーカイブに保存されません。アーカイブのエラーでツールが失敗することはありません。TRENDZEIST_ARCHIVE=0で無効にできます。 - サイトの網羅状況は慎重に判定します。
aeo_opportunitiesのクラスタは、含まれるすべての質問が網羅されている場合にのみcoveredになります。一部のみの場合はpartialです(coverage_countsを参照)。そのため、exclude_coveredによって未回答の質問が隠されることはありません。 angleはhow-to | comparison | listicle | definition | news(またはnull)のいずれかで、クエリから推奨されるタイトル形式を示します。根拠と組み合わせてください。how-toなら手順+数値、comparisonなら表+引用、definitionなら一次ソースの引用、newsなら日付入りの発行元引用です。- 暗黙に調整された内容はすべて報告されます。上限を超えたために値を制限した場合は
noteを、結果が空の場合はreasonを追加します。 - 2種類のトレンドラベル。
directionは期間の最初と最後の3分の1を比較します(rising | falling | stable | new | no_interest | insufficient_data。newは、最初の3分の1で関心がなかったことを示します)。direction_nowは期間の最後の4分の1をその前の4分の1と比較し、「今も伸び続けているか」を示します。期間の途中でピークに達したトピックは、direction: rising(またはnew)、direction_now: fallingとなり、insightの文でその旨が説明されます。複合ツール(discover_topics、aeo_opportunities)は常にtoday 12-mでシードトレンドを取得し(query.trend_timeframeに記録)、direction_nowに基づいてスコアを付けます。 - 急上昇が疑われるクエリ。 検索操作キャンペーンでは、無関係な多数の「Breakout」クエリに同じ名称が付けられます。
related_queriesは該当項目にsuspect: trueとsuspect_reasonを設定し、discover_topicsはそれらをsuspect[]に移し、aeo_opportunitiesは無視します。Googleのis_breakout値はそのまま保持され、変わるのは信頼性だけです。 citability_hints(aeo_opportunities内)はGEO論文(Aggarwal et al., KDD 2024)の知見を反映しています。出典の引用、引用文、統計データはいずれもAIエンジンでの可視性を30~40%高めましたが、キーワードの詰め込みには効果がありませんでした。- 言語は市場に合わせます。
TRENDZEIST_HLが未設定の場合、geo="BR"ではGoogleにhl=pt-BRを指定してクエリを送信します(約50か国がマッピングされています)。そのため、関連クエリはポルトガル語で返されます。有効な言語はquery.hlに記録されます。Google ニュースは、TRENDZEIST_HLでトレンドUIの言語を固定していても、常に市場にマッピングされたエディション(例:BR:pt)を使用します。 - オーソリティチャネル: 任意の探索ツールに
gprop="news"またはgprop="youtube"を渡すと、ニュース媒体や動画視聴者が検索している内容を確認できます。これらは回答エンジンが最も多く引用する情報源です。gprop="images"と"froogle"(ショッピング)も使用できます。
これを選ぶ理由
| trendzeist-mcp | 一般的な代替ツール | |
|---|---|---|
| ランク付けされたトピックを1回の呼び出しで発見 | ✅ discover_topics | ❌ 基本機能のみ |
| アイデア出しをガイドするプロンプト | ✅ blog_ideas_from_trends | ❌ |
| 複数の情報源を利用、キー不要 | ✅ Trends + Autocomplete + News + Wikipedia | 単一の情報源、または有料アグリゲーター |
| いつ、何に価値があるかを把握 | ✅ what_changed、seasonality、compare_channels、site_queries のギャップ | ❌ データのみで、編集上の解釈なし |
| 関連クエリと急上昇の検出 | ✅ | ホスト型/有料サーバーでは欠けていることが多い |
| コスト/認証 | 無料、不要 | API キー、月間上限 |
| ブラウザーが必要 | いいえ | 一部の Python ライブラリでは Chrome が必要 |
| クライアントの再起動後もキャッシュを保持 | ✅ 安全な JSON ディスクキャッシュ | 通常はメモリー内のみ、またはなし |
| レート制限に配慮 | ✅ HTTP リクエストごとに間隔を調整 | ❌ 短時間の大量リクエスト、頻繁な 429 エラー |
ソースから実行
git clone https://github.com/phalkmin/trendzeist-mcp && cd trendzeist-mcp
uv sync --group dev
uv run pytest -q # offline tests
uv run pytest -q -m live # optional: live canary against Google
uv run trendzeist-mcp # stdio server
npx @modelcontextprotocol/inspector uv run trendzeist-mcp # interactive debugging
次のようにして、クローンしたリポジトリをクライアントに指定します。
"command": "uv", "args": ["--directory", "/path/to/trendzeist-mcp", "run", "trendzeist-mcp"]。
設定(環境変数)
| 変数 | デフォルト | 意味 |
|---|---|---|
TRENDZEIST_HL | (未設定 → geo に従う) | Trends/Autocomplete の UI 言語を固定します(例:en-US)。Google News は独立して国別版を使用します。未設定の場合、言語は geo に従います(BR → pt-BR、不明な場合 → en-US) |
TRENDZEIST_TZ | 360 | タイムゾーンのオフセット(分) |
TRENDZEIST_MIN_INTERVAL | 2.0 | Google のホストへの各 HTTP リクエスト(Trends の Cookie/トークン/データ、RSS、Autocomplete、News)の最小間隔(秒) |
TRENDZEIST_WIKI_MIN_INTERVAL | 0.5 | Wikimedia へのリクエストの最小間隔(秒。Google とは別のレーン) |
TRENDZEIST_EXPLORE_TTL | 900 | Trends の探索、News の検索結果をキャッシュする秒数 |
TRENDZEIST_RSS_TTL | 300 | トレンド RSS フィードをキャッシュする秒数 |
TRENDZEIST_STATIC_TTL | 86400 | カテゴリー、候補、Autocomplete、Wikipedia をキャッシュする秒数 |
TRENDZEIST_MAX_MEMORY_ENTRIES | 256 | メモリー内のキャッシュエントリー数(ディスク上のキャッシュには上限がなく、期限切れ時に整理されます) |
TRENDZEIST_MAX_SERIES_POINTS | 60 | 関心度の曲線を、この数以下のポイントにダウンサンプリングします(正の整数) |
TRENDZEIST_RETRIES | 3 | 一時的なエラー発生時の再試行回数 |
TRENDZEIST_BACKOFF | 1.5 | 指数バックオフ係数 |
TRENDZEIST_PROXIES | — | カンマ区切りのプロキシ URL。探索呼び出しではリクエストごとにローテーションされます。RSS、Autocomplete、News、Wikipedia では常に最初のプロキシが使用されます |
TRENDZEIST_CACHE_DIR | OS のユーザーキャッシュディレクトリ | 永続 JSON キャッシュの保存場所(0700)。無効にするには off を指定します(アーカイブも無効になります) |
TRENDZEIST_ARCHIVE | 1 | 観測アーカイブを無効にするには 0 を指定します(その場合、what_changed/trend_history は available: false を報告します) |
TRENDZEIST_ARCHIVE_DAYS | 365 | アーカイブ行の保持期間(初回の書き込み時に、プロセスごとに1回整理されます) |
TRENDZEIST_LOG_LEVEL | WARNING | Python のログレベル(stderr) |
注意事項と制限
- Google は積極的にレート制限を行います(HTTP 429)。すべての HTTP リクエストは直列化され、間隔を空けて実行されます。結果は、クライアントの再起動後に再取得されないよう、ディスク上にプレーンな JSON としてキャッシュされます(Explore/News は 15 分、RSS は 5 分、Categories/Autocomplete/Wikipedia は 24 時間)。メモリーキャッシュのサイズには上限があり、期限切れのファイルは自動的に削除されます。エラーは、対処方法とともにツールエラーとして返されます。
mine_questionsは、キャッシュされていない呼び出しごとに最大 16 件の Autocomplete リクエストを発行します(質問の各接頭辞につき 1 件)。デフォルトの 2 秒間隔では、最悪の場合約 30 秒かかります。limitに達した時点で処理を終了し、Google に拒否され始めた場合は部分的な結果を返します。- 値は Google の相対的な 0~100 の指数であり、絶対的な検索ボリュームではありません。
growth_3m/growth_12mは、直近の期間の平均と、その前の期間の平均を比較するため、どちらもデータが 2 期間分必要です。growth_3mには 6 か月以上(today 12-m)、growth_12mにはtoday 5-yが必要です。この理由でどちらかがnullの場合、サマリーには使用すべき期間を示すgrowth_noteが含まれます。 - Google はセッション開始時の最初のリクエスト集中に対して、最も厳しくレート制限を行います。
discover_topics/aeo_opportunitiesでは、最初はシードを 1~2 件にしてください。トレンドコンテキストの取得時に 429 が発生しても、呼び出し全体は中止されなくなりました(関連クエリは引き続き取得されます)。スキップのメッセージには再試行のタイミングが示されます。 mine_questionsの質問の接頭辞は英語です。英語以外の市場で、その言語の質問を取得するには、すでにその言語で表現されたシードを渡してください。related_topicsは Google から何も返されないことがよくあります。related_queriesは安定して取得できます。- Google の旧式の日次
trending_searchesエンドポイントは廃止されています(404)。trending_nowは RSS フィードを使用します。 aeo_opportunitiesは最もコストの高い呼び出しです。最悪の場合、シード 1 件あたり 1 + 10 件のリクエストが発生します(Wikipedia は独立した経路で実行されます)。Google へのリクエストは最初の 429 で停止しますが、Wikipedia のデータは引き続き返されます。trendzeist_statusでは、リクエストを送信せずに、エラーが発生しているソースを確認できます。wiki_attention.has_articleが確認するのは、タイトルが完全一致する検索結果のみです。別の Wikipedia 検索結果はrelated_articleとして表示されますが、引用やコンテンツ不足の証拠にはなりません。百科事典的なコンテンツの不足を主張する前に、関連タイトルとリダイレクトを手動で確認してください。- キャッシュの TTL、メモリー上のエントリー数、系列ポイントの上限には、正の整数を指定する必要があります。無効な値は、不明瞭なフォーマッターエラーではなく、対処方法がわかるツールエラーになります。
what_changedにはベースラインが必要です。初回の呼び出しではベースラインが記録され、各シードについてreason: "baseline recorded <date>; rerun after <date>"が報告されます。スナップショットは日常の使用(discover_topics、today 3-mでのrelated_queries、today 12-mでのトレンドラベル)によって蓄積されるため、通常の作業を 1 週間続ければ十分です。trend_historyはアーカイブ専用です。seasonalityには、ゼロではない週次データが 3 年分以上必要です(today 5-y)。データ期間がそれより短いトピックでは、seasonal: nullとreasonが返されます。プロファイルと強度の計算には、年単位の完全なデータのみが使用されます。オフシーズンの関心度がゼロの場合は、strength_noteとともに季節性ありとして報告されます(比率に上限はありません)。in_peak_nowは、現在の月がピーク月であることを示します。compare_channelsは 5 件のリクエストを発行し、最初の 429 で停止します(残りはskippedに列挙されます)。各チャネルの尺度はそれぞれ独立した 0~100 であり、momentum: all_decliningは、fastest_channelが「最も減少幅の小さい」チャネルにすぎないことを意味します。what_changedが「終了」を勧めることはありません。Google の相対的で件数に上限のある関連項目リストから外れたことは、需要の低下を示す証拠ではありません。項目にはreview: ...のアクションが付与されます。終了する前に、その項目のinterest_over_timeで確認してください。Google が何も返さなかったスナップショットは、大量の減少としてではなく、何も返されなかったものとして報告されます。- pytrends-modern の Camoufox/ブラウザーモードは、意図的に使用していません。
免責事項
このサーバーは、trends.google.com のフロントエンドが使用している未公開のエンドポイント(Google オートコンプリートと Google ニュース RSS も含みます)にアクセスします。これらは非公式であり、予告なく変更されたり、レート制限されたり、利用できなくなったりする場合があります。変更による問題を早期に検知するため、CI では毎週 ライブカナリアを実行しています。 このプロジェクトは Google LLC と提携、推奨、または後援されていません。 「Google Trends」は Google LLC の商標です。お住まいの地域における Google の利用規約を遵守する責任は、お客様にあります。
貢献
Issue と PR を歓迎します。アーキテクチャと規約については AGENTS.md をお読みください
(コーディングエージェントにリポジトリを参照させる場合にも役立ちます)。Google の変更後にデータ形式を修正することが、最も価値のある貢献です。実行した呼び出しと、その戻り値を記載してください。
ライセンス
MIT — LICENSE を参照してください。pytrends-modern(MIT)を基盤にしています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。