PostHog MCP Server
Official PostHog MCP Server for product analytics, feature flags, experiments, and more.
Google Trends data: interest over time, by region, related queries, and trending now.
Pick the AI app you use, then copy the settings.
Passed 3/4 checks · Runs on your computer
We hid some of the commands
Connect by URL: the server address did not answer when we checked
No install path has passed yet. See the maker’s instructions or pick another server in this category · Maker’s install instructions · Others in this category
First: which AI do you use?
Pick your app and the steps appear below.
Claude cannot connect TrendFlow yet
No install path has passed yet. See the maker’s instructions or pick another server in this category
ChatGPT cannot connect TrendFlow yet
No install path has passed yet. See the maker’s instructions or pick another server in this category
B · Others in Marketing & social media that work with ChatGPT
Picked from the most used in the same category, only ones that connect by address with no key
Claude Code cannot connect TrendFlow yet
No install path has passed yet. See the maker’s instructions or pick another server in this category
Cursor cannot connect TrendFlow yet
No install path has passed yet. See the maker’s instructions or pick another server in this category
VS Code cannot connect TrendFlow yet
No install path has passed yet. See the maker’s instructions or pick another server in this category
No install path has passed yet. See the maker’s instructions or pick another server in this category
Based on how this server connects and on each app’s own docs, checked Nov 10, 2026.
Connect over the internet in
GooseLM StudioMsty StudioCherry StudioVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast
Tool names and descriptions exactly as the server reported them on Nov 12, 2026. The maker wrote them, not us; we show them as plain text.
list_regionsReturns the geo codes Google Trends accepts. With no argument it lists every country; given a country code it lists that country's sub-regions — US states, German states, UK nations — each as a code and a name. Any code returned here can be passed as the `region` argument of the
search_topicsResolves a name — a company, product, person, technology, or concept — to its Google Trends topic id (`mid`), with a `type` field that distinguishes same-name entities such as Nike the company from Nike the goddess. A topic aggregates every spelling and translation of one concept
get_interest_over_timeGet relative search interest for one or more terms over a historical period. Use this when the user asks how popular something is, whether it is rising or falling, or how several things compare — passing multiple keywords compares them on one scale. Values are normalized relative
get_interest_by_regionBreak down search interest for one term by geography. Use this when the user asks where something is popular, or wants a regional or city-level comparison. Values are normalized relative interest (0-100 within the result set).
get_related_queriesFind the top and rising searches related to a term. Use this for keyword discovery, SEO and content research, and spotting breakout queries. `top` is ranked by volume; `rising` is ranked by growth, where "Breakout" means growth too large to measure.
get_trending_nowLists the searches surging right now in a country, for questions about what is spiking without a term being named, and for news and real-time context. The `backend` parameter selects the source: "rpc" returns around 50 entries with growth percentages and a relative volume index;
research_trendReturns a full picture of one term in a single call: interest over time, where it is most searched, and the queries people search alongside it. Suited to open-ended research on a topic rather than one narrow question. Each section is fetched independently, so a partial result is
research_bulkResearches up to 10 topics in a single call, each with the same full picture as `research_trend`: interest over time, where it is most searched, and related queries. Each topic is looked up on its own scale, so they are not comparable to one another. Use this when you need data a
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 13, 2026
The registry name was verified against the domain mory.dev (the registry checks domain ownership)
Code last changed 2 months ago
Not applicable: a cloud server run by the owner of mory.dev; you don't run code from the repo
Did not respond within 6 seconds when we checked
Did not respond within 6 seconds when we checked
Read 8 tool descriptions and found no hidden instructions to the AI
Ask, share a tip or report that it does not work. Sorted by what people marked helpful.
No posts yet. Be the first to ask or share.
Posts here are written by users, not the PopNx team.
No reviews yet
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 4 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
The GitHub repo last changed 2 months ago, and the latest version (0.1.0) reached the registry 3 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT on the web (full MCP on Business and above; Pro read-only).
In the same category: PostHog MCP Server, Openshorts, Google Ads + Meta Ads + SEO/GEO MCP
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Official PostHog MCP Server for product analytics, feature flags, experiments, and more.
Turn long videos into viral vertical shorts and publish them to TikTok, Instagram and YouTube.
Google Ads, Meta Ads, Google Analytics (GA4) & Search Console MCP server by Ryze AI
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A type-safe JavaScript/TypeScript library for querying and exporting Google Trends data. The JavaScript port of trendflow-py.
📖 Documentation: [trendflow.mory.dev/docs/js](https://trendflow.mory.dev/docs/js) — guides for both libraries, plus a hosted MCP server for ChatGPT, Claude, and Cursor.
npm install trendflow
Requires Node.js 18+ (uses the global fetch). Ships ESM and CommonJS with bundled type declarations.
import { Client, Region, Timeframe, Resolution, SearchProperty, ExportFormat } from "trendflow";
// Initialize client (optional config) const tf = new Client({ language: "en", timeout: 10_000 });
// --- Const objects for type safety --- // Region.US, Region.GB, Region.DE ... (or any code: "US-CA", "807") // Timeframe.PAST_HOUR ... PAST_5_YEARS, ALL_TIME (or "2023-01-01 2023-06-30") // Resolution.COUNTRY, Resolution.REGION, Resolution.CITY // SearchProperty.WEB, IMAGES, NEWS, YOUTUBE, SHOPPING
// Fetch interest over time const data = await tf.interestOverTime( ["Python", "JavaScript", "Rust"], Timeframe.PAST_YEAR, Region.US, );
console.log(data.keywords); // ["Python", "JavaScript", "Rust"] console.log(data.granularity); // "weekly" console.log(data.points); // TrendPoint[] — { date: Date, scores: Record }
// Regional breakdown (region defaults to Region.US) const regional = await tf.interestByRegion("Python", Resolution.COUNTRY); for (const row of regional.rows) { console.log(row.label, row.value); }
// Trending searches right now (any country code, or omit for worldwide) const trending = await tf.trendingNow(Region.US); for (const item of trending.results) { console.log(item.title, item.growth, item.volume, item.traffic); // "fifa world cup 2026" 3650 6 "+3,650%" }
// Related queries (region defaults to worldwide) const related = await tf.relatedQueries("machine learning", { region: Region.GB }); for (const query of related.top) console.log(query.term, query.value); for (const query of related.rising) console.log(query.term, query.breakout);
// --- Narrowing a query --- // Every query method takes an optional category and search property, and any of them // accepts a custom date range and a sub-region or metro code in place of the named values.
// "jaguar" the car, on YouTube, in California, over the first half of 2023 const jaguar = await tf.interestOverTime(["jaguar"], "2023-01-01 2023-06-30", "US-CA", { category: 47, // Autos & Vehicles — disambiguates without needing a topic id searchProperty: SearchProperty.YOUTUBE, });
// --- Exports --- data.toArray(); // [{ date: Date, Python: 80, ... }] — plain objects, the JS answer to DataFrames data.toJSON(); // same rows with ISO 8601 date strings (also drives JSON.stringify) data.toCSV(); // CSV text
// Node.js only — writes UTF-8 to disk await data.export(ExportFormat.CSV, "trends.csv"); await data.export(ExportFormat.JSON, "trends.json");
Failed requests throw ResponseError, or TooManyRequestsError (a subclass) on HTTP 429. Both carry .status and the raw .response.
import { TooManyRequestsError } from "trendflow";
try { await tf.interestOverTime(["Python"], Timeframe.PAST_YEAR, Region.US); } catch (error) { if (error instanceof TooManyRequestsError) { // Google is rate-limiting this IP — back off and retry later. } }
Google exposes trending searches two ways. They are not interchangeable, so backend lets you pick:
"rpc" (batchexecute) | "rss" (feed) | |
|---|---|---|
| items | 50 | 10 |
| payload | ~2 KB JSON | ~21 KB XML |
| growth % and volume | ✅ | ❌ — buckets like "2000+" |
| news articles | ❌ | ✅ |
window selection | ✅ | ignored by Google |
| worldwide | ✅ | ❌ country only |
const rss = await tf.trendingNow(Region.US, { backend: "rss" });
rss.source; // "rss" rss.results[0].articles; // [{ title: "...", url: "https://...", source: "Buffalo News", picture: "https://..." }]
"auto" (the default) tries the RPC and falls back to the feed. The RPC comes first deliberately: it returns five times the items with real growth figures, so defaulting to RSS would quietly degrade results. Reach for "rss" when you want the articles — that is the one thing the RPC cannot give you — or as a second opinion if the RPC id ever goes stale.
Note that the feed is not a lighter path despite being a feed, and Google ignores hours, sort and count on it: it always returns the same 10 entries.
Google distinguishes a search term (the literal string) from a topic (the entity, in every spelling and language). suggestions() finds the topic; every query method already accepts one — pass the mid where you would pass a keyword.
const topics = await tf.suggestions("artificial intelligence");
// [{ mid: "/m/0mkz", title: "Artificial intelligence", type: "Professional field" }]
const data = await tf.interestOverTime( [topics[0].mid, "artificial intelligence"], Timeframe.PAST_YEAR, Region.US, ); // { "/m/0mkz": 62, "artificial intelligence": 1 }
That gap is the point: the topic scores 62 where the literal phrase scores 1, because it aggregates every phrasing and translation people actually search.
suggestions() needs no cookie and no proxy — it answers on IPs the widgetdata endpoints reject with 429, same as trendingNow(). type disambiguates same-name entities ("Nike" returns both the company and the goddess) and is null when Google omits it.
Google Trends aggressively rate-limits datacenter and shared IPs, so 429 is common even on your first request of the day. Two things matter:
429 to the default agent strings Node HTTP clients send, no matter how few requests you have made. This library sends a browser User-Agent by default for exactly that reason — if you override headers, keep a realistic one.429 regardless of headers. Route through a residential proxy to recover.Pass a list of proxy URLs and the client rotates through them automatically, moving to the next one whenever a query is refused:
import { Client, Region, Timeframe } from "trendflow";
const tf = new Client({ proxies: [ "http://user:pass@gate.decodo.com:7000", "http://user:pass@gate.decodo.com:7000", ], maxProxyAttempts: 3, // defaults to the pool size, capped at 5 onProxyRotate: ({ attempt, error }) => console.warn(rotated after ${attempt}:, error), });
const data = await tf.interestOverTime(["Python"], Timeframe.PAST_YEAR, Region.US); console.log(tf.currentProxy); // the proxy that answered
Proxy support needs undici, an optional peer dependency — npm install undici. Entries are just URLs, so a pool can mix providers. Repeating one rotating gateway also works: each entry gets its own connection, so it lands on a fresh exit IP.
Rotation happens per query, not per request — this matters. Google binds the NID cookie and the widget token to the IP that requested them, so a single query must complete on one exit IP; sending the follow-up widgetdata call from a different IP earns an instant 429. The pool pins one proxy for the whole query and advances only on failure, re-seeding the cookie jar each time. For the same reason, point the pool at sticky sessions rather than per-request rotating endpoints if your provider offers the choice.
Rotation is skipped for errors a different IP cannot fix, such as a 404 or the UnknownRpcError raised when Google renames a batchexecute RPC id.
Residential proxies are what actually clears Google's 429. Verified against this library:
| Provider | Notes | Endpoint format |
|---|---|---|
| Decodo (formerly Smartproxy) | Cheapest entry tier; pay-as-you-go available. Used to verify this library's live tests. | http://user:pass@gate.decodo.com:7000 |
const tf = new Client({
proxies: ["http://user:pass@gate.decodo.com:7000"], });
Ask for sticky sessions when you sign up — per-request rotating endpoints break the cookie/token binding described above. Note that a shared residential pool can be exhausted for Google Trends specifically, in which case even a valid proxy returns 429; that is what maxProxyAttempts is for.
For logging, caching, or custom routing, pass a fetch instead (mutually exclusive with proxies — the library will tell you if you pass both):
import { ProxyAgent, fetch as undiciFetch } from "undici";
const agent = new ProxyAgent("http://user:pass@proxy.example.com:7000"); const tf = new Client({ fetch: ((input, init = {}) => undiciFetch(input, { ...init, dispatcher: agent })) as typeof globalThis.fetch, });
Every method except export() works anywhere fetch does, but Google Trends sends no CORS headers — calls from browser JavaScript will be blocked. Use this library server-side (Route Handlers, Server Actions, API routes) and pass results to the client.
An MCP server ships alongside the library as trendflow-mcp, so agents can query Google Trends directly. It's a separate package — the library keeps its zero runtime dependencies.
claude mcp add trendflow -- npx -y trendflow-mcp
Six tools (search_topics, get_interest_over_time, get_interest_by_region, get_related_queries, get_trending_now, research_trend) and two resources. See mcp/README.md.
Current: trendflow-py 0.2.0 · trendflow 0.1.0. Versions are independent; each changelog cross-references the sibling release.
| Feature | Python — trendflow-py | JS — trendflow |
|---|---|---|
| Interest over time | ✅ | ✅ |
| Interest by region | ✅ | ✅ |
| Trending now | ✅ | ✅ |
| Trending growth % and volume | ✅ | ✅ |
| Trending for any country code | ✅ | ✅ |
| Trending news articles (RSS) | ✅ | ✅ |
| Selectable trending backend | ✅ |