trendzeist-mcp
Free, local Google Trends MCP server built for content ideation. One call returns ranked breakout / rising / evergreen blog topics; the rest of the toolset covers interest over time, related queries, regions, and real-time trends.
No API key. No account. No browser. Runs on your machine over stdio.
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 %
→ compare_keywords(["how to descale espresso machine", "best coffee beans for espresso"])
"1. How to Descale Your Espresso Machine (rising +120%, publish now) ..."
Quick start
# 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 — add under mcpServers in claude_desktop_config.json
(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: 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
| Tool | Purpose |
|---|---|
discover_topics |
One-shot ideation: rising/top related queries for 1-5 seeds, deduped and ranked breakout > rising > evergreen |
interest_over_time |
0-100 interest series + summary (mean, peak, direction) |
compare_keywords |
Head-to-head share and leader for 2-5 keywords |
related_queries |
Top & rising related searches (with breakout flag) |
related_topics |
Top & rising Knowledge-Graph topics (best-effort) |
interest_by_region |
Geographic distribution (COUNTRY / REGION / CITY / DMA) |
suggest_keywords |
Entity disambiguation (title, type, mid) |
trending_now |
Real-time trending searches via RSS with news headlines |
list_categories |
Search Google Trends category ids |
Prompt: blog_ideas_from_trends(topic, audience, geo) — a guided workflow using the tools above.
Why this one?
| trendzeist-mcp | typical alternatives | |
|---|---|---|
| Ranked topic discovery in one call | ✅ discover_topics |
❌ raw primitives only |
| Guided ideation prompt | ✅ blog_ideas_from_trends |
❌ |
| Related queries + breakout detection | ✅ | often missing in hosted/paid servers |
| Cost / auth | free, none | API key, monthly quota |
| Browser required | no | Chrome for some Python libraries |
| Cache survives client restarts | ✅ disk cache | usually in-memory or none |
Run from source
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
Point a client at the clone with
"command": "uv", "args": ["--directory", "/path/to/trendzeist-mcp", "run", "trendzeist-mcp"].
Configuration (env vars)
| Variable | Default | Meaning |
|---|---|---|
TRENDZEIST_HL |
en-US |
UI language for Google Trends |
TRENDZEIST_TZ |
360 |
Timezone offset in minutes |
TRENDZEIST_MIN_INTERVAL |
2.0 |
Minimum seconds between Google requests |
TRENDZEIST_RETRIES |
3 |
Retry attempts on transient errors |
TRENDZEIST_BACKOFF |
1.5 |
Exponential backoff factor |
TRENDZEIST_PROXIES |
— | Comma-separated proxy URLs for rotation |
TRENDZEIST_CACHE_DIR |
OS user cache dir | Persistent cache location; off to disable |
TRENDZEIST_LOG_LEVEL |
WARNING |
Python logging level (stderr) |
Notes & limitations
- Google rate-limits aggressively (HTTP 429). Requests are serialised, throttled and cached (15 min for explore data, 5 min for RSS, on disk so client restarts don't re-fetch). Errors come back as tool errors with guidance.
- Values are Google's relative 0–100 index, not absolute search volume.
related_topicsfrequently returns nothing from Google;related_queriesis reliable.- Google's legacy daily
trending_searchesendpoint is gone (404);trending_nowuses the RSS feed. - 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. 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).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trendzeist_mcp-0.1.0.tar.gz.
File metadata
- Download URL: trendzeist_mcp-0.1.0.tar.gz
- Upload date:
- Size: 20.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40fbb7e86a12ef1d45a428c488d7efa20fc05f72c8ef25fe04d57cd48174c7d3
|
|
| MD5 |
ada1b3417b8fba98bfbc7704ec4a49eb
|
|
| BLAKE2b-256 |
997c0701ebe40fa5c74af466f1639d2956c60cc81d6f90c36e4949143888d8c5
|
Provenance
The following attestation bundles were made for trendzeist_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on phalkmin/trendzeist-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trendzeist_mcp-0.1.0.tar.gz -
Subject digest:
40fbb7e86a12ef1d45a428c488d7efa20fc05f72c8ef25fe04d57cd48174c7d3 - Sigstore transparency entry: 2770349515
- Sigstore integration time:
-
Permalink:
phalkmin/trendzeist-mcp@432ef871539addc74bd1c3febf98f9d8081ccbde -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/phalkmin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@432ef871539addc74bd1c3febf98f9d8081ccbde -
Trigger Event:
push
-
Statement type:
File details
Details for the file trendzeist_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: trendzeist_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
032d4417ea715ac12cdfafee030a7c3adb8c925d9ed066a3437aad81c0fc5b4f
|
|
| MD5 |
4116f98bbbcacbf551260240ca093ea0
|
|
| BLAKE2b-256 |
35ebb89d436882e20359b24fdbe332185631dbc306b8a5a56ce27a830f35fbbc
|
Provenance
The following attestation bundles were made for trendzeist_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on phalkmin/trendzeist-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trendzeist_mcp-0.1.0-py3-none-any.whl -
Subject digest:
032d4417ea715ac12cdfafee030a7c3adb8c925d9ed066a3437aad81c0fc5b4f - Sigstore transparency entry: 2770349555
- Sigstore integration time:
-
Permalink:
phalkmin/trendzeist-mcp@432ef871539addc74bd1c3febf98f9d8081ccbde -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/phalkmin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@432ef871539addc74bd1c3febf98f9d8081ccbde -
Trigger Event:
push
-
Statement type: