Back to Projects
MCP

Google News MCP Server

MCP server for extracting local news by US zipcode. Features async RSS parsing, geocoding, date filtering, and Claude Desktop integration.

Tech Stack
6 tools
Timeline
Development
Status
In Progress
G

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:

  1. Converts zipcodes to locations using Nominatim geocoding
  2. Generates targeted search queries combining city, state, and keywords
  3. Fetches RSS feeds from Google News with multiple query strategies
  4. Deduplicates and filters results by date range
  5. 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:

  1. Try city + state + "news"
  2. Try city + state abbreviation + "local"
  3. Try just the zipcode
  4. 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

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.
Python with the MCP SDK for Claude integration, feedparser for RSS parsing, geopy with Nominatim for zipcode geocoding, and aiohttp for async HTTP requests.
Very accurate for US zipcodes. Nominatim (OpenStreetMap) provides reliable city/state data. The caching layer prevents repeated geocoding calls for the same zipcode.

More Projects

View all
AS

Built 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.