Query Google News RSS feeds and search interest over time via Google Trends.
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.
Need a fast evidence check before choosing a topic, keyword, market, product angle, or content bet? During the current launch experiment, Tomi is offering 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.
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_opportunitiesThese names describe the hosted ChatGPT Apps/MCP interface; they remain separate from the current Community MCP tool names.
uvx (recommended)TrendPulse is published on PyPI, so the shortest install path is:
uvx mcp-trendpulse
To run the current repository head instead of the published package:
uvx --from git+https://github.com/AKzar1el/mcp-trendpulse.git mcp-trendpulse
git clone https://github.com/AKzar1el/mcp-trendpulse.git
cd mcp-trendpulse
python -m pip install .
python -m mcp_trendpulse
News/article tools can fall back to Playwright when ordinary retrieval cannot extract a usable article. Installing the Python playwright package does not install Chromium automatically.
For local use:
playwright install chromium
For Linux environments that also require browser system dependencies:
playwright install --with-deps chromium
Trend-only operations do not inherently require Chromium.
Using uvx directly from GitHub:
{
"mcpServers": {
"mcp-trendpulse": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/AKzar1el/mcp-trendpulse.git",
"mcp-trendpulse"
]
}
}
}
{
"mcp": {
"servers": {
"mcp-trendpulse": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/AKzar1el/mcp-trendpulse.git",
"mcp-trendpulse"
]
}
}
}
}
Cursor supports global and project MCP configuration. Add the server to the relevant mcp.json configuration:
{
"mcpServers": {
"mcp-trendpulse": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/AKzar1el/mcp-trendpulse.git",
"mcp-trendpulse"
]
}
}
}
Requires uv/uvx. The install runs the current community MCP directly from this GitHub repository; it does not use the unreleased hosted surface.
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.
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_TRENDS_DELAY=2.0
GOOGLE_TRENDS_DELAY controls the request delay used by the current Trends provider. Proxy variables can be useful when the upstream service rate-limits or blocks a particular network.
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.
The community MCP server currently exposes 16 tools.
| Tool | Purpose |
|---|---|
get_news_by_keyword | Find recent news articles matching a keyword. |
get_news_by_location | Find recent news associated with a location. |
get_news_by_topic | Find recent news for a supported Google News topic. |
get_top_news | Retrieve top Google News stories. |
get_news_by_site | Find recent news from a specific publisher domain. |
get_article_content | Download, validate, extract, and optionally summarize one article URL. |
| Tool | Purpose |
|---|---|
get_trending_terms | Retrieve current trending terms for a geographic target. |
get_trends | Retrieve interest-over-time points for one or more keywords. |
get_growth | Calculate search-interest growth over requested windows. |
get_ranked_trends | Rank current trends by growth or volume. |
get_top_trends | Retrieve a top-trends feed without supplying a keyword. |
get_interest_by_region | Compare keyword interest across geographic regions. |
get_related_queries | Retrieve top and rising related search queries. |
get_related_topics | Retrieve top and rising related Google Trends topics. |
get_suggestions | Resolve autocomplete/topic suggestions for a query. |
get_categories | Retrieve Google Trends category IDs and names. |
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.
The separate Click CLI exposes a smaller news-oriented command set than the MCP server:
uv run mcp-trendpulse-cli --help
Current CLI commands:
keyword
location
top
topic
trending
The CLI and MCP surfaces are intentionally documented separately because they do not expose the same command set.
Install the project with its development dependencies using your preferred Python environment, then run the unit suite:
python -m pytest
The default pytest configuration excludes live integration tests.
Run live provider tests explicitly with:
python -m pytest tests/integration -m integration
Browser-marked integration tests require Playwright Chromium to be installed.
Run Ruff checks with:
ruff check .
Run the published-from-GitHub server through the MCP Inspector:
npx @modelcontextprotocol/inspector uvx --from git+https://github.com/AKzar1el/mcp-trendpulse.git mcp-trendpulse
For a local checkout:
npx @modelcontextprotocol/inspector uv run mcp-trendpulse
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.
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.
Current production-readiness work is focused on:
MIT. See LICENSE.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx mcp-trendpulseMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-akzar1el-mcp-trendpulse": {
"command": "uvx",
"args": [
"mcp-trendpulse"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceGoogle News & Trends MCP works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.