Server data from the Official MCP Registry
Google Trends MCP with proxy rotation, auto-retry on Google blocks, residential-proxy setup.
Google Trends MCP with proxy rotation, auto-retry on Google blocks, residential-proxy setup.
This Google Trends MCP server demonstrates solid engineering with appropriate proxy handling, input validation, and security awareness. The code is well-structured with proper error handling and no malicious patterns detected. Minor quality concerns around environment variable validation and overly broad exception handling prevent a higher score, but the server's permissions align well with its stated purpose of accessing Google Trends data with proxy rotation. Supply chain analysis found 2 known vulnerabilities in dependencies (0 critical, 2 high severity). Package verification found 1 issue.
7 files analyzed · 9 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: PROXY_URL
Environment variable: PROXY_LIST
Environment variable: PROXY_LIST_FILE
Environment variable: PROXIES_ENABLED
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-den-indance-google-trends-mcp": {
"env": {
"PROXY_URL": "your-proxy-url-here",
"PROXY_LIST": "your-proxy-list-here",
"PROXIES_ENABLED": "your-proxies-enabled-here",
"PROXY_LIST_FILE": "your-proxy-list-file-here"
},
"args": [
"-y",
"@den.dance/google-trends-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
The Google Trends MCP server that actually works under Google's anti-bot. Connect Claude to live Google Trends data — keyword interest, related queries, regional popularity.
Most Google Trends MCP packages crash with Unexpected token 'l' the moment Google blocks them (which is often). Free public proxy lists don't help — we tested 64 proxies from a popular "high-quality" list and 0 worked. This one uses your own rotating proxy with auto-retry, so blocked requests transparently retry on a fresh IP.
Built by Denys Malieiev.
| What's fixed | Detail |
|---|---|
| Free public proxies don't work | We tested 64 — 0 survived. Bring your own rotating residential (Webshare/IPRoyal/Smartproxy free tier = ~46k requests on 1 GB) |
| Auto-retry on Google blocks | When Google returns HTML, we retry up to 3 times with a fresh proxy from the pool. End-to-end success rate in our tests: 5/5 |
| HTML-detection at the wrapper level | Other MCPs let JSON.parse crash with cryptic errors. We detect HTML before parsing |
| Honest about what doesn't work | get_trending_searches is intentionally not exposed — Google blocks dailyTrends/realTimeTrends aggressively without residential proxies. We don't pretend otherwise |
| Pool with fail-tracking | Proxies that fail 3 times get dropped automatically. Random rotation per request |
| Per-request rotation | Each request picks a random proxy from the pool — Google can't accumulate per-IP rate limits |
npx @den.dance/google-trends-mcp
Works out-of-the-box from non-flagged IPs, but Google rate-limits datacenter ranges aggressively. For reliable use, set up a proxy (see below).
Recommended (all have free tiers / pay-per-GB):
Make sure the provider allows *.google.com in their ToS (most majors do).
Edit your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonSingle rotating endpoint (recommended — provider rotates IPs internally):
{
"mcpServers": {
"google-trends": {
"command": "npx",
"args": ["@den.dance/google-trends-mcp"],
"env": {
"PROXY_URL": "http://USER:PASS@gate.smartproxy.com:7000"
}
}
}
}
Or an explicit list (useful for Webshare-style per-port proxies):
{
"mcpServers": {
"google-trends": {
"command": "npx",
"args": ["@den.dance/google-trends-mcp"],
"env": {
"PROXY_LIST": "http://user:pass@host1:6114,http://user:pass@host2:6014,http://user:pass@host3:5863"
}
}
}
}
For longer lists, put proxies in a file (one per line, # comments allowed) and point to it:
{
"mcpServers": {
"google-trends": {
"command": "npx",
"args": ["@den.dance/google-trends-mcp"],
"env": {
"PROXY_LIST_FILE": "/home/you/.config/google-trends/proxies.txt"
}
}
}
}
# ~/.config/google-trends/proxies.txt
http://user:pass@host1:6114
http://user:pass@host2:6014
http://user:pass@host3:5863
chmod 600 the file — credentials live there. Run proxy_refresh from Claude to hot-reload after editing.
Restart Claude Desktop after saving the JSON config.
claude mcp add google-trends \
-e PROXY_URL="http://USER:PASS@gate.smartproxy.com:7000" \
-- npx @den.dance/google-trends-mcp
| Variable | Required | Description |
|---|---|---|
PROXY_URL | recommended | Single rotating proxy endpoint. Provider handles IP rotation internally. No validation, no fallback |
PROXY_LIST | alternative | Comma-separated list of proxies (http://user:pass@host:port,...). Validated on startup, bad ones auto-dropped |
PROXY_LIST_FILE | alternative | Path to a file with one proxy per line (# comments and blank lines allowed). Validated on startup. Re-read on proxy_refresh |
PROXIES_ENABLED | no | Set to false to disable all proxy logic (direct requests). Default: enabled |
Priority: PROXY_URL > PROXY_LIST > PROXY_LIST_FILE. If none are set, requests go direct (no proxy) — works only from non-flagged IPs.
compare_keywords — search interest over time for up to 5 keywords. Returns a timeline of relative scores.get_related_queries — top + rising related queries for a keyword. Powered by Google's relatedQueries endpoint.get_interest_by_region — top 20 regions by interest in a keyword.proxy_status — show source (single / env-list / env-file / none / disabled), working count, age, freshness, validation progress.proxy_refresh — force re-validation of the current proxy source. No-op in PROXY_URL mode.get_trending_searches (daily / real-time trends) — Google blocks these endpoints aggressively. Even with residential proxies the success rate is too low to ship. We'd rather not lie about it.MAX_ATTEMPTS in trends-client.js if you need higher tolerance.google-trends-api library scrapes Google's internal endpoints, which are undocumented and can change. If the library breaks, this MCP breaks too.server.js (MCP handlers), proxy-manager.js (pool/cache), trends-client.js (retry logic with DI)trends.google.com/api/autocomplete/test, looking for the anti-XSSI prefix )]}' in the responseproxies.json (gitignored), keyed by SHA1 of input list — automatically invalidated when source changesgetAgent() on HTML response or exception# Unit only (fast, offline, no network)
npm test
# With coverage report (html in coverage/)
npm run test:coverage
# Integration (real Google hit, gated)
RUN_INTEGRATION=1 npm run test:integration
# E2E (spawns server.js, JSON-RPC over stdio)
RUN_E2E=1 npm run test:e2e
# Everything
npm run test:all
server.js — MCP server entrypoint (stdio transport)trends-client.js — Google Trends API wrapper with retry-on-HTMLproxy-manager.js — proxy pool, validation, cache, source prioritytests/unit/ — pure unit tests, no network (~40 tests, runs in ~2s)tests/integration/ — real Google endpoint tests (gated by RUN_INTEGRATION=1)tests/e2e/ — full MCP protocol tests via spawn (gated by RUN_E2E=1)PROXY_LIST_FILE pointing to a chmod 600 file outside the repo, or your secrets managerproxies.json cache (built from validated proxies) is gitignored and never published — re-generated on first run after installMIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.