Server data from the Official MCP Registry
Aggregated news monitoring across Swiss public media RSS feeds
Aggregated news monitoring across Swiss public media RSS feeds
news-monitor-mcp is a well-architected MCP server for news monitoring via WorldNewsAPI with strong security practices. The codebase demonstrates proper authentication handling (Bearer tokens for HTTP mode, API key via environment variables), input validation, comprehensive logging with redaction, and read-only operations. Minor code quality observations exist around broad exception handling and implicit dependencies, but these do not materially impact security posture. Permissions (network_http, env_vars, file_write for alerts) appropriately match the server's purpose. Supply chain analysis found 8 known vulnerabilities in dependencies (0 critical, 5 high severity). Package verification found 1 issue.
3 files analyzed Β· 15 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-malkreide-news-monitor-mcp": {
"args": [
"news-monitor-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
π¨π Part of the Swiss Public Data MCP Portfolio
MCP server for global news monitoring, media analysis and sentiment tracking via WorldNewsAPI β full-text search across 150+ countries, German/English sentiment analysis, top headlines, GL briefings, newspaper front pages and geo-search. API key required.
news-monitor-mcp transforms any AI assistant into a proactive media intelligence agent. The server connects LLMs like Claude with global news data: from Swiss institutional reputation monitoring to weekly leadership briefings and trend detection across categories.
Source: WorldNewsAPI (worldnewsapi.com) β the only freely available news API with German-language sentiment analysis.
API key required. Get a free key at worldnewsapi.com/console (1,000 calls/month free tier).
Anchor demo query: "How has the Schulamt ZΓΌrich been portrayed in the media over the last 30 days, and what is the overall sentiment?"
| # | Tool | Description |
|---|---|---|
| 1 | news_search | Full-text news search in 150+ countries |
| 2 | news_top_headlines | Top headlines by country and language |
| 3 | news_sentiment_monitor | Sentiment analysis for entity or topic |
| 4 | news_media_briefing | Multi-topic weekly briefing report |
| 5 | news_retrieve_article | Fetch full article by ID |
| 6 | news_search_sources | Find available news sources by name/country |
| 7 | news_front_pages | Digital newspaper front pages |
| 8 | news_trend_radar | Category-based trend detection per country |
| 9 | news_geo_search | Location-specific news search |
| 10 | news_alert_create | Create a persistent alert (sentiment / volume / keyword) |
| 11 | news_alert_list | List configured alerts with status |
| 12 | news_alert_check | Evaluate alerts against current data |
| 13 | news_alert_delete | Permanently remove an alert |
| 14 | news_cache_stats | Cache hit-rate and entries by type |
| 15 | news_cache_clear | Clear cache (entirely or per tool type) |

"Create a media briefing for: AI in education, Volksschule ZΓΌrich, school digitalisation"
| Source | API Type | Content |
|---|---|---|
| WorldNewsAPI | REST JSON | 150+ countries, 50+ languages, full text, sentiment |
uv or pip# Recommended: uvx (no install step needed)
uvx news-monitor-mcp
# Alternative: pip
pip install news-monitor-mcp
# Start the server (stdio mode for Claude Desktop)
WORLD_NEWS_API_KEY=your-key uvx news-monitor-mcp
Try it immediately in Claude Desktop:
"Show me the top news from Switzerland today" "How is the Schulamt ZΓΌrich covered in German-language media this month?" "Create a media briefing on: Volksschule ZΓΌrich, AI in education, school digitalisation"
| Variable | Default | Description |
|---|---|---|
WORLD_NEWS_API_KEY | β | Required. API key from worldnewsapi.com |
MCP_TRANSPORT | stdio | Transport: stdio or streamable_http |
MCP_HOST | 127.0.0.1 | HTTP bind host. Use 0.0.0.0 only inside a container. |
MCP_PORT | 8000 | Port for HTTP transport |
MCP_BEARER_TOKEN | β | Required in --http mode. Bearer token clients must present in Authorization: Bearer <token>. Generate via python -c "import secrets; print(secrets.token_urlsafe(32))". |
MCP_ALLOWED_ORIGINS | β | Optional CSV allowlist for the Origin header (DNS-rebinding protection). Example: https://claude.ai. |
LOG_LEVEL | INFO | Log level: DEBUG / INFO / WARNING / ERROR. Logs are emitted as JSON to stderr with automatic redaction of api-key= query params and Authorization: Bearer headers. |
NEWS_MONITOR_ALERTS_DIR | ~/.news-monitor-mcp | Directory that holds alerts.json. The parent dir must not be a symlink (refused at startup as a defense against path-injection). File is created with mode 0o600, directory with 0o700. |
NEWS_MONITOR_ALERTS_FILE | β | (Back-compat) explicit path to the alerts file. Same symlink check applies. Prefer NEWS_MONITOR_ALERTS_DIR. |
MCP_ALERT_RETENTION_DAYS | 90 | Alerts older than this many days are deleted on server start (Privacy default per docs/privacy-dsg.md). Set to 0 to disable retention. |
MCP_CACHE_MAX_PER_TYPE | 1000 | Maximum cache entries per tool type. When exceeded, the least-recently-used entry of that type is evicted. Set to 0 to disable the cap (unbounded growth β only safe for short-lived processes). |
MCP_CACHE_SWEEP_SECONDS | 300 | Interval for the background task that removes TTL-expired entries from the cache. Set to 0 to disable the sweep (expired entries are still pruned lazily on news_cache_stats). |
{
"mcpServers": {
"news-monitor": {
"command": "uvx",
"args": ["news-monitor-mcp"],
"env": {
"WORLD_NEWS_API_KEY": "your-api-key-here"
}
}
}
}
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAfter restarting Claude Desktop, all tools are available. Example queries:
For use via claude.ai in the browser (e.g. on managed workstations without local software):
Authentication is mandatory. The HTTP transport refuses any request without a valid Authorization: Bearer <token> header. Generate a token once and keep it secret:
python -c "import secrets; print(secrets.token_urlsafe(32))"
Render.com (recommended):
WORLD_NEWS_API_KEY β your WorldNewsAPI keyMCP_BEARER_TOKEN β the token generated aboveMCP_HOST=0.0.0.0 β bind on all interfaces inside the containerMCP_ALLOWED_ORIGINS=https://claude.ai (optional, recommended)https://your-app.onrender.com/mcp and configure the Bearer token as the auth header.# Local HTTP mode (binds 127.0.0.1 by default)
WORLD_NEWS_API_KEY=your-key \
MCP_BEARER_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))") \
news-monitor-mcp --http --port 8000
# Verify auth is enforced
curl -i http://127.0.0.1:8000/mcp # β 401
curl -i -H "Authorization: Bearer $MCP_BEARER_TOKEN" http://127.0.0.1:8000/mcp
This server is currently single-process / single-replica:
NewsCache). If you run multiple Render or Kubernetes replicas, each replica has its own cache β hit-rates drop linearly with the replica count.alerts.json (defaults to /data inside the container). Multiple replicas mounting the same persistent volume serialize via fcntl.flock, but for true cluster operation a shared store (Redis / Postgres) is needed β see the open finding SCALE-STATEFUL./data if you need alerts to survive restarts. For Render Free + alerts you must accept that the cache is lost on every wake-up.The MCP_CACHE_MAX_PER_TYPE cap (default 1000 entries / type) and the background sweep (MCP_CACHE_SWEEP_SECONDS, default 5 min) prevent the in-process cache from growing without bound.
A non-root multi-stage Dockerfile is included and built on every CI run. Inside the container the server defaults to --http, binds 0.0.0.0:8000, persists alerts under /data, and refuses to start if MCP_BEARER_TOKEN is missing.
docker build -t news-monitor-mcp .
docker run --rm -p 8000:8000 \
-e WORLD_NEWS_API_KEY=your-key \
-e MCP_BEARER_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))") \
-e MCP_ALLOWED_ORIGINS=https://claude.ai \
-v news-monitor-data:/data \
news-monitor-mcp
βββββββββββββββββββ ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ
β Claude / AI ββββββΆβ News Monitor MCP ββββββΆβ WorldNewsAPI β
β (MCP Host) βββββββ (MCP Server) βββββββ REST JSON API β
βββββββββββββββββββ β β β 150+ countries β
β 9 Tools β β 50+ languages β
β Stdio | Streamable HTTP β β Sentiment DE/EN β
ββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββ
news-monitor-mcp/
βββ src/
β βββ news_monitor_mcp/
β βββ __init__.py
β βββ server.py # All 9 tools
βββ tests/
β βββ __init__.py
β βββ test_server.py # 20 tests (unit + live)
βββ pyproject.toml
βββ CHANGELOG.md
βββ CONTRIBUTING.md
βββ LICENSE
βββ README.md # This file (English)
βββ README.de.md # German version
# Unit tests (no API key required)
PYTHONPATH=src pytest tests/ -m "not live"
# Integration tests (live API calls, API key required)
PYTHONPATH=src pytest tests/ -m "live"
"How has the Schulamt ZΓΌrich been portrayed in media over the last 30 days?"
β news_sentiment_monitor(entity="Schulamt ZΓΌrich", language="de", days_back=30)
"Create a weekly media briefing for leadership"
β news_media_briefing(topics=["Volksschule ZΓΌrich", "KI Bildung", "Schuldigitalisierung"])
"What are Swiss media reporting on school digitalisation?"
β news_search(query="Schuldigitalisierung", language="de", source_country="ch")
"What are the current tech trends in Swiss press this week?"
β news_trend_radar(category="technology", source_country="ch", language="de")
"How are AI developments in education covered internationally?"
β news_search(query="AI education classroom", language="en", number=20)
"Compare Swiss and German media coverage of AI regulation"
β news_search(query="KI Regulierung", source_country="ch", language="de")
β news_search(query="KI Regulierung", source_country="de", language="de")
"What is being reported about ZΓΌrich school infrastructure?"
β news_geo_search(location="ZΓΌrich", query="Schule")
"Show today's front pages of Swiss newspapers"
β news_front_pages(source_country="ch")
β More use cases by audience β
WorldNewsAPI offers German-language sentiment analysis β rare among news APIs:
| Score | Label | Meaning |
|---|---|---|
| > 0.3 | positiv π | Positive coverage |
| β0.3 to 0.3 | neutral π | Neutral / factual coverage |
| < β0.3 | negativ π | Critical / negative coverage |
β οΈ Sentiment is only available for German (de) and English (en).
12 of the 15 tools carry readOnlyHint: true. All 9 monitoring tools (search,
headlines, sentiment, briefing, article, sources, front_pages, trend, geo) are
fully read-only and issue GET requests to WorldNewsAPI only. The 3 exceptions
are local-only operations: news_alert_create and news_alert_delete (write/
delete ~/.news-monitor-mcp/alerts.json) and news_cache_clear (clears
in-memory cache). None of the 15 tools modify any external data source.
| Constraint | WorldNewsAPI Free Tier | Paid Plans |
|---|---|---|
| Calls/month | 1,000 | Up to 1M |
| Articles/call | 10 | Up to 100 |
| Historical depth | 30 days | Extended |
| Timeout per call | 30 seconds | 30 seconds |
The TTL cache (v0.2+) reduces redundant calls by up to 80%.
~/.news-monitor-mcp/alerts.json β on your machine only, never transmitted.Users must comply with:
This MCP server is an independent open-source project and is not affiliated with WorldNewsAPI.
news-monitor-mcp can be combined with other servers in the portfolio:
| Combination | Use Case |
|---|---|
+ fedlex-mcp | Law meets discourse: legal framework + media coverage |
+ global-education-mcp | OECD stats + current media context |
+ srgssr-mcp | Swiss public media + international news comparison |
+ swiss-environment-mcp | Environmental data + media reporting |
+ swiss-statistics-mcp | BFS statistics + current media narrative |
+ zurich-opendata-mcp | City data + local media coverage |
See CHANGELOG.md
docs/isds-klassifikation.md for the ISDS / Schutzbedarfsfeststellungdocs/privacy-dsg.mdaudits/MIT License β see LICENSE
Hayal Oezkan Β· malkreide
Be the first to review this server!
by Modelcontextprotocol Β· Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol Β· Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno Β· Developer Tools
Toleno Network MCP Server β Manage your Toleno mining account with Claude AI using natural language.