opennews-mcp-news-aggregation

v2026.09.25

Real-time crypto news aggregation with AI ratings and trading signals from 84+ sources across news, listings, on-chain, meme, market, and prediction engines

GitHub
Install command
npx skhub add reason-machines/opennews-mcp-news-aggregation
Markdown
SKILL.md

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

  1. Get your API token from https://6551.io/mcp
  2. 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

VariableRequiredDefaultDescription
OPENNEWS_TOKENYes-API Bearer Token from 6551.io
OPENNEWS_API_BASENohttps://ai.6551.ioREST API base URL
OPENNEWS_WSS_URLNowss://ai.6551.io/open/news_wssWebSocket URL
OPENNEWS_MAX_ROWSNo100Max 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.

# Returns hierarchical structure of all 6 engine types and their sources
# Each source includes metadata like description and type

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.

# Returns array of all source codes across all engine types
# Use these codes in other tool filters

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
# Get latest 50 articles
{"limit": 50}

search_news

Full-text keyword search across all sources.

Parameters:

  • keywords (required): Search query string
  • limit (optional, default: 20): Number of results
# Search for SEC-related news
{"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
# Get Bitcoin and Ethereum news
{"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
# Get Bloomberg news only
{"engine_type": "news", "news_type": "Bloomberg", "limit": 25}

# Get Binance listings
{"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
# Get all on-chain events
{"engine_type": "onchain", "limit": 30}

# Get all prediction signals
{"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
# Bitcoin news from Bloomberg and CoinDesk mentioning "ETF"
{
  "coins": ["BTC"],
  "keywords": "ETF",
  "engine_types": ["news"],
  "limit": 30
}

# Whale activity for SOL and ETH
{
  "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
# Get articles with score >= 90
{"min_score": 90, "limit": 15}

# Get articles with score >= 70
{"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
# Get bullish signals
{"signal": "long", "limit": 25}

# Get bearish signals
{"signal": "short", "limit": 25}

# Get neutral signals
{"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
# Subscribe to Bloomberg and CoinDesk for BTC and ETH
{
  "engine_types": {
    "news": ["Bloomberg", "CoinDesk"]
  },
  "coins": ["BTC", "ETH"],
  "has_coin": True
}

# Subscribe to all listing announcements
{
  "engine_types": {
    "listing": []
  }
}

# Subscribe to whale on-chain activity
{
  "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": "Jane Doe",
    "tags": ["regulation", "ETF"]
  }
}

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

# Get latest high-impact news (score >= 80)
result = get_high_score_news(min_score=80, limit=10)

# Filter for bullish signals only
bullish = get_news_by_signal(signal="long", limit=15)

# Combine: high-impact bullish Bitcoin news
advanced = search_news_advanced(
    coins=["BTC"],
    engine_types=["news", "prediction"],
    limit=20
)
# Then filter results where ai_score >= 80 and ai_signal == "long"

Pattern 2: Track Specific Assets

# Get all Solana-related news
sol_news = search_news_by_coin(coins=["SOL"], limit=30)

# Get Solana on-chain whale activity
sol_onchain = search_news_advanced(
    coins=["SOL"],
    engine_types=["onchain"],
    limit=15
)

# Get Solana listings across all exchanges
sol_listings = search_news_advanced(
    coins=["SOL"],
    engine_types=["listing"],
    limit=10
)

Pattern 3: Source-Specific Monitoring

# Get all Bloomberg articles
bloomberg = get_news_by_source(
    engine_type="news",
    news_type="Bloomberg",
    limit=25
)

# Get Binance listing announcements
binance_listings = get_news_by_source(
    engine_type="listing",
    news_type="Binance",
    limit=10
)

# Get Hyperliquid whale trades
whale_trades = get_news_by_source(
    engine_type="onchain",
    news_type="Hyperliquid Whale Trade",
    limit=20
)

Pattern 4: Real-Time Alerts

# Subscribe to critical sources for BTC and ETH
subscribe_latest_news(
    engine_types={
        "news": ["Bloomberg", "Reuters", "Financial Times"],
        "listing": ["Binance", "Coinbase"],
        "onchain": []  # All on-chain sources
    },
    coins=["BTC", "ETH"],
    has_coin=True
)

# Subscribe to all prediction signals
subscribe_latest_news(
    engine_types={
        "prediction": []
    }
)

Pattern 5: Thematic Research

# Research regulation topics
regulation_news = search_news(
    keywords="SEC regulation compliance",
    limit=40
)

# ETF-related news with high impact
etf_news = search_news(keywords="ETF", limit=30)
# Filter for ai_score >= 75

# Institutional adoption signals
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 to specific filters
        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))
        
        # Receive confirmation
        response = await ws.recv()
        print(f"Subscription confirmed: {response}")
        
        # Listen for updates
        async for message in ws:
            data = json.loads(message)
            if data.get("method") == "news.update":
                article = data["params"]
                print(f"New article: {article['title']}")
                print(f"AI Score: {article['ai_score']}")
                print(f"Signal: {article['ai_signal']}")

Troubleshooting

Authentication Errors

Problem: 401 Unauthorized or Invalid token

Solution:

  1. Verify token is correct from https://6551.io/mcp
  2. Check environment variable is set: echo $OPENNEWS_TOKEN
  3. Ensure token has no extra spaces or quotes
  4. For Claude Desktop, restart the app after config changes

No Results Returned

Problem: Empty results or []

Solution:

  1. Check if filters are too restrictive (e.g., coin doesn't have recent news)
  2. Increase limit parameter
  3. Verify engine_type and news_type codes with list_news_types
  4. Try broader search (e.g., use get_latest_news first)

WebSocket Connection Issues

Problem: Connection fails or disconnects

Solution:

  1. Verify token is included in URL query parameter
  2. Check network allows WebSocket connections (corporate firewalls)
  3. Implement reconnection logic with exponential backoff
  4. Validate subscription message format matches JSON-RPC 2.0

Rate Limiting

Problem: 429 Too Many Requests

Solution:

  1. Reduce request frequency
  2. Use WebSocket subscriptions instead of polling
  3. Implement request queuing with delays
  4. Contact support for higher rate limits if needed

Unexpected Data Format

Problem: Missing fields or unexpected values

Solution:

  1. Not all articles have coins array (check has_coin filter)
  2. ai_score and ai_signal are always present but may be null
  3. metadata object is optional and varies by source
  4. Always validate fields exist before accessing

Example Integration Workflows

Daily Digest Builder

# Get top 10 highest impact articles from past 24 hours
high_impact = get_high_score_news(min_score=85, limit=10)

# Group by signal
bullish = [a for a in high_impact if a['ai_signal'] == 'long']
bearish = [a for a in high_impact if a['ai_signal'] == 'short']

# Format digest
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

# Get all recent listings
listings = get_news_by_engine(engine_type="listing", limit=50)

# Group by exchange
by_exchange = {}
for article in listings:
    exchange = article['news_type']
    if exchange not in by_exchange:
        by_exchange[exchange] = []
    by_exchange[exchange].append(article)

# Display
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

# Combine prediction signals with on-chain data
predictions = get_news_by_engine(engine_type="prediction", limit=30)
onchain = get_news_by_engine(engine_type="onchain", limit=30)

# Filter for high-confidence smart money signals
smart_money = [
    p for p in predictions 
    if p['news_type'] == 'SMART_MONEY_TRADE' and p['ai_score'] >= 80
]

# Cross-reference with whale activity
whale_coins = set()
for article in onchain:
    whale_coins.update(article.get('coins', []))

# Find overlap
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']}")
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.25

Published

Sep 25, 2026

Category

Uncategorized

License

NOASSERTION

Source path

skills/opennews-mcp-news-aggregation

Default branch

main

Latest commit

329e67c

Tree SHA

01fd22f