Google News MCP Server
MCP server for extracting local news by US zipcode. Features async RSS parsing, geocoding, date filtering, and Claude Desktop integration.
TL;DR: TL;DR: I built an MCP server that extracts local news articles by US zipcode. Uses RSS feed parsing with geocoding to convert zipcodes to locations. Features async concurrent fetching, date filtering, and integrates directly with Claude Desktop.
The Problem
Getting local news programmatically is surprisingly hard:
- Google News API is deprecated and not available for new projects
- SERP APIs cost money for every search query
- RSS feeds are scattered and require knowing the right URLs
- Zipcode-based search isn't natively supported anywhere
I wanted Claude to be able to research local news for newsletter automation without expensive API costs.
My Approach
I built an MCP server that:
- Converts zipcodes to locations using Nominatim geocoding
- Generates targeted search queries combining city, state, and keywords
- Fetches RSS feeds from Google News with multiple query strategies
- Deduplicates and filters results by date range
- Exposes tools via MCP for Claude Desktop integration
The key insight was that Google News still serves RSS feeds at predictable URLs—you just need to construct the right query parameters.
Architecture
Google News MCP Server - Architecture Diagram
Key Features
- Zipcode-based Search: Enter any US zipcode, get local news
- Date Filtering: Filter articles by start/end date
- Async Fetching: 3 concurrent requests by default
- Location Caching: Cached geocoding reduces API calls
- Multiple Query Strategies: Falls back to generic queries if specific ones fail
- Rate Limiting: 0.5s delays between requests to be respectful
Results & Metrics
| Metric | Value |
|---|---|
| Query Generation | 2-5 queries per zipcode |
| Concurrent Requests | 3 (configurable) |
| Request Timeout | 30 seconds |
| Rate Limit Delay | 0.5 seconds |
| Max Articles | 100 per request |
| Cache Duration | Session-based |
What I Learned
The trickiest part was handling RSS feed variability. Google News RSS feeds aren't always consistent:
- Some queries return 0 results
- Date formats vary by source
- Descriptions contain raw HTML
I implemented a fallback strategy:
- Try city + state + "news"
- Try city + state abbreviation + "local"
- Try just the zipcode
- Fall back to generic "local news" + city
The async architecture was essential for performance—making 5 sequential HTTP requests would be too slow for interactive use.
Frequently Asked Questions
What problem does Google News MCP solve?
It lets Claude Desktop access local news without expensive SERP API costs. By using RSS feeds and geocoding, it provides free access to Google News results filtered by location.
What technologies power this project?
Python with the MCP SDK for Claude integration, feedparser for RSS parsing, geopy with Nominatim for zipcode geocoding, and aiohttp for async HTTP requests.
How accurate is the location resolution?
Very accurate for US zipcodes. Nominatim (OpenStreetMap) provides reliable city/state data. The caching layer prevents repeated geocoding calls for the same zipcode.
Frequently Asked Questions
More Projects
View allBuilt by Abhinav Sinha
AI-First Product Manager who builds production-grade tools. Passionate about turning complex problems into elegant solutions using AI, automation, and modern web technologies.