TrendPulse - Google News & Trends
TrendPulse is an MCP server for researching Google News and Google Trends, including discovery, article extraction/summarization, and trend analysis.
Search recent news by keyword, location, topic, publisher domain, or top stories.
Use headlines-only mode to retrieve Google News RSS title/publisher/link metadata without article extraction.
Download, parse, and optionally summarize a specific article URL.
Retrieve current trending terms for a geography.
Get historical Google Trends interest-over-time for 1–5 keywords across Google Search, YouTube, News, Images, or Shopping.
Calculate keyword growth over custom windows such as 3M or 1Y.
Rank live trends by week-over-week growth or volume.
Retrieve a current top/daily trends feed.
Compare keyword interest by country, region, city, or DMA.
Explore related queries, related topics, autocomplete suggestions, and Google Trends category IDs.
Interpret Trends values as normalized 0–100 interest scores, not absolute search volume.
Allows searching Google News for articles by keyword, location, or topic, and fetching top news stories, with optional article summarization.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TrendPulse - Google News & Trends What are the latest news and trends for artificial intelligence?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-trendpulse
TrendPulse is a Python Model Context Protocol (MCP) server for researching current news and search-interest trends. It combines Google News discovery and article extraction with Google Trends analysis so MCP clients can inspect what is trending, compare keyword momentum, explore related demand, and add current-news context to research workflows.
The project currently ships as a community/self-hosted MCP server and also contains the implementation for a separate hosted TrendPulse by DigestSEO surface for remote MCP clients such as ChatGPT and Codex. The hosted layer uses a smaller, goal-oriented tool surface while the community server keeps the full low-level research toolkit available to developers.
Project status: the local/community server is usable today. The DigestSEO-hosted MCP and public OpenAI plugin are not released yet and should not be treated as available endpoints.
Engineering context: TrendPulse is part of the DigestSEO MCP ecosystem. It complements mcp-gsc for Google Search Console data, mcp-geo for AI visibility, and mcp-web-validator for technical web validation. The broader architecture is documented in the DigestSEO MCP Suite engineering case study.
TrendPulse Demand Brief
Need a fast evidence check before choosing a topic, keyword, market, product angle, or content bet? Tomi offers a human-produced TrendPulse Demand Brief for EUR 49.
For one decision, the brief covers up to five keywords/phrases and two geographic markets using TrendPulse's open-source research capabilities plus current public sources: search-interest direction, relative momentum, related demand, useful news context, and three concrete implications. Target turnaround is within 24 hours after payment is confirmed and the inputs are supplied.
See the exact scope and request format, read a public sample brief, or email info@tomiseregi.si with the subject TrendPulse Demand Brief [TP-RS1].
The paid brief is optional. The Community MCP remains free and unchanged, and the TP-RS1 marker is only an inbound attribution marker; no hidden telemetry is added to the MCP.
Related MCP server: NewsIQ MCP
What TrendPulse can do
News research
Search Google News by keyword, location, topic, or publisher domain.
Retrieve top news stories.
Resolve Google News links and extract article content.
Fall back from normal HTTP retrieval to Playwright/Chromium for difficult pages.
Optionally summarize article text with MCP client sampling, with local NLP as a fallback.
Trend research
Retrieve current trending terms for a geographic market.
Pull Google Trends interest-over-time data for one or more keywords.
Calculate keyword growth over custom windows such as 3M or 1Y.
Rank live trends by volume or growth.
Inspect interest by country, region, city, or DMA where supported.
Explore related queries, related topics, suggestions, and category IDs.
Compare Google Search, YouTube Search, News Search, Image Search, and Google Shopping trend properties where supported by the underlying provider.
Community and hosted architecture
TrendPulse is being developed with two deliberate surfaces:
Surface | Purpose | Status |
Community MCP | Full Python MCP server for local use, development, self-hosting, and integrations with MCP-compatible clients. | Available in this repository |
TrendPulse by DigestSEO | Managed remote MCP for ChatGPT/Codex and a future public OpenAI plugin with a smaller, task-oriented tool surface. | In development |
The community server remains useful independently. The hosted edition will reuse the same core trend-research concepts while adding the deployment, reliability, authentication, observability, and product integration needed for a managed service.
The implemented hosted tool surface is intentionally higher level than the community API and centers on goals such as:
discover_trendsanalyze_keyword_trendcompare_keyword_trendsdiscover_related_demandget_trend_contextfind_seo_opportunities
These names describe the hosted ChatGPT Apps/MCP interface; they remain separate from the current Community MCP tool names.
Installation
Run from PyPI with uvx (recommended)
TrendPulse is published on PyPI, so the shortest install path is:
uvx mcp-trendpulsePython 3.11 or newer is required. Python 3.10 reached end-of-life in October 2026 and cannot use Pillow 13, which patches upstream image-decoder vulnerabilities. To run TrendPulse on a machine with Python 3.10 as its default, select a supported interpreter explicitly:
uvx --python 3.11 mcp-trendpulseSee the security policy for the supported-runtime decision. Users on Python 3.10 must upgrade their interpreter; the new package will not install into a Python 3.10-only environment.
To run the current repository head instead of the published package:
uvx --from git+https://github.com/AKzar1el/mcp-trendpulse.git mcp-trendpulseInstall with pip from a checkout
git clone https://github.com/AKzar1el/mcp-trendpulse.git
cd mcp-trendpulse
python -m pip install .
python -m mcp_trendpulseArticle download safety and optional Chromium
Article downloads use bounded HTTP(S) requests pinned to a validated public IP, while retaining the original hostname for the HTTP Host header and HTTPS certificate verification. System proxies are disabled for this path. The Playwright article fallback is currently disabled because browser URL interception alone cannot guarantee connection-level protection against DNS rebinding; JavaScript-only or challenge-protected articles may therefore return no content. Other Google Trends/News discovery operations are unaffected.
The optional Python playwright package does not install Chromium automatically. For separate browser-supported workflows, install Chromium as follows:
For local use:
playwright install chromiumFor Linux environments that also require browser system dependencies:
playwright install --with-deps chromiumTrend-only operations do not inherently require Chromium.
Client configuration
Claude Desktop and Claude Code
Claude Code plugin packaging is included in .claude-plugin/plugin.json with its MCP definition in .mcp.json. The Community MCP remains local/stdin-based and runs through uvx mcp-trendpulse.
Claude Desktop
Using the published PyPI package with uvx:
{
"mcpServers": {
"mcp-trendpulse": {
"command": "uvx",
"args": ["mcp-trendpulse"]
}
}
}VS Code
Requires uv/uvx. The install runs the published Community MCP package from PyPI over local stdio.
For workspace-level configuration, put this in .vscode/mcp.json. The same top-level servers shape is used by the VS Code user-profile mcp.json for a global configuration.
{
"servers": {
"mcp-trendpulse": {
"command": "uvx",
"args": ["mcp-trendpulse"]
}
}
}Codex CLI and Codex IDE extension
Codex CLI and the Codex IDE extension share MCP configuration and support local stdio servers. Register the published TrendPulse Community MCP package with:
codex mcp add mcp-trendpulse -- uvx mcp-trendpulseThis makes TrendPulse available to Codex CLI and its IDE extension; it does not automatically install the server in ChatGPT desktop or web. See OpenAI's Codex MCP guidance for the shared Codex configuration model.
ChatGPT custom MCP connections
ChatGPT uses a separate plugin connection workflow; it does not import the local Codex MCP registration above. Where permitted by your account and workspace, use Plugins -> Add custom MCP server with a reachable HTTPS Streamable HTTP endpoint, or an available Secure MCP Tunnel for a private server. See OpenAI's connection instructions for current requirements and access controls.
Local stdio execution through a desktop-only ChatGPT plugin is a distinct, partner-allowlisted submission route, not a general Settings -> MCP Servers command-entry option. See OpenAI's desktop-only plugin policy.
TrendPulse's managed HTTPS endpoint and public ChatGPT plugin are not released. The current published Community MCP runs locally via uvx mcp-trendpulse in supported stdio clients; the Codex command alone does not connect it to ChatGPT.
Cursor and portable Agent Plugins
This repository includes an Agent Plugins 1.0 manifest at the repository root. Compatible clients such as Cursor and GitHub Copilot can load the same portable plugin.json + mcp.json package.
Cursor also supports global and project MCP configuration. Add the server to the relevant mcp.json configuration:
{
"mcpServers": {
"mcp-trendpulse": {
"command": "uvx",
"args": ["mcp-trendpulse"]
}
}
}Devin CLI and Devin Desktop
Devin CLI plugins can load Claude plugin packages and Agent Plugins 1.0 packages directly from GitHub. TrendPulse already ships both compatible layouts (.claude-plugin/plugin.json + .mcp.json, and root plugin.json + mcp.json). Install it with:
devin plugins install AKzar1el/mcp-trendpulseDevin requires a signed-in CLI session to manage plugins. The installed TrendPulse plugin starts the published Community MCP locally over stdio with uvx mcp-trendpulse; it does not use the unreleased hosted TrendPulse endpoint. The same plugin is available in Devin Desktop after installation.
Kiro
Requires uv/uvx. The install runs the published Community MCP package from PyPI; it does not use the unreleased hosted surface.
Privacy: TrendPulse Community MCP Privacy Notice · Support: info@tomiseregi.si
LM Studio
Requires uv/uvx. LM Studio runs the published Community MCP package locally over stdio; no hosted TrendPulse service is required.
ChatGPT web and other cloud MCP clients
The repository now includes a dedicated stateless Streamable HTTP ASGI entry point at mcp_trendpulse.asgi:app. This is separate from the Community stdio entry point, which remains unchanged.
For controlled local/private testing you can run the ASGI app with Uvicorn or use the provided container. See deploy/README.md for the hardened container, Host/Origin allowlists, Chromium sandbox requirements, health/readiness endpoints, and reverse-proxy notes.
The DigestSEO-hosted endpoint and public ChatGPT app are still not released. Hosted deployments now support fail-closed Clerk OAuth authentication; do not expose the remote transport publicly unless Clerk issuer/JWKS/audience settings, the public base URL, and the Host/Origin allowlists are configured for that deployment.
Configuration
TrendPulse loads environment variables from the process environment and from a local .env file when present.
Useful variables include:
HTTP_PROXY=http://your-proxy-address:port
HTTPS_PROXY=http://your-proxy-address:port
GOOGLE_NEWS_LANGUAGE=en
GOOGLE_NEWS_COUNTRY=US
GOOGLE_TRENDS_DELAY=2.0
# Optional, absolute, private directory shared by TrendPulse processes on one host:
# TRENDPULSE_SHARED_STATE_DIR=/home/you/.cache/mcp-trendpulseGOOGLE_NEWS_LANGUAGE and GOOGLE_NEWS_COUNTRY select the Google News language/edition used by all news-discovery tools; defaults remain en and US. GOOGLE_TRENDS_DELAY (default 2 seconds) paces Google Trends requests across all TrendSpy worker threads in one process, including the Trending Now batch endpoint. Identical interest-over-time queries are reused from a bounded, 90-second in-memory cache; concurrent duplicates share one provider request. After an upstream 429 or detected embedded quota rejection, the process pauses new Trends calls with bounded exponential cooldown and honors Retry-After when supplied. An already-cached series may still be returned during cooldown. The process also emits privacy-safe aggregate provider counters and latency buckets (see docs/operations.md). By default, coordination is process-local; it cannot increase or bypass Google's unpublished quota or throttle Google News article fetching. Proxy variables can be useful for legitimate network configuration but do not guarantee a higher upstream quota.
For multiple local agents on one computer, set the optional TRENDPULSE_SHARED_STATE_DIR to the same absolute, user-private directory in every TrendPulse process. This adds SQLite-backed inter-process pacing, a maximum 12-second request queue, shared 429 cooldown, and a 256-entry cache of numeric, indexed Google Trends time series. Cache keys are HMAC-hashed with a private directory key; query text and news articles are not saved. Long-window series live at most two hours, annual windows 90 minutes, shorter windows 30 minutes, and near-real-time series two minutes. Use a local disk, not a network drive or independent container filesystems. If shared state is unavailable, the existing in-process protections continue operating and emit a sanitized warning. The feature is off by default; it cannot raise Google's provider quotas or provide coordination across separate hosts.
Remote deployments also support TRENDPULSE_HTTP_PATH, TRENDPULSE_HTTP_ALLOWED_HOSTS, TRENDPULSE_HTTP_ALLOWED_ORIGINS, and TRENDPULSE_BROWSER_SANDBOX. The container enables Chromium sandboxing explicitly; local Community runs retain the Playwright-compatible default unless you opt in.
Do not commit secrets, private proxy credentials, or machine-specific .env files.
MCP tools
The community MCP server currently exposes 16 tools.
News tools
Tool | Purpose |
| Find recent news articles matching a keyword, or set |
| Find recent news associated with a location, or set |
| Find recent news for a supported Google News topic, or set |
| Retrieve top Google News stories, or set |
| Find recent news from a specific publisher domain, or set |
| Download, validate, extract, and optionally summarize one article URL. |
Trend tools
Tool | Purpose |
| Retrieve current trending terms for a geographic target. |
| Retrieve interest-over-time points for one or more keywords. |
| Calculate search-interest growth over requested windows. |
| Rank current trends by growth or volume. |
| Retrieve a top-trends feed without supplying a keyword. |
| Compare keyword interest across geographic regions. |
| Retrieve top and rising related search queries. |
| Retrieve top and rising related Google Trends topics. |
| Resolve autocomplete/topic suggestions for a query. |
| Search or page through Google Trends category IDs and names before using |
Example: explicit trend window
get_trends accepts an explicit timeframe. Supplying one is preferable when you need reproducible comparisons.
{
"keyword": ["technical SEO audit", "AI SEO audit"],
"geo": "US",
"source": "google search",
"timeframe": "today 12-m",
"cat": 0
}Supported provider ranges include standard windows such as today 12-m and today 5-y, relative windows such as today 90-d, all, and exact date ranges such as 2021-01-01 2026-01-01.
Google Trends values are normalized interest scores. Do not interpret a 0-100 interest series as absolute search volume.
CLI
The separate Click CLI is included in the public PyPI package. Run its published commands without a source checkout:
uvx --python 3.11 --from mcp-trendpulse mcp-trendpulse-cli --helpPublished CLI (v0.2.43+): The site command and the --headlines-only options for keyword, location, topic, top, and site are available in the published PyPI package. Run the stable release rather than repository HEAD:
uvx --python 3.11 --from mcp-trendpulse mcp-trendpulse-cli keyword "OpenAI" --headlines-onlyFrom a local source checkout, uv run mcp-trendpulse-cli --help uses that checkout. The opt-in headline-only commands return genuine Google News RSS titles, publishers, dates, and Google News links labeled as metadata, not extracted article bodies. Default news commands continue to attempt publisher-article extraction.
Source checkout (not yet in the published PyPI version): Extracted-article CLI commands print results without creating JSON files. To opt into file export, pass --save-json-dir with an existing directory, for example uv run mcp-trendpulse-cli keyword "OpenAI" --save-json-dir ./exports. Output filenames include a short URL hash to distinguish similarly titled articles; existing files are never overwritten, and duplicate destinations or export failures produce errors. The --headlines-only mode does not export article JSON.
The operator-only bigquery-sql command generates a fixed-table, partition-filtered SQL preview for Google's official public Top 25 / Rising datasets. It never submits a job or incurs API usage automatically. See docs/bigquery-trends.md for sandbox, query-cost guardrails, and market-coverage limitations.
watch provides opt-in local manual threshold rules and idempotent evaluation of user-supplied normalized interest evidence; it does not poll providers, schedule runs, or send external alerts. See docs/trend-watch.md before using the commands.
CLI commands available since v0.2.43 (also on GitHub main):
brief-pack
keyword
location
site
top
topic
trendingbrief-pack emits the deterministic trend/growth evidence table used for Demand Brief fulfillment. It intentionally leaves the final interpretation and recommendations to the human-produced brief.
The CLI and MCP surfaces are intentionally documented separately because they do not expose the same command set.
Development
Install the project with its development dependencies using your preferred Python environment, then run the unit suite:
python -m pytestThe default pytest configuration excludes live integration tests.
Run live provider tests explicitly with:
python -m pytest tests/integration -m integrationBrowser-marked integration tests require Playwright Chromium to be installed.
Run Ruff checks with:
ruff check .MCP Inspector
Run the published-from-GitHub server through the MCP Inspector:
npx @modelcontextprotocol/inspector uvx --from git+https://github.com/AKzar1el/mcp-trendpulse.git mcp-trendpulseFor a local checkout:
npx @modelcontextprotocol/inspector uv run mcp-trendpulsePackaging
A GitHub Actions workflow builds and publishes Python distributions through PyPI Trusted Publishing when a GitHub release is published. The current stable package can be run with uvx mcp-trendpulse; use the GitHub uvx --from ... form only when you intentionally want repository-head code.
Security notes
Article retrieval is an outbound network feature and is treated as untrusted input. The implementation validates HTTP(S) targets, rejects private and non-routable destinations, checks redirect targets, enforces response-size limits, and applies browser-route validation when Playwright is used.
If you deploy TrendPulse remotely, retain these controls and add deployment-level rate limiting, request timeouts, observability, and resource limits rather than relying only on application defaults.
For responsible disclosure instructions, see SECURITY.md.
Roadmap
Current production-readiness priorities are:
Keep documentation, packaging metadata, and generated MCP manifests coherent with the live tool surface.
Keep CI, package validation, and dependency/runtime coverage aligned with what users actually install.
Preserve provider boundaries so upstream sources can be changed without rewriting the MCP layer.
Harden and operate the existing stateless Streamable HTTP transport while preserving local stdio operation.
Refine the existing smaller hosted tool surface for ChatGPT/Codex against real deployment and buyer evidence.
Complete provider authorization and integrate the hosted service with the DigestSEO application and operational stack.
Package and test the hosted MCP as an OpenAI plugin only after the managed service is production-ready.
License
MIT. See LICENSE.
Available Tools
16 toolsget_article_contentARead-only
Download and parse one specific news article when you already have an article URL. Use it to retrieve article text or metadata or summarize that URL; do not use it for discovery - use the news search tools instead.
Inputs: url (required), full_data, summarize. Returns: result
get_categoriesARead-only
Return a bounded page of Google Trends category IDs and names for use in the cat parameter of trend tools. Use query to find categories by name and offset/limit to page through broader results; do not guess category IDs.
Inputs: limit, query, offset. Returns: result
get_growthARead-only
Estimate momentum for one or more known keywords across requested growth windows. Use this when percentage growth is the goal; use get_trends when the user needs the underlying historical time series.
Inputs: keyword (required), geo, source, percent_growth. Returns: result
get_interest_by_regionARead-only
Return geographic Google Trends interest for one or more known keywords at country, region, city, or DMA resolution. Use this to compare where demand is strongest; use get_trends for interest over time instead.
Inputs: keywords (required), cat, geo, gprop, +3 more. Returns: result
get_news_by_keywordARead-only
Find recent Google News articles for a free-form keyword or phrase. Use this for ad-hoc subject searches; use get_news_by_topic for a predefined topic category or get_news_by_site for one publisher.
Inputs: keyword (required), period, full_data, summarize, +2 more. Returns: result
get_news_by_locationARead-only
Find recent Google News articles about a place-focused location such as a city, state, or country. Use this when geography is the primary filter; use get_news_by_keyword for general subject searches.
Inputs: location (required), period, full_data, summarize, +2 more. Returns: result
get_news_by_siteARead-only
Find recent Google News articles from one publisher domain. Use this when the user wants source-specific coverage; use get_news_by_keyword for cross-publisher subject search.
Inputs: site (required), period, full_data, summarize, +2 more. Returns: result
get_news_by_topicARead-only
Find recent Google News articles from a predefined Google News topic category. Use this for topic category browsing such as BUSINESS, TECHNOLOGY, or SPORTS; use get_news_by_keyword for a free-form query.
Inputs: topic (required), period, full_data, summarize, +2 more. Returns: result
get_ranked_trendsARead-only
Return currently trending keywords ranked by week-over-week growth or volume. Use this when explicit ranked order matters; use get_top_trends for a simpler current feed and get_trends for historical series.
Inputs: geo, sort, limit, source. Returns: result
get_suggestionsARead-only
Return Google Trends autocomplete suggestions for a seed keyword. Use this for lightweight autocomplete or entity candidates; use get_related_queries when you need top or rising demand signals.
Inputs: keyword (required), language. Returns: result
get_top_newsARead-only
Return general headline and top-news stories from Google News without a keyword or topic seed. Use this for a broad news snapshot; use the keyword, location, topic, or site tools when the user gives a filter.
Inputs: period, full_data, summarize, max_results, +1 more. Returns: result
get_top_trendsARead-only
Return a bounded current topic discovery feed from Google Trends RSS, including related news where available. Use this for current top or daily trends; use get_ranked_trends when explicit ranking by growth or volume matters.
Inputs: geo, type, limit. Returns: result
get_trending_termsARead-only
Return terms that are trending now for a geography, optionally with related news metadata. Use this for current trend discovery; use get_trends when the user wants historical interest over time for known keywords.
Inputs: geo, full_data. Returns: result
get_trendsARead-only
Return historical Google Trends interest-over-time points for one or more known keywords. Use this for trajectory and comparisons across a timeframe; values are normalized 0-100 interest scores, not absolute search volume. Use get_trending_terms for what is trending now.
Inputs: keyword (required), cat, geo, source, +2 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Most tools have clear axes of distinction (news vs. trends, and filter-by-keyword/location/topic/site), and the descriptions cross-reference each other explicitly. However, three tools — get_trending_terms, get_top_trends, and get_ranked_trends — all return a current trending feed with only subtle differences, which is a likely source of misselection. get_growth vs. get_trends is also a thin boundary (derived metric vs. underlying series).
Every tool follows a consistent get_<noun_phrase> snake_case pattern, which is easy to scan and predict. The minor inconsistency is noun choice for near-identical concepts (terms vs. trends vs. top_trends vs. ranked_trends), which slightly obscures semantics rather than breaking the pattern.
16 tools is slightly heavy but reasonable for a two-domain server (news search + trends analytics). Each tool covers a distinct retrieval dimension (source filter, geography, time series, region, growth) rather than duplicating surface area. No obviously redundant slot beyond the trending-feed trio.
The surface covers trend discovery, historical series, related queries/topics, suggestions, categories, regional interest, growth, and ranking, plus news by keyword/location/topic/site, top news, and full article retrieval. Minor gaps exist: no explicit publisher/source listing tool and no combined news+trend workflow, but agents can work around these with the provided filters.
Maintenance
Related MCP Connectors
MCP server for Google Veo AI video generation
MCP server for Google search results via SERP API
One MCP server for all web data. Scrape, search, crawl, and AI research in one install.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server providing news article mention volume data, weekly series, growth percentages, and a live Google News feed as an AI tool.MIT
- FlicenseNot gradedqualityDmaintenanceAn AI-powered news aggregator MCP server that fetches live news from multiple sources, provides AI summaries via Claude, and performs sentiment analysis and trending topic detection.-
- AlicenseNot gradedqualityCmaintenanceA persistent news intelligence MCP server that enables AI agents to fetch, store, deduplicate, embed, and semantically query news from Google News across 141 countries and 41 languages.12 PyPI8MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes Google Trends data via BigQuery, enabling LLMs to query top search terms, rising terms, and compare term interest over time for different countries.-