MCP server that collects articles from 1100+ RSS feeds across 150+ countries
Project description
MCP News Feeds
An MCP server that collects articles from over 1100 RSS feeds distributed across 150+ countries, sourced from the community registry news-feed-list-of-countries.
Quick Start (uvx)
No installation needed — just configure your MCP client:
{
"mcpServers": {
"news-feeds": {
"command": "uvx",
"args": ["mcp-news"]
}
}
}
uvx will automatically download and run the server.
Installation from source
git clone https://github.com/benjaminmarchand/mcp-news.git
cd mcp-news
pip install -e .
Then configure your MCP client:
{
"mcpServers": {
"news-feeds": {
"command": "mcp-news"
}
}
}
Usage
The server runs on stdio and exposes 6 tools:
| Tool | Description |
|---|---|
news_feed |
Retrieves recent articles, filterable by country, time window, and limit |
news_fetch_article |
Returns the full, untruncated description of a specific article |
news_feed_countries |
Lists all available countries with the number of feeds per country |
news_feed_health |
Shows feed reliability stats: healthy, unhealthy, and dead feeds |
news_feed_invalidate_cache |
Clears the registry cache to force a reload |
Example Calls
Retrieve French news from the last 12 hours:
{
"name": "news_feed",
"arguments": {
"countries": ["France"],
"hours": 12,
"limit": 50
}
}
Get the full description of an article:
{
"name": "news_fetch_article",
"arguments": {
"url": "https://example.com/article/123"
}
}
Check feed health for a country:
{
"name": "news_feed_health",
"arguments": {
"country": "France"
}
}
List available countries:
{
"name": "news_feed_countries"
}
Response Truncation
Responses are automatically truncated to fit MCP client limits (~40,000 characters). When the payload is too large, descriptions are progressively shortened, then articles are dropped from the tail. Use news_fetch_article to retrieve the full description of a specific article.
Feed Health Tracking
The server tracks the success/failure history of each feed in ~/.mcp-news/feed_health.json. Feeds with 10 or more consecutive errors are automatically skipped during collection. Use the news_feed_health tool to inspect feed reliability.
Cache
The RSS feed registry is cached in ~/.mcp-news/cache/. The cache is valid for 24 hours and refreshes automatically when the remote registry changes (SHA-1 comparison).
To force a refresh:
export NEWS_FEED_BYPASS_CACHE=true
Command-Line Options
| Option | Description |
|---|---|
--verbose |
Enable verbose logging and write fetched articles to ~/.mcp-news/logs/ as timestamped JSON files |
Example with verbose mode:
{
"mcpServers": {
"news-feeds": {
"command": "uvx",
"args": ["mcp-news", "--verbose"]
}
}
}
Testing
pip install -e ".[dev]"
pytest tests/
Environment Variables
| Variable | Description |
|---|---|
NEWS_FEEDS_JSON_URL |
Override the feeds registry URL (default: raw GitHub URL from cyberbobjr/news-feed-list-of-countries) |
NEWS_FEED_BYPASS_CACHE |
Set to true to ignore cache and always re-download the registry |
MCP_NEWS_DATA_DIR |
Override the data directory (default: ~/.mcp-news) |
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_news-1.0.0.tar.gz.
File metadata
- Download URL: mcp_news-1.0.0.tar.gz
- Upload date:
- Size: 16.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8f89b8ac5e00a9cca042ea993d3b54054f781a30c9e4029bb74f7cb01d80fbb7
|
|
| MD5 |
9c8d25ba8616e40aa0bd9a012faf6f55
|
|
| BLAKE2b-256 |
f27bd8775751a67832e68c87164ed8bf541e14fc1fd14346667d39001e7166dc
|
File details
Details for the file mcp_news-1.0.0-py3-none-any.whl.
File metadata
- Download URL: mcp_news-1.0.0-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2535f3f0c5648b9571eb449d5192430c103386fbceb8e0ec639fc497412c8b15
|
|
| MD5 |
9bec1247a44703b32f9ec7111cafb068
|
|
| BLAKE2b-256 |
ce5b9932e8307db489d703aaa84962a6448521ca3215b6c858df1f8690fb981b
|