
Trendzeist – Google Trends for content ideation
io.github.phalkminPublished by GitHub account phalkminv0.2.1Updated Oct 24, 2026
Free Google Trends MCP: ranked breakout/rising/evergreen topics for content ideas. No API key.
Overview
Local MCP server that turns Google Trends, Autocomplete, News and Wikipedia data into ranked content-idea topics, questions and AEO opportunities.
- What you can do
- Discover ranked breakout, rising and evergreen topics from seed keywords, with angles, scores and site-coverage gaps
- Mine long-tail questions and score AEO opportunity clusters with trend, news, Wikipedia and citability signals
- Read interest curves, compare keywords, related queries and topics, regional demand, categories and current trending searches
- Check seasonality, channel momentum, news coverage and Wikipedia attention for a topic
- Review what changed since earlier snapshots and browse the local observation archive
- Run guided prompts for blog ideas, content briefs, answer briefs and weekly reviews
- When to use it
- Useful when you want an assistant to propose blog posts, FAQ or answer-engine content from real search demand, or to check whether a topic is rising, seasonal or already covered by your site. It suits SEO and content planning work rather than measuring your own visibility in AI answer engines.
- Requirements
- Runs locally over stdio, typically via uvx or pipx from the PyPI package, or as a Docker image; no API key or account. Optional environment variables: TRENDZEIST_HL for UI language, TRENDZEIST_MIN_INTERVAL for request spacing, and TRENDZEIST_PROXIES for proxy rotation. Needs outbound network access to Google and Wikimedia endpoints.
Installation
In SourceWeft
- Open Trendzeist – Google Trends for content ideation in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
trendzeist-mcp
Turn Google Trends into your next 10 blog posts — in one call.
trendzeist-mcp gives your AI assistant ranked breakout / rising / evergreen topics, the questions people actually ask, an AEO opportunity finder that scores question clusters with trend, news coverage, Wikipedia presence and citability hints, plus interest curves, regional demand, real-time trends, who covers a topic in Google News and Wikipedia attention. Free, local, private. No API key, no account, no browser.
SEO and AEO: find the questions people ask — and answer engines answer — then make your site the source they cite. Measuring your own visibility inside ChatGPT / Perplexity / AI Overviews is out of scope; this server tells you what to write, not who cites you.
Built with
trendzeist-mcp is a thin MCP layer over pytrends-modern,
which handles all Google Trends requests. Trendzeist adds the MCP tools and prompt, request
throttling, a persistent disk cache, strict input validation, LLM-friendly JSON output and the
ranked discover_topics workflow. Other runtime dependencies: mcp
(official MCP Python SDK), pandas, platformdirs and requests. All MIT/BSD/Apache licensed.
Google Autocomplete, Google News RSS and the Wikimedia REST API are called directly with
requests (keyless).
Quick start
Claude Desktop — add under mcpServers in claude_desktop_config.json
(macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\, Linux ~/.config/Claude/):
Claude Code: claude mcp add trendzeist -- uvx trendzeist-mcp
Cursor / VS Code / Codex: same command/args shape — see llms-install.md
(written so you can paste it to an AI assistant and let it do the install).
Tools
Prompts: blog_ideas_from_trends(topic, audience, geo) (guided ideation),
content_brief(topic, audience, geo) (titles, outline, FAQ, regions, publishers),
answer_brief(question, geo) (a citable answer: direct answer, statistic, quote, sources,
FAQ, schema) and weekly_review(seeds, geo, site_queries) (content meeting: publish now /
plan for a date / refresh / retire). A ready-made agent skill lives in SKILL.md.
Output conventions
- Every result carries
schema_version(currently3; bumped only when a field is removed or changes meaning) and_metawithrequests_made,cache_hit,cache_hits,cache_missesfor that call — so the model knows when to slow down._meta.archive_errorappears only when the local archive could not be written (the tool result is unaffected). - Explainable score.
discover_topics.topics[]andaeo_opportunities.opportunities[]carryscore(0-100) andscore_breakdownwith five components, each{points, max, reason}:demand25 (questions found or top-query popularity),momentum25 (direction_now+ breakout / rising),freshness15 (Google News, 0 when not fetched),gap20 (vs.site_queries: gap 20 / partial 10 / covered 0; neutral 10 without them),aeo15 (question-shaped; definition angle with no Wikipedia article). Compare scores within one call only. - Observation archive. Every fresh fetch (not cache hits) of related queries, trend
labels, trending searches and mined questions becomes one snapshot (unique id; an empty
Google answer is a snapshot too) with normalised rows in
archive.sqlite3next to the disk cache (stdlibsqlite3, 365-day retention, opened lazily). Related-query snapshots hold the complete lists regardless of a caller'slimit, so comparisons never invent drops.what_changedandtrend_historyread it;trendzeist_status.archivereports it. Suspect rising queries never enter it. Archive errors never fail a tool.TRENDZEIST_ARCHIVE=0turns it off. - Site coverage is conservative. An
aeo_opportunitiescluster iscoveredonly when every question in it is covered; a mix ispartial(seecoverage_counts), soexclude_coveredcan never hide an unanswered question. angleis one ofhow-to | comparison | listicle | definition | news(ornull) — the title format the query suggests. Pair it with evidence: how-to → steps + numbers, comparison → table + quotes, definition → cite a primary source, news → dated publisher quotes.- Anything silently adjusted is reported: clamped limits add a
note, empty results add areason. - Two trend labels.
directioncompares the first and last third of the window (rising | falling | stable | new | no_interest | insufficient_data;new= no interest in the first third).direction_nowcompares the last quarter of the window with the quarter before it and answers "is it still growing now?". A topic that peaked mid-window readsdirection: rising(ornew) anddirection_now: falling; theinsightsentence says so. Composites (discover_topics,aeo_opportunities) always fetch the seed trend ontoday 12-m(echoed asquery.trend_timeframe) and score ondirection_now. - Suspect rising queries. Search-manipulation campaigns attach one name to many
unrelated "Breakout" queries.
related_queriesflags such itemssuspect: truewith asuspect_reason;discover_topicsmoves them tosuspect[];aeo_opportunitiesignores them. Google'sis_breakoutvalue is kept, only the trust changes. citability_hints(onaeo_opportunities) encode the GEO paper (Aggarwal et al., KDD 2024): citing sources, quotations and statistics each lifted AI-engine visibility 30-40%; keyword stuffing did nothing.- Language follows the market. With
TRENDZEIST_HLunset,geo="BR"queries Google withhl=pt-BR(≈50 countries mapped), so related queries come back in Portuguese. The effective language is echoed asquery.hl. Google News always uses the market's mapped edition (e.g.BR:pt), even whenTRENDZEIST_HLpins the Trends UI language. - Authority channels: pass
gprop="news"orgprop="youtube"to any explore tool to see what news outlets and video audiences are searching for — the sources answer engines cite most.gprop="images"and"froogle"(Shopping) also work.
Why this one?
Run from source
Point a client at the clone with
"command": "uv", "args": ["--directory", "/path/to/trendzeist-mcp", "run", "trendzeist-mcp"].
Configuration (env vars)
Notes & limitations
- Google rate-limits aggressively (HTTP 429). Every HTTP request is serialised and throttled; results are cached (15 min explore / News, 5 min RSS, 24 h categories / Autocomplete / Wikipedia) as plain JSON on disk so client restarts don't re-fetch. Memory cache is bounded and expired files are swept automatically. Errors come back as tool errors with guidance.
mine_questionsissues up to 16 Autocomplete requests per uncached call (one per question prefix); at the default 2 s interval that is ~30 s worst case. It stops as soon aslimitis met and returns partial results if Google starts refusing.- Values are Google's relative 0–100 index, not absolute search volume.
growth_3m/growth_12mcompare the mean of the last window with the window before it, so each needs two windows of data:growth_3mneeds ≥ 6 months (today 12-m),growth_12mneedstoday 5-y. When either isnullfor that reason the summary carries agrowth_notesaying which timeframe to use. - Google rate-limits the first burst of a session hardest. Start with 1–2 seeds in
discover_topics/aeo_opportunities; a 429 on the trend-context step no longer aborts the call (related queries are still fetched), and skip messages say when to retry. - Question prefixes in
mine_questionsare English; for native-language questions in a non-English market, pass a seed already phrased in that language. related_topicsfrequently returns nothing from Google;related_queriesis reliable.- Google's legacy daily
trending_searchesendpoint is gone (404);trending_nowuses the RSS feed. aeo_opportunitiesis the most expensive call: worst case 1 + 10 requests per seed (Wikipedia runs on its own lane). Google requests stop at the first 429; Wikipedia data is still returned.trendzeist_statusshows which source is erroring without any request.wiki_attention.has_articleconfirms an exact-title search match only; a different Wikipedia search hit appears asrelated_article, not as a citation or proof of a gap. Verify related titles and redirects manually before claiming an encyclopedic content gap.- Cache TTLs, memory-entry count and series-point cap must be positive integers; invalid values produce an actionable tool error rather than an opaque formatter failure.
what_changedneeds a baseline: the first call records one and reportsreason: "baseline recorded <date>; rerun after <date>"per seed. Snapshots accrue from everyday use (discover_topics,related_queriesontoday 3-m; trend labels ontoday 12-m), so a week of normal work is enough.trend_historyis archive-only.seasonalityneeds at least 3 full years of non-zero weekly data (today 5-y); younger topics returnseasonal: nullwith areason. Profile and strength use full years only; zero off-season interest is reported as seasonal withstrength_note(ratio unbounded);in_peak_nowflags that the peak month is the current one.compare_channelsissues 5 requests and stops at the first 429 (skippedlists the rest); channels are separate 0-100 scales, andmomentum: all_decliningmeansfastest_channelis only falling least.what_changednever says "retire": leaving Google's relative, bounded related list is not evidence of falling demand. Items getreview: ...actions; confirm withinterest_over_timeon the item before retiring. A snapshot where Google returned nothing is reported as such, not as a mass drop.- Camoufox/browser mode from pytrends-modern is intentionally not used.
Disclaimer
This server talks to the same undocumented endpoints the trends.google.com frontend uses (plus Google Autocomplete and Google News RSS). They are unofficial and may change, rate-limit or disappear without notice. A weekly live canary runs in CI to catch breakage early. This project is not affiliated with, endorsed by, or sponsored by Google LLC. "Google Trends" is a trademark of Google LLC. You are responsible for complying with Google's terms of service in your jurisdiction.
Contributing
Issues and PRs welcome. Read AGENTS.md for architecture and conventions
(also useful if you point a coding agent at the repo). Data-shape corrections after a Google
change are the most valuable contribution — include the call you made and what came back.
License
MIT — see LICENSE. Built on pytrends-modern (MIT).
Source: README.md at commit 46cc7fd
Tools
0Version history
1- v0.2.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
