Provide structured, deduplicated, topic-aware news signals that an agent can use for reasoning about:
👉 Not a feed reader 👉 Not a headline dump 👉 A signal extraction layer
Raw news is useless to agents. Processed news is powerful.
sources/)Mix of:
Examples:
Runs periodically (e.g. every few minutes)
Steps:
normalize fields:
Same story appears across many sources.
Cluster articles by similarity:
Methods:
{
"cluster_id": "...",
"headline": "Canonical headline",
"articles": [...],
"sources": ["Reuters", "Bloomberg"],
"first_seen": "...",
"last_updated": "..."
}
👉 This is your core unit of truth, not individual articles
Adds meaning to clusters.
Examples:
👉 Keep this simple in v1 (don’t over-engineer NLP)
Heuristic:
You need short-term memory:
Optional:
we have a choice of storage possibilites including qdrant, postgresql, couchdb
Keep tools high-level and semantic
get_latest_events“What is happening right now?”
Input:
{
"topic": "crypto",
"limit": 5
}
Output:
[
{
"headline": "...",
"summary": "...",
"entities": ["BTC"],
"sentiment": "positive",
"importance": 0.82,
"sources": ["Reuters", "CoinDesk"],
"timestamp": "..."
}
]
get_events_for_entity“What’s happening with X?”
{
"entity": "BTC"
}
👉 filters clusters by entity
get_event_summary“Explain this event clearly”
{
"event_id": "cluster_id"
}
Output:
👉 This is where you compress multiple articles into one clean narrative
get_news_sentiment“What’s the tone around X?”
{
"entity": "BTC",
"timeframe": "24h"
}
Output:
{
"sentiment": "positive",
"score": 0.64,
"article_count": 42
}
detect_emerging_topics (very valuable)“What is gaining attention?”
Output:
[
{
"topic": "Ethereum ETF",
"trend_score": 0.91,
"related_entities": ["ETH"]
}
]
Avoid:
❌ Bad:
get_raw_articles()
👉 This destroys signal quality for agents
Start simple:
Your MCP should:
This MCP becomes powerful when combined with:
👉 News MCP provides:
causal narratives
Each tool should answer:
“What is happening, and why should I care?”
👉 Only then expose tools
Crypto MCP gives you facts News MCP gives you meaning
But only if you: