loading…
Search for a command to run...
loading…
Enables AI assistants to fetch real-time news from Google News RSS feeds with support for headlines, categories, location-based queries, and advanced search ope
Enables AI assistants to fetch real-time news from Google News RSS feeds with support for headlines, categories, location-based queries, and advanced search operators. Features automatic URL decoding, concurrent processing, and intelligent caching for optimized access to global news content.
A Model Context Protocol (MCP) server that exposes Google News RSS feeds as MCP tools, allowing AI assistants (Claude, GPT-4, etc.) to access real-time news data with automatic URL decoding, concurrent processing, and intelligent caching.
Async & Concurrent - All operations run asynchronously with concurrent URL decoding for maximum performance
Smart Caching - LRU cache (1024 entries) for fast repeated URL decodings
Batch URL Decoding - Decode multiple Google News URLs in parallel
Clean Summaries - Extracts plain text from HTML summaries with decoded article links
Token-Oriented Object Notation (TOON) - Support for a compact, token-efficient response format (30-60% reduction)
Multi-language Support - Configure for any language/country combination
Advanced Search - Full support for Google News search operators (site:, when:, intitle:, etc.)
Page Extraction - Fetch and summarize full article content using Jina Reader and Groq
| Tool | Purpose | Parameters |
|---|---|---|
get_top_headlines |
Latest headlines by country | language, country |
get_category_feed |
News by category (TECH, BUSINESS, etc.) | category, language, country |
get_search_feed |
Search news with advanced operators | query, language, country |
get_geo_feed |
Location-specific news | location, language, country |
get_topic_feed |
Trending topic by ID | topic_id, language, country |
decode_google_news_url |
Decode Google News URLs | urls (list) |
list_categories |
Available news categories | (none) |
fetch_content |
Fetch and summarize page content | url, summarize |
Total: 8 tools
Option 1: Using uv (recommended)
# Clone the repository
git clone https://github.com/moltrus/google-news-mcp.git
cd google-news-mcp
# Install with uv
uv sync
Option 2: Using pip with virtual environment
# Clone the repository
git clone https://github.com/moltrus/google-news-mcp.git
cd google-news-mcp
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in development mode
pip install -e .
For Global Usage (Any Method)
To use the google-news-mcp command globally from anywhere:
pip install -e .
This installs the command-line entry point system-wide, allowing you to run google-news-mcp from any directory.
Create a .env file based on .env.example:
# RSS Preferences
GOOGLE_NEWS_LANGUAGE=en
GOOGLE_NEWS_COUNTRY=US
# Response Optimization
# Options: "json" (standard) or "toon" (token-optimized)
RESPONSE_FORMAT=json
# Fetching & Summarization
JINA_API_KEY=your_jina_key
GROQ_API_KEY=your_groq_key
GROQ_MODEL=qwen/qwen3-32b
google-news-mcp
Or directly:
python -m google_news_mcp.server
Fetch the latest top headlines for a country.
Parameters:
language (string, optional): Language code (e.g., 'en', 'fr', 'es'). Defaults to GOOGLE_NEWS_LANGUAGE env var.country (string, optional): Country code (e.g., 'US', 'GB', 'JP'). Defaults to GOOGLE_NEWS_COUNTRY env var.Returns:
{
"title": "Google News",
"link": "https://news.google.com",
"description": "Latest news",
"entries": [
{
"title": "Article Title",
"link": "https://source.com/article",
"published": "2026-03-31T10:00:00Z",
"summary": "Article Title (https://source.com/article)\nAnother Article (https://another.com/news)",
"source": "Source Name"
}
]
}
Notes:
Get news headlines for a specific category.
Parameters:
category (string, required): News category. Valid values:WORLD - International newsNATION - National/local headlinesBUSINESS - Business & financeTECHNOLOGY - Tech & AIENTERTAINMENT - Entertainment & pop cultureSPORTS - SportsSCIENCE - Science & researchHEALTH - Health & medicinelanguage (string, optional): Language code. Defaults to config.country (string, optional): Country code. Defaults to config.Returns: Same as get_top_headlines
Examples:
get_category_feed(category="TECHNOLOGY")
get_category_feed(category="BUSINESS", country="UK")
Search Google News with keyword queries and advanced operators.
Parameters:
query (string, required): Search query with optional operatorslanguage (string, optional): Language code. Defaults to config.country (string, optional): Country code. Defaults to config.Supported Search Operators:
"Artificial Intelligence" (must match exactly)-apple (exclude articles with "apple")site:techcrunch.com (only from domain)when:1h, when:24h, when:7d, when:30d, when:1y, when:1mafter:2026-01-01, before:2026-03-31intitle:merger (term appears in headline only)Tesla OR SpaceX (either term)"GPT-4" site:openai.com when:7d (all together)Returns: Same as get_top_headlines (max ~100 articles)
Query Examples:
"OpenAI Sora" # Exact phrase
AI -hype # Include AI, exclude hype
site:arxiv.org quantum computing # From academic site
when:1h breaking # Last hour
when:24h -rumor Bitcoin # Last 24h, exclude rumors
after:2026-03-01 before:2026-03-31 merger # Date range
intitle:IPO tech companies # IPO in headline
SpaceX OR Blue Origin # Either company OR other
Important: Date filters work on a daily basis (not hourly/minute precision).
Get news for a specific geographic location.
Parameters:
location (string, required): City, state, region, or country (e.g., 'San Francisco', 'California', 'Japan')language (string, optional): Language code. Defaults to config.country (string, optional): Country code. Defaults to config.Returns: Same as get_top_headlines
Examples:
get_geo_feed(location="New York")
get_geo_feed(location="London", language="en")
get_geo_feed(location="Tokyo", country="JP")
Fetch clean page content from a URL using Jina Reader API, with optional summarization via Groq.
Parameters:
url (string, required): Absolute URL to fetch (must start with http:// or https://)summarize (boolean, optional): If true, returns a concise summary via Groq and omits the full raw content to save tokens. Defaults to false.Returns:
{
"url": "https://example.com/article",
"reader_url": "https://r.jina.ai/https://example.com/article",
"content": "Full article text...",
"summary": "Concise summary points...",
"summary_model": "qwen/qwen3-32b",
"summary_error": "Error message if summarization fails"
}
Notes:
summarize is true, the content field is automatically removed from the response to prevent context window bloat.JINA_API_KEY: Required for content extraction.GROQ_API_KEY: Required for summarization.GROQ_MODEL: Optional. Specific model to use (defaults to qwen/qwen3-32b).Decode multiple Google News URLs to their actual article destinations in parallel.
Parameters:
urls (list of strings, required): Array of Google News redirect URLs to decodeReturns:
{
"decoded_urls": [
{
"original_url": "https://news.google.com/articles/CBMi8wFAUU...",
"decoded_url": "https://techcrunch.com/2026/03/31/ai-news"
},
{
"original_url": "https://news.google.com/articles/CBMixAFAUU...",
"decoded_url": "https://theverge.com/2026/3/31/10987654"
}
]
}
Performance:
Examples:
decode_google_news_url(urls=[
"https://news.google.com/articles/CBMi8wFAUU...",
"https://news.google.com/articles/CBMixAFAUU...",
"https://news.google.com/articles/CBMi5gFAUU..."
])
Get news for a specific trending topic by its topic ID.
Google News tracks trending topics as hashes (e.g., companies, events, recurring themes).
Parameters:
topic_id (string, required): Google News topic hash identifierlanguage (string, optional): Language code. Defaults to config.country (string, optional): Country code. Defaults to config.Returns: Same as get_top_headlines
Common Topic IDs:
CAAqKAgKIiJDQkFTRXdvS0wyMHZNSFp3YWpSZlloSUZaVzR0UjBJb0FBUAE - CryptocurrenciesExamples:
get_topic_feed(topic_id="CAAqKAgKIiJDQkFTRXdvS0wyMHZNSFp3YWpSZlloSUZaVzR0UjBJb0FBUAE")
Get the list of available news categories.
Parameters: None
Returns:
{
"categories": [
"WORLD",
"NATION",
"BUSINESS",
"TECHNOLOGY",
"ENTERTAINMENT",
"SPORTS",
"SCIENCE",
"HEALTH"
]
}
asyncio.gather()decode_google_news_url processes lists of URLs concurrentlyArticle summaries are extracted from HTML and returned as plain text with decoded links:
Article Title 1 (https://original-source.com/article1)
Image caption link (https://image-source.com/photo)
Article Title 2 (https://original-source.com/article2)
HTML tags, CDATA wrappers, and entities are stripped for clean, readable text.
get_search_feed(query="when:1h breaking", country="US")
decode_google_news_url(urls=[
"https://news.google.com/articles/CBMi8wFAUU...",
"https://news.google.com/articles/CBMixAFAUU..."
])
get_search_feed(query="site:techcrunch.com AI")
get_geo_feed(location="San Francisco")
get_search_feed(query="SpaceX after:2026-03-01 before:2026-03-31")
get_category_feed(category="HEALTH")
get_topic_feed(topic_id="CAAqJggKIiBDQkFTRWdvSUwyMHZNR3d5YldFeVpYVXVhVzV6U0FpQkFQAQ")
fetch_content(url="https://techcrunch.com/article-url", summarize=true)
This server supports Token-Oriented Object Notation (TOON), a compact data format designed specifically for LLMs.
Standard JSON can be verbose for LLMs due to repeated keys and punctuation. TOON reduces token usage by 30-60% by:
To enable TOON globally for all tool responses, set the following in your .env:
RESPONSE_FORMAT=toon
| JSON (Verbose) | TOON (Compact) |
|---|---|
{"entries": [{"id": 1, "title": "A"}, {"id": 2, "title": "B"}]} |
entries[2,]{id,title}:1,A2,B |
when: filters for temporal orderingfetch_content depends on Jina Reader's ability to parse the target siteMIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"google-news-mcp": {
"command": "npx",
"args": []
}
}
}