| name | opennews-mcp-news-aggregation |
| description | Real-time crypto news aggregation with AI ratings and trading signals from 84+ sources across news, listings, on-chain, meme, market, and prediction engines |
| triggers | ["get latest crypto news","search for SEC regulation news","show high impact crypto articles","subscribe to real-time blockchain news","find bullish trading signals","get on-chain whale alerts","search news by coin BTC ETH","monitor exchange listing announcements"] |
OpenNews MCP News Aggregation
Skill by ara.so — MCP Skills collection.
OpenNews MCP is a Model Context Protocol server providing real-time access to 84+ crypto and financial news sources across 6 categories (News, Listing, OnChain, Meme, Market, Prediction). Every article includes AI-powered impact scores (0-100), trading signals (long/short/neutral), and bilingual summaries.
Installation
Prerequisites
- Get your API token from https://6551.io/mcp
- Set the token as an environment variable:
export OPENNEWS_TOKEN="your-token-here"
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"opennews": {
"command": "uv",
"args": [
"--directory",
"/path/to/opennews-mcp",
"run",
"opennews-mcp"
],
"env": {
"OPENNEWS_TOKEN": "your-token-here"
}
}
}
}
Using claude mcp add
claude mcp add opennews \
-e OPENNEWS_TOKEN=your-token-here \
-- uv --directory /path/to/opennews-mcp run opennews-mcp
OpenClaw
export OPENNEWS_TOKEN="your-token-here"
cp -r openclaw-skill/opennews ~/.openclaw/skills/
Configuration
The server supports both environment variables and a config.json file in the project root. Environment variables take precedence.
Environment Variables
| Variable | Required | Default | Description |
|---|
OPENNEWS_TOKEN | Yes | - | API Bearer Token from 6551.io |
OPENNEWS_API_BASE | No | https://ai.6551.io | REST API base URL |
OPENNEWS_WSS_URL | No | wss://ai.6551.io/open/news_wss | WebSocket URL |
OPENNEWS_MAX_ROWS | No | 100 | Max results per request |
config.json
{
"api_base_url": "https://ai.6551.io",
"wss_url": "wss://ai.6551.io/open/news_wss",
"api_token": "your-token-here",
"max_rows": 100
}
Data Sources Overview
The platform aggregates 84+ sources across 6 engine types:
- news (53 sources): Bloomberg, Reuters, Financial Times, CNBC, CoinDesk, Cointelegraph, The Block, Twitter/X, Telegram, and more
- listing (9 sources): Binance, Coinbase, OKX, Bybit, Upbit, Robinhood, Hyperliquid listings
- onchain (3 sources): Hyperliquid whale trades, large positions, KOL trades
- meme (1 source): Twitter meme coin sentiment
- market (6 sources): Price changes, funding rates, liquidations, OI changes
- prediction (12 sources): AI correlation, smart money, whale positions, insider patterns
Available Tools
Discovery Tools
get_news_sources
Retrieves the complete engine tree with all categories and sources.
Response structure:
{
"news": {
"Bloomberg": {"description": "Bloomberg — top-tier financial news"},
"CoinDesk": {"description": "CoinDesk — leading crypto media"}
},
"listing": {
"Binance": {"description": "Binance new token listings"}
},
"onchain": {
"Hyperliquid Whale Trade": {"description": "Hyperliquid whale trade alerts"}
}
}
list_news_types
Returns a flat list of all available source codes for filtering.
Response:
["Bloomberg", "Reuters", "CoinDesk", "Binance", "Hyperliquid Whale Trade", ...]
Search Tools
get_latest_news
Fetch the most recent articles across all sources.
Parameters:
limit (optional, default: 20): Number of articles to return
{"limit": 50}
search_news
Full-text keyword search across all sources.
Parameters:
keywords (required): Search query string
limit (optional, default: 20): Number of results
{"keywords": "SEC regulation", "limit": 30}
search_news_by_coin
Filter articles by specific cryptocurrencies.
Parameters:
coins (required): Array of coin symbols (e.g., ["BTC", "ETH"])
limit (optional, default: 20): Number of results
{"coins": ["BTC", "ETH"], "limit": 40}
get_news_by_source
Filter by specific source within an engine type.
Parameters:
engine_type (required): Engine category (news, listing, onchain, meme, market, prediction)
news_type (required): Specific source code (e.g., Bloomberg, Binance)
limit (optional, default: 20): Number of results
{"engine_type": "news", "news_type": "Bloomberg", "limit": 25}
{"engine_type": "listing", "news_type": "Binance", "limit": 10}
get_news_by_engine
Filter articles by engine category.
Parameters:
engine_type (required): Engine category
limit (optional, default: 20): Number of results
{"engine_type": "onchain", "limit": 30}
{"engine_type": "prediction", "limit": 50}
search_news_advanced
Multi-filter search combining coins, keywords, and engine types.
Parameters:
coins (optional): Array of coin symbols
keywords (optional): Search query
engine_types (optional): Array of engine categories
limit (optional, default: 20): Number of results
{
"coins": ["BTC"],
"keywords": "ETF",
"engine_types": ["news"],
"limit": 30
}
{
"coins": ["SOL", "ETH"],
"engine_types": ["onchain"],
"limit": 20
}
AI-Powered Tools
get_high_score_news
Retrieve articles with high AI impact scores.
Parameters:
min_score (optional, default: 80): Minimum impact score (0-100)
limit (optional, default: 20): Number of results
{"min_score": 90, "limit": 15}
{"min_score": 70, "limit": 30}
get_news_by_signal
Filter by AI-generated trading signals.
Parameters:
signal (required): Trading signal type (long, short, neutral)
limit (optional, default: 20): Number of results
{"signal": "long", "limit": 25}
{"signal": "short", "limit": 25}
{"signal": "neutral", "limit": 20}
Real-Time Tools
subscribe_latest_news
Subscribe to WebSocket live feed with optional filters.
Parameters:
engine_types (optional): Object mapping engine types to source codes
- Key: Engine type (
news, listing, onchain, etc.)
- Value: Array of source codes (empty array = all sources in that engine)
coins (optional): Array of coin symbols
has_coin (optional, boolean): Only articles tagged with coins
{
"engine_types": {
"news": ["Bloomberg", "CoinDesk"]
},
"coins": ["BTC", "ETH"],
"has_coin": True
}
{
"engine_types": {
"listing": []
}
}
{
"engine_types": {
"onchain": []
}
}
WebSocket message format (incoming):
{
"jsonrpc": "2.0",
"method": "news.update",
"params": {
"id": "article-id",
"title": "Article title",
"content": "Full article text",
"engine_type": "news",
"news_type": "Bloomberg",
"coins": ["BTC"],
"ai_score": 85,
"ai_signal": "long",
"summary_en": "English summary",
"summary_zh": "中文摘要",
"published_at": "2026-05-16T12:00:00Z"
}
Response Data Structure
All news articles follow this structure:
{
"id": "unique-article-id",
"title": "Article headline",
"content": "Full article text content",
"engine_type": "news",
"news_type": "Bloomberg",
"coins": ["BTC", "ETH"],
"ai_score": 85,
"ai_signal": "long",
"summary_en": "English AI-generated summary",
"summary_zh": "中文AI生成摘要",
"published_at": "2026-05-16T10:30:00Z",
"url": "https://original-source.com/article",
"metadata": {
"author"
Key fields:
ai_score (0-100): AI impact score, higher = more market-moving
ai_signal: Trading direction (long, short, neutral)
coins: Array of related cryptocurrency symbols
engine_type: Category (news, listing, onchain, meme, market, prediction)
news_type: Specific source code
Common Usage Patterns
Pattern 1: Monitor High-Impact News
result = get_high_score_news(min_score=80, limit=10)
bullish = get_news_by_signal(signal="long", limit=15)
advanced = search_news_advanced(
coins=["BTC"],
engine_types=["news", "prediction"],
limit=20
)
Pattern 2: Track Specific Assets
sol_news = search_news_by_coin(coins=["SOL"], limit=30)
sol_onchain = search_news_advanced(
coins=["SOL"],
engine_types=["onchain"],
limit=15
)
sol_listings = search_news_advanced(
coins=["SOL"],
engine_types=["listing"],
limit=10
)
Pattern 3: Source-Specific Monitoring
bloomberg = get_news_by_source(
engine_type="news",
news_type="Bloomberg",
limit=25
)
binance_listings = get_news_by_source(
engine_type="listing",
news_type="Binance",
limit=10
)
whale_trades = get_news_by_source(
engine_type="onchain",
news_type="Hyperliquid Whale Trade",
limit=20
)
Pattern 4: Real-Time Alerts
subscribe_latest_news(
engine_types={
"news": ["Bloomberg", "Reuters", "Financial Times"],
"listing": ["Binance", "Coinbase"],
"onchain": []
},
coins=["BTC", "ETH"],
has_coin=True
)
subscribe_latest_news(
engine_types={
"prediction": []
}
)
Pattern 5: Thematic Research
regulation_news = search_news(
keywords="SEC regulation compliance",
limit=40
)
etf_news = search_news(keywords="ETF", limit=30)
institutional = search_news(
keywords="institutional adoption grayscale blackrock",
limit=25
)
WebSocket Direct Usage
For applications needing direct WebSocket access:
import json
import websockets
import asyncio
import os
async def subscribe_news():
token = os.getenv("OPENNEWS_TOKEN")
url = f"wss://ai.6551.io/open/news_wss?token={token}"
async with websockets.connect(url) as ws:
subscribe_msg = {
"jsonrpc": "2.0",
"id": 1,
"method": "news.subscribe",
"params": {
"engineTypes": {
"news": ["Bloomberg", "CoinDesk"],
"listing": []
},
"coins": ["BTC", "ETH"],
"hasCoin": True
}
}
await ws.send(json.dumps(subscribe_msg))
response = await ws.recv()
print(f"Subscription confirmed: {response}")
async for message in ws:
data = json.loads(message)
if data.get("method") == "news.update":
article = data["params"]
()
()
()
Troubleshooting
Authentication Errors
Problem: 401 Unauthorized or Invalid token
Solution:
- Verify token is correct from https://6551.io/mcp
- Check environment variable is set:
echo $OPENNEWS_TOKEN
- Ensure token has no extra spaces or quotes
- For Claude Desktop, restart the app after config changes
No Results Returned
Problem: Empty results or []
Solution:
- Check if filters are too restrictive (e.g., coin doesn't have recent news)
- Increase
limit parameter
- Verify
engine_type and news_type codes with list_news_types
- Try broader search (e.g., use
get_latest_news first)
WebSocket Connection Issues
Problem: Connection fails or disconnects
Solution:
- Verify token is included in URL query parameter
- Check network allows WebSocket connections (corporate firewalls)
- Implement reconnection logic with exponential backoff
- Validate subscription message format matches JSON-RPC 2.0
Rate Limiting
Problem: 429 Too Many Requests
Solution:
- Reduce request frequency
- Use WebSocket subscriptions instead of polling
- Implement request queuing with delays
- Contact support for higher rate limits if needed
Unexpected Data Format
Problem: Missing fields or unexpected values
Solution:
- Not all articles have
coins array (check has_coin filter)
ai_score and ai_signal are always present but may be null
metadata object is optional and varies by source
- Always validate fields exist before accessing
Example Integration Workflows
Daily Digest Builder
high_impact = get_high_score_news(min_score=85, limit=10)
bullish = [a for a in high_impact if a['ai_signal'] == 'long']
bearish = [a for a in high_impact if a['ai_signal'] == 'short']
print("📈 Bullish Signals:")
for article in bullish:
print(f" • {article['title']} (Score: {article['ai_score']})")
print("\n📉 Bearish Signals:")
for article in bearish:
print(f" • {article['title']} (Score: {article['ai_score']})")
Exchange Listing Tracker
listings = get_news_by_engine(engine_type="listing", limit=50)
by_exchange = {}
for article in listings:
exchange = article['news_type']
if exchange not in by_exchange:
by_exchange[exchange] = []
by_exchange[exchange].append(article)
for exchange, articles in by_exchange.items():
print(f"\n{exchange} ({len(articles)} listings):")
for a in articles:
coins = ', '.join(a.get('coins', []))
print(f" • {coins}: {a['title']}")
Smart Money Tracker
predictions = get_news_by_engine(engine_type="prediction", limit=30)
onchain = get_news_by_engine(engine_type="onchain", limit=30)
smart_money = [
p for p in predictions
if p['news_type'] == 'SMART_MONEY_TRADE' and p['ai_score'] >= 80
]
whale_coins = set()
for article in onchain:
whale_coins.update(article.get('coins', []))
for signal in smart_money:
signal_coins = signal.get('coins', [])
overlap = set(signal_coins) & whale_coins
if overlap:
print(f"⚡ Smart money + whale activity: {', '.join(overlap)}")
print(f" {signal['summary_en']}")