Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1762f473aa | |||
| f5a2c37e4d | |||
| 9c6b508c23 | |||
| 111e64faad | |||
| fc26207040 | |||
| 6cbbd7412f | |||
| 188140679b | |||
| f20d81ce4e | |||
| 4e8266b305 | |||
| f56b2354be | |||
| 3233e3fea4 | |||
| e4f40e1edd | |||
| f45afe3270 | |||
| c38b7b1c8c | |||
| cf722fcb25 | |||
| f38eb1fd85 | |||
| ce08698e11 | |||
| 836a3341da | |||
| d608baad52 | |||
| 28e2968612 |
+40
@@ -0,0 +1,40 @@
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# API tokens
|
||||
*.token
|
||||
tokens/
|
||||
|
||||
# Logs
|
||||
logs/
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# IDE
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Temporary files
|
||||
tmp/
|
||||
temp/
|
||||
*.tmp
|
||||
|
||||
# Node modules (if using npm/yarn)
|
||||
node_modules/
|
||||
|
||||
__pycache__
|
||||
|
||||
# Build outputs
|
||||
dist/
|
||||
build/
|
||||
@@ -1,6 +1,6 @@
|
||||
<p align="center">
|
||||
<b>OpenNews MCP Server</b><br>
|
||||
Crypto News Aggregation · AI Ratings · Trading Signals · Real-time Updates
|
||||
85+ Real-time Data Sources · 6 Engine Categories · AI Ratings · Trading Signals
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -54,6 +54,151 @@ Steps:
|
||||
|
||||
---
|
||||
|
||||
## Data Sources — 85+ Sources Across 6 Categories
|
||||
|
||||
| Category | Count | Key Sources |
|
||||
|----------|-------|-------------|
|
||||
| **News** | 55 | Bloomberg, Reuters, Financial Times, CNBC, CNN, BBC, Fox Business, CoinDesk, Cointelegraph, The Block, Blockworks, Decrypt, DlNews, A16Z, TechCrunch, Wired, Politico, Business Insider, Twitter/X, Telegram, Weibo, Truth Social, U.S. Treasury, ECB, TASS, Handelsblatt, Welt, Ambrey, Morgan Stanley, PR Newswire, GlobeNewswire, Business Wire, Coinbase, and more |
|
||||
| **Listing** | 9 | Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood, Hyperliquid, Aster |
|
||||
| **OnChain** | 2 | Hyperliquid Whale Trade, Hyperliquid Large Position |
|
||||
| **Meme** | 1 | Twitter meme coin social sentiment |
|
||||
| **Market** | 6 | Price Change, Funding Rate, Funding Rate Difference, Large Liquidation, Market Trends, OI Change |
|
||||
| **Prediction** | 12 | CORRELATION_LOGICAL, SMART_MONEY_TRADE, PRICE_SPIKE, CLUSTER_ENTRY, WHALE_POSITION, NEW_WALLET_TRADE, INSIDER_PATTERN, CORRELATION_NARRATIVE, CORRELATION_HEDGE, CORRELATION_ENTITY_GEO, CORRELATION_CAUSAL, SETTLEMENT_ARBITRAGE |
|
||||
|
||||
All articles are **AI-analyzed** with impact score (0-100), trading signal (long/short/neutral), and bilingual summaries (EN/ZH).
|
||||
|
||||
<details>
|
||||
<summary><b>News — 55 sources</b> (engineType: "news") — Premium financial & crypto media, government agencies, social platforms</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Bloomberg | Bloomberg — top-tier financial news |
|
||||
| Reuters | Reuters — global wire service |
|
||||
| Financial Times | Financial Times — premium business news |
|
||||
| CNBC | CNBC — financial television |
|
||||
| CNN | CNN — US news network |
|
||||
| BBC | BBC — British Broadcasting Corporation |
|
||||
| Fox Business | Fox Business — US financial news |
|
||||
| CoinDesk | CoinDesk — leading crypto media |
|
||||
| Cointelegraph | Cointelegraph — crypto media |
|
||||
| The Block | The Block — crypto data & journalism |
|
||||
| Blockworks | Blockworks — crypto-native media |
|
||||
| Decrypt | Decrypt — crypto & web3 media |
|
||||
| DlNews | DL News — crypto investigative journalism |
|
||||
| A16Z | a16z (Andreessen Horowitz) — leading crypto VC |
|
||||
| TechCrunch | TechCrunch — tech & startup news |
|
||||
| Wired | Wired magazine — tech journalism |
|
||||
| Politico | Politico — US & EU political news |
|
||||
| Business Insider | Business Insider |
|
||||
| Twitter/X | Twitter/X posts from crypto influencers |
|
||||
| X / Twitter Profile | Twitter/X profile changes (name, bio updates) |
|
||||
| Telegram | Telegram channels |
|
||||
| Weibo | Weibo — Chinese social media |
|
||||
| Truth Social | Truth Social — Trump's social platform |
|
||||
| U.S. Treasury | U.S. Treasury Department — official statements |
|
||||
| U.S. Trade Representative | USTR — trade policy announcements |
|
||||
| ECB | European Central Bank — official communications |
|
||||
| TASS | TASS — Russian state news agency |
|
||||
| Interfax | Interfax — Russian news agency |
|
||||
| Handelsblatt | Handelsblatt — German business newspaper |
|
||||
| Hadelsblatt | Hadelsblatt — German business |
|
||||
| Welt | Welt — German newspaper |
|
||||
| Telegraph | The Telegraph — UK news |
|
||||
| MS NOW | Morgan Stanley NOW — institutional research |
|
||||
| Ambrey | Ambrey — maritime & geopolitical intelligence |
|
||||
| PR Newswire | PR Newswire — press releases |
|
||||
| GlobeNewswire | GlobeNewswire — press releases |
|
||||
| Business Wire | Business Wire — press releases |
|
||||
| Coinbase | Coinbase announcements & blog |
|
||||
| Binance | Binance announcements & blog |
|
||||
| jin10 | Jin10 — Chinese financial data flash news |
|
||||
| The Big Whale | The Big Whale — European crypto media |
|
||||
| The Verge | The Verge — tech media |
|
||||
| Techinasia | Tech in Asia — Asian tech news |
|
||||
| Medium | Medium blog posts |
|
||||
| Chainwire | Chainwire — crypto press releases |
|
||||
| Token Relations | Token relations & partnerships |
|
||||
| Crypto Narratives | Crypto narrative tracking |
|
||||
| Crypto in America | Crypto in America coverage |
|
||||
| 6551News | 6551 platform original analysis |
|
||||
| BWEnews | BWE news wire |
|
||||
| AGGRNEWS | Aggregated news feed |
|
||||
| Velo | Velo data intelligence |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Listing — 9 sources</b> (engineType: "listing") — Token listing announcements from major exchanges</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Binance | Binance new token listings |
|
||||
| Coinbase | Coinbase new token listings |
|
||||
| OKX | OKX new token listings |
|
||||
| Bybit | Bybit new token listings |
|
||||
| Upbit | Upbit (Korean exchange) listings |
|
||||
| Bithumb | Bithumb (Korean exchange) listings |
|
||||
| Robinhood | Robinhood crypto listings |
|
||||
| Hyperliquid | Hyperliquid perp listings |
|
||||
| Aster | Aster exchange listings |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>OnChain — 2 sources</b> (engineType: "onchain") — Hyperliquid whale trades and large position activity</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Hyperliquid Whale Trade | Hyperliquid whale trade alerts |
|
||||
| Hyperliquid Large Position | Hyperliquid large position changes |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Meme — 1 source</b> (engineType: "meme") — Meme coin social sentiment tracking</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Twitter | Twitter/X meme coin discussions & viral posts |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Market — 6 sources</b> (engineType: "market") — Market anomaly detection and quantitative signals</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Price Change | Significant price movements (pumps/dumps) |
|
||||
| Funding Rate | Funding rate anomalies (perp futures) |
|
||||
| Funding Rate Difference | Cross-exchange funding rate divergences |
|
||||
| Large Liquidation | Large liquidation events |
|
||||
| Market Trends | Overall market trend shifts |
|
||||
| OI Change | Open interest significant changes |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Prediction — 12 sources</b> (engineType: "prediction") — AI-powered prediction and correlation signals</summary>
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| CORRELATION_LOGICAL | Logical correlation analysis |
|
||||
| SMART_MONEY_TRADE | Smart money trade tracking |
|
||||
| PRICE_SPIKE | Price spike detection |
|
||||
| CLUSTER_ENTRY | Cluster entry signals |
|
||||
| WHALE_POSITION | Whale position monitoring |
|
||||
| NEW_WALLET_TRADE | New wallet trade detection |
|
||||
| INSIDER_PATTERN | Insider pattern recognition |
|
||||
| CORRELATION_NARRATIVE | Narrative correlation analysis |
|
||||
| CORRELATION_HEDGE | Hedge correlation analysis |
|
||||
| CORRELATION_ENTITY_GEO | Geopolitical entity correlation |
|
||||
| CORRELATION_CAUSAL | Causal correlation analysis |
|
||||
| SETTLEMENT_ARBITRAGE | Settlement arbitrage signals |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## What Can It Do?
|
||||
|
||||
After connecting, just tell your AI assistant:
|
||||
@@ -75,17 +220,24 @@ After connecting, just tell your AI assistant:
|
||||
|
||||
| Category | Tool | Description |
|
||||
|----------|------|-------------|
|
||||
| Discovery | `get_news_sources` | Get all news source category tree |
|
||||
| | `list_news_types` | All available news source codes |
|
||||
| Search | `get_latest_news` | Latest articles |
|
||||
| | `search_news` | Keyword search |
|
||||
| | `search_news_by_coin` | By coin (BTC, ETH, SOL...) |
|
||||
| | `get_news_by_source` | By engine type and source |
|
||||
| | `get_news_by_engine` | By type (news, listing, onchain, meme, market) |
|
||||
| | `search_news_advanced` | Advanced search (multiple filters) |
|
||||
| AI | `get_high_score_news` | Articles with score >= threshold |
|
||||
| | `get_news_by_signal` | By signal: long / short / neutral |
|
||||
| Real-time | `subscribe_latest_news` | WebSocket real-time collection |
|
||||
| Discovery | `get_news_sources` | Full engine tree — all 6 categories and 85+ sources with metadata |
|
||||
| | `list_news_types` | Flat list of all source codes for filtering |
|
||||
| Search | `get_latest_news` | Latest articles across all 85+ sources |
|
||||
| | `search_news` | Full-text keyword search across all sources |
|
||||
| | `search_news_by_coin` | By coin (BTC, ETH, SOL...) across all sources |
|
||||
| | `get_news_by_source` | By specific source (e.g. engine_type="news", news_type="Bloomberg") |
|
||||
| | `get_news_by_engine` | By category: news, listing, onchain, meme, market, prediction |
|
||||
| | `search_news_advanced` | Multi-filter: coins + keywords + engine types combined |
|
||||
| AI | `get_high_score_news` | High AI impact score articles (0-100 scale) |
|
||||
| | `get_news_by_signal` | By AI trading signal: long / short / neutral |
|
||||
| Finance | `search_companies` | Search public company candidates by keyword, ticker, CIK, or fuzzy name |
|
||||
| | `get_company_info` | Resolve a company and list available SEC filings, research reports, transcripts, and financial fields |
|
||||
| | `get_company_report_text` | Fetch SEC filing, third-party research report, or earnings-call transcript text |
|
||||
| | `get_crypto_holdings` | Query wallet-visible on-chain holdings evidence for an institution or address |
|
||||
| | `get_crypto_holding_changes` | Query adjacent-snapshot on-chain holdings changes |
|
||||
| Real-time | `subscribe_latest_news` | WebSocket live feed with coin & engine type filters |
|
||||
|
||||
> For a comprehensive usage guide with detailed examples, see [Knowledge Guide](./knowledge/guide.md).
|
||||
|
||||
---
|
||||
|
||||
@@ -167,7 +319,7 @@ Subscribe to real-time crypto news updates.
|
||||
|
||||
**Filter Parameters** (all optional):
|
||||
- `engineTypes`: Object mapping engine type to news type codes
|
||||
- Key: Engine type (e.g., `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`)
|
||||
- Key: Engine type (e.g., `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`, `"prediction"`)
|
||||
- Value: Array of news type codes (e.g., `["Bloomberg", "CoinDesk"]`)
|
||||
- Empty array `[]` means all news types under that engine
|
||||
- Use `list_news_types` tool to get available codes
|
||||
@@ -203,7 +355,7 @@ When new news matches your filters, the server pushes:
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "spot",
|
||||
"market_type": "cex",
|
||||
"match": "title"
|
||||
}
|
||||
],
|
||||
@@ -226,20 +378,102 @@ For news with AI analysis (if subscribed):
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [...],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
},
|
||||
{
|
||||
"symbol": "ETH",
|
||||
"market_type": "cex",
|
||||
"score": 45,
|
||||
"signal": "short",
|
||||
"grade": "B"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "Chinese summary",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Server Push - Strategy Triggered
|
||||
|
||||
> **Requires Max subscription.** Create and manage your strategies at [https://www.newsliquid.com/strategy](https://www.newsliquid.com/strategy).
|
||||
|
||||
When a user-defined strategy is triggered (e.g., price alert, keyword match), the server pushes:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "strategy.triggered",
|
||||
"params": {
|
||||
"id": 1234567890,
|
||||
"newsType": "strategy",
|
||||
"engineType": "market",
|
||||
"text": "BTC funding rate 0.15%",
|
||||
"link": "",
|
||||
"source": "binance",
|
||||
"description": "{...}",
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex"
|
||||
}
|
||||
],
|
||||
"ts": "2025-01-15T08:30:00Z",
|
||||
"strategy": {
|
||||
"id": 42,
|
||||
"name": "BTC Funding Rate Alert",
|
||||
"sourceType": "market",
|
||||
"soundId": "alert-1",
|
||||
"bgColor": "#FF6B35",
|
||||
"metrics": {
|
||||
"funding_rate_high": {
|
||||
"value": 0.15,
|
||||
"unit": "%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiRating": {
|
||||
"score": 85
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Strategy Params Fields**:
|
||||
- `id`: News/event ID
|
||||
- `engineType`: Source engine type (`market`, `news`, `onchain`)
|
||||
- `text`: Human-readable event description
|
||||
- `coins`: Related coins
|
||||
- `ts`: Event timestamp
|
||||
- `strategy.id`: User strategy ID
|
||||
- `strategy.name`: Strategy name
|
||||
- `strategy.sourceType`: Strategy source type
|
||||
- `strategy.soundId`: Notification sound ID
|
||||
- `strategy.bgColor`: Notification background color
|
||||
- `strategy.metrics`: Triggered metric values with units
|
||||
- `aiRating` (optional): Present when the news has an AI score. Contains:
|
||||
- `score`: 0-100 impact score
|
||||
- `relatedAddress` (optional): Related wallet address if applicable
|
||||
|
||||
**Note**: Strategy triggered events are pushed per-user via NATS. No explicit subscription is required — events are automatically delivered to the connected user who owns the strategy.
|
||||
|
||||
**Note**: Each coin in the `coins` array now includes individual AI ratings:
|
||||
- `score`: 0-100 impact score for this specific coin
|
||||
- `signal`: `long` / `short` / `neutral` for this coin
|
||||
- `grade`: `A+` / `A` / `B+` / `B` / `C` for this coin
|
||||
|
||||
The top-level `aiRating.score` represents the highest score among all coins.
|
||||
|
||||
---
|
||||
|
||||
## Data Structure
|
||||
@@ -253,7 +487,16 @@ Each article returns:
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [{ "symbol": "BTC", "market_type": "spot", "match": "title" }],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"match": "title",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
@@ -268,9 +511,11 @@ Each article returns:
|
||||
|
||||
| AI Field | Description |
|
||||
|----------|-------------|
|
||||
| `score` | 0-100 impact score |
|
||||
| `score` | 0-100 impact score (top-level = highest among all coins) |
|
||||
| `signal` | `long` (bullish) / `short` (bearish) / `neutral` |
|
||||
| `status` | `done` = AI analysis completed |
|
||||
| `coins[].score` | Individual coin impact score (0-100) |
|
||||
| `coins[].signal` | Individual coin signal (long/short/neutral) |
|
||||
| `coins[].grade` | Individual coin grade (A+/A/B+/B/C) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+268
-26
@@ -1,6 +1,6 @@
|
||||
<p align="center">
|
||||
<b>OpenNews MCP Server</b><br>
|
||||
暗号通貨ニュース集約 · AI 評価 · トレーディングシグナル · リアルタイム更新
|
||||
85+ リアルタイムデータソース · 6 エンジンカテゴリ · AI 評価 · トレーディングシグナル
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -54,6 +54,151 @@ opennews-mcp という MCP サーバーをレビューしてインストール
|
||||
|
||||
---
|
||||
|
||||
## データソース — 6カテゴリ 85+ ソース
|
||||
|
||||
| カテゴリ | 数量 | 主なソース |
|
||||
|---------|------|-----------|
|
||||
| **News** | 55 | Bloomberg、Reuters、Financial Times、CNBC、CNN、BBC、Fox Business、CoinDesk、Cointelegraph、The Block、Blockworks、Decrypt、DlNews、A16Z、TechCrunch、Wired、Politico、Business Insider、Twitter/X、Telegram、Weibo、Truth Social、U.S. Treasury、ECB、TASS、Handelsblatt、Welt、Ambrey、Morgan Stanley、PR Newswire、GlobeNewswire、Business Wire、Coinbase など |
|
||||
| **Listing** | 9 | Binance、Coinbase、OKX、Bybit、Upbit、Bithumb、Robinhood、Hyperliquid、Aster |
|
||||
| **OnChain** | 2 | Hyperliquid Whale Trade、Hyperliquid Large Position |
|
||||
| **Meme** | 1 | Twitter ミームコインソーシャルセンチメント |
|
||||
| **Market** | 6 | Price Change、Funding Rate、Funding Rate Difference、Large Liquidation、Market Trends、OI Change |
|
||||
| **Prediction** | 12 | CORRELATION_LOGICAL、SMART_MONEY_TRADE、PRICE_SPIKE、CLUSTER_ENTRY、WHALE_POSITION、NEW_WALLET_TRADE、INSIDER_PATTERN、CORRELATION_NARRATIVE、CORRELATION_HEDGE、CORRELATION_ENTITY_GEO、CORRELATION_CAUSAL、SETTLEMENT_ARBITRAGE |
|
||||
|
||||
すべての記事は **AI 分析済み** — 影響度スコア(0-100)、トレーディングシグナル(long/short/neutral)、中英バイリンガル要約付き。
|
||||
|
||||
<details>
|
||||
<summary><b>News — 55 ソース</b>(engineType: "news")— プレミアム金融・暗号メディア、政府機関、ソーシャルプラットフォーム</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| Bloomberg | ブルームバーグ — トップクラスの金融ニュース |
|
||||
| Reuters | ロイター — グローバル通信社 |
|
||||
| Financial Times | フィナンシャル・タイムズ — プレミアムビジネスニュース |
|
||||
| CNBC | CNBC — 金融テレビ |
|
||||
| CNN | CNN — 米国ニュースネットワーク |
|
||||
| BBC | BBC — 英国放送協会 |
|
||||
| Fox Business | Fox Business — 米国金融ニュース |
|
||||
| CoinDesk | CoinDesk — 大手暗号メディア |
|
||||
| Cointelegraph | Cointelegraph — 暗号メディア |
|
||||
| The Block | The Block — 暗号データ&ジャーナリズム |
|
||||
| Blockworks | Blockworks — 暗号ネイティブメディア |
|
||||
| Decrypt | Decrypt — 暗号&Web3メディア |
|
||||
| DlNews | DL News — 暗号調査報道 |
|
||||
| A16Z | a16z(Andreessen Horowitz)— 大手暗号VC |
|
||||
| TechCrunch | TechCrunch — テック&スタートアップニュース |
|
||||
| Wired | Wired — テックジャーナリズム |
|
||||
| Politico | Politico — 米欧政治ニュース |
|
||||
| Business Insider | Business Insider |
|
||||
| Twitter/X | Twitter/X 暗号インフルエンサーの投稿 |
|
||||
| X / Twitter Profile | Twitter/X プロフィール変更(名前・自己紹介更新) |
|
||||
| Telegram | Telegram チャンネル |
|
||||
| Weibo | Weibo(微博)— 中国ソーシャルメディア |
|
||||
| Truth Social | Truth Social — トランプのソーシャルプラットフォーム |
|
||||
| U.S. Treasury | 米国財務省 — 公式声明 |
|
||||
| U.S. Trade Representative | USTR — 通商政策発表 |
|
||||
| ECB | 欧州中央銀行 — 公式コミュニケーション |
|
||||
| TASS | TASS — ロシア国営通信社 |
|
||||
| Interfax | Interfax — ロシア通信社 |
|
||||
| Handelsblatt | Handelsblatt — ドイツビジネス新聞 |
|
||||
| Hadelsblatt | Hadelsblatt — ドイツビジネス |
|
||||
| Welt | Welt — ドイツ新聞 |
|
||||
| Telegraph | テレグラフ — 英国ニュース |
|
||||
| MS NOW | モルガン・スタンレー NOW — 機関投資家リサーチ |
|
||||
| Ambrey | Ambrey — 海事&地政学インテリジェンス |
|
||||
| PR Newswire | PR Newswire — プレスリリース |
|
||||
| GlobeNewswire | GlobeNewswire — プレスリリース |
|
||||
| Business Wire | Business Wire — プレスリリース |
|
||||
| Coinbase | Coinbase アナウンス&ブログ |
|
||||
| Binance | Binance アナウンス&ブログ |
|
||||
| jin10 | 金十データ — 中国金融速報 |
|
||||
| The Big Whale | The Big Whale — 欧州暗号メディア |
|
||||
| The Verge | The Verge — テックメディア |
|
||||
| Techinasia | Tech in Asia — アジアテックニュース |
|
||||
| Medium | Medium ブログ |
|
||||
| Chainwire | Chainwire — 暗号プレスリリース |
|
||||
| Token Relations | トークン関係&パートナーシップ |
|
||||
| Crypto Narratives | 暗号ナラティブトラッキング |
|
||||
| Crypto in America | 米国暗号業界カバレッジ |
|
||||
| 6551News | 6551 プラットフォームオリジナル分析 |
|
||||
| BWEnews | BWE ニュースワイヤー |
|
||||
| AGGRNEWS | アグリゲートニュースフィード |
|
||||
| Velo | Velo データインテリジェンス |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Listing — 9 ソース</b>(engineType: "listing")— 主要取引所のトークン上場アナウンス</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| Binance | Binance 新トークン上場 |
|
||||
| Coinbase | Coinbase 新トークン上場 |
|
||||
| OKX | OKX 新トークン上場 |
|
||||
| Bybit | Bybit 新トークン上場 |
|
||||
| Upbit | Upbit(韓国取引所)上場 |
|
||||
| Bithumb | Bithumb(韓国取引所)上場 |
|
||||
| Robinhood | Robinhood 暗号上場 |
|
||||
| Hyperliquid | Hyperliquid パーペチュアル上場 |
|
||||
| Aster | Aster 取引所上場 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>OnChain — 2 ソース</b>(engineType: "onchain")— Hyperliquid ホエール取引と大口ポジション活動</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| Hyperliquid Whale Trade | Hyperliquid ホエール取引アラート |
|
||||
| Hyperliquid Large Position | Hyperliquid 大口ポジション変動 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Meme — 1 ソース</b>(engineType: "meme")— ミームコインソーシャルセンチメントトラッキング</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| Twitter | Twitter/X ミームコイン議論&バイラル投稿 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Market — 6 ソース</b>(engineType: "market")— マーケット異常検出&クオンツシグナル</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| Price Change | 大幅な価格変動(急騰/急落) |
|
||||
| Funding Rate | ファンディングレート異常(パーペチュアル先物) |
|
||||
| Funding Rate Difference | 取引所間ファンディングレート乖離 |
|
||||
| Large Liquidation | 大口清算イベント |
|
||||
| Market Trends | 全体的な市場トレンド変化 |
|
||||
| OI Change | 建玉の大幅変動 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Prediction — 12 ソース</b>(engineType: "prediction")— AI予測&相関シグナル</summary>
|
||||
|
||||
| ソースコード | 説明 |
|
||||
|-------------|------|
|
||||
| CORRELATION_LOGICAL | 論理的相関分析 |
|
||||
| SMART_MONEY_TRADE | スマートマネー取引追跡 |
|
||||
| PRICE_SPIKE | 価格急変検出 |
|
||||
| CLUSTER_ENTRY | クラスターエントリーシグナル |
|
||||
| WHALE_POSITION | ホエールポジション監視 |
|
||||
| NEW_WALLET_TRADE | 新規ウォレット取引検出 |
|
||||
| INSIDER_PATTERN | インサイダーパターン認識 |
|
||||
| CORRELATION_NARRATIVE | ナラティブ相関分析 |
|
||||
| CORRELATION_HEDGE | ヘッジ相関分析 |
|
||||
| CORRELATION_ENTITY_GEO | 地政学エンティティ相関 |
|
||||
| CORRELATION_CAUSAL | 因果相関分析 |
|
||||
| SETTLEMENT_ARBITRAGE | 決済アービトラージシグナル |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 何ができる?
|
||||
|
||||
接続後、AI アシスタントに話しかけるだけ:
|
||||
@@ -75,17 +220,24 @@ opennews-mcp という MCP サーバーをレビューしてインストール
|
||||
|
||||
| カテゴリ | ツール | 説明 |
|
||||
|---------|--------|------|
|
||||
| ディスカバリー | `get_news_sources` | 全ニュースソースカテゴリツリー |
|
||||
| | `list_news_types` | 利用可能なソースコード一覧 |
|
||||
| 検索 | `get_latest_news` | 最新記事 |
|
||||
| | `search_news` | キーワード検索 |
|
||||
| | `search_news_by_coin` | 通貨別(BTC, ETH, SOL...) |
|
||||
| | `get_news_by_source` | エンジンタイプとソース別 |
|
||||
| | `get_news_by_engine` | タイプ別(news, listing, onchain, meme, market) |
|
||||
| | `search_news_advanced` | 高度な検索(複数フィルタ) |
|
||||
| AI | `get_high_score_news` | スコア >= 閾値の記事 |
|
||||
| | `get_news_by_signal` | シグナル別:long / short / neutral |
|
||||
| リアルタイム | `subscribe_latest_news` | WebSocket リアルタイム収集 |
|
||||
| ディスカバリー | `get_news_sources` | 完全エンジンツリー — 6カテゴリ 85+ ソースとメタデータ |
|
||||
| | `list_news_types` | フィルタ用ソースコードのフラットリスト |
|
||||
| 検索 | `get_latest_news` | 85+ ソースから最新記事を取得 |
|
||||
| | `search_news` | 全ソース横断キーワード検索 |
|
||||
| | `search_news_by_coin` | 通貨別(BTC, ETH, SOL...)全ソース横断 |
|
||||
| | `get_news_by_source` | 特定ソース指定(例:engine_type="news", news_type="Bloomberg") |
|
||||
| | `get_news_by_engine` | カテゴリ別:news, listing, onchain, meme, market, prediction |
|
||||
| | `search_news_advanced` | 複合フィルタ:通貨 + キーワード + エンジンタイプ |
|
||||
| AI | `get_high_score_news` | 高 AI 影響度スコア記事(0-100 スケール) |
|
||||
| | `get_news_by_signal` | AI トレーディングシグナル別:long / short / neutral |
|
||||
| Finance | `search_companies` | キーワード、ticker、CIK、曖昧な会社名で上場企業候補を検索 |
|
||||
| | `get_company_info` | 会社を解決し、利用可能な SEC filing、リサーチレポート、決算説明会 transcript、財務項目を一覧 |
|
||||
| | `get_company_report_text` | SEC filing、第三者リサーチ、決算説明会 transcript の本文を取得 |
|
||||
| | `get_crypto_holdings` | 機関またはアドレスのウォレット可視オンチェーン保有証拠を照会 |
|
||||
| | `get_crypto_holding_changes` | 隣接スナップショット間のオンチェーン保有変化を照会 |
|
||||
| リアルタイム | `subscribe_latest_news` | WebSocket ライブフィード、通貨・エンジンタイプフィルタ対応 |
|
||||
|
||||
> 詳細な使用ガイドとサンプルについては、[ナレッジガイド](../knowledge/guide.md) をご覧ください。
|
||||
|
||||
---
|
||||
|
||||
@@ -167,7 +319,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
|
||||
**フィルタパラメータ**(すべてオプション):
|
||||
- `engineTypes`: エンジンタイプからニュースタイプコードへのマッピングオブジェクト
|
||||
- キー:エンジンタイプ(例:`"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`)
|
||||
- キー:エンジンタイプ(例:`"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`, `"prediction"`)
|
||||
- 値:ニュースタイプコードの配列(例:`["Bloomberg", "CoinDesk"]`)
|
||||
- 空配列 `[]` はそのエンジン下のすべてのニュースタイプを意味します
|
||||
- `list_news_types` ツールで利用可能なコードを取得できます
|
||||
@@ -203,7 +355,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "spot",
|
||||
"market_type": "cex",
|
||||
"match": "title"
|
||||
}
|
||||
],
|
||||
@@ -226,20 +378,102 @@ AI 分析付きニュース(購読している場合):
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [...],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
},
|
||||
{
|
||||
"symbol": "ETH",
|
||||
"market_type": "cex",
|
||||
"score": 45,
|
||||
"signal": "short",
|
||||
"grade": "B"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "中国語の要約",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**注意**:`coins` 配列内の各コインには個別の AI 評価が含まれます:
|
||||
- `score`:このコインの影響スコア(0-100)
|
||||
- `signal`:このコインのシグナル方向(long/short/neutral)
|
||||
- `grade`:このコインのグレード(A+/A/B+/B/C)
|
||||
|
||||
トップレベルの `aiRating.score` は全コイン中の最高スコアを表します。
|
||||
|
||||
### サーバープッシュ - ストラテジートリガー
|
||||
|
||||
> **Max サブスクリプションが必要です。** [https://www.newsliquid.com/strategy](https://www.newsliquid.com/strategy) でストラテジーを作成・管理できます。
|
||||
|
||||
ユーザー定義のストラテジーがトリガーされた場合(例:価格アラート、キーワードマッチ)、サーバーがプッシュします:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "strategy.triggered",
|
||||
"params": {
|
||||
"id": 1234567890,
|
||||
"newsType": "strategy",
|
||||
"engineType": "market",
|
||||
"text": "BTC ファンディングレート 0.15%",
|
||||
"link": "",
|
||||
"source": "binance",
|
||||
"description": "{...}",
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex"
|
||||
}
|
||||
],
|
||||
"ts": "2025-01-15T08:30:00Z",
|
||||
"strategy": {
|
||||
"id": 42,
|
||||
"name": "BTC ファンディングレートアラート",
|
||||
"sourceType": "market",
|
||||
"soundId": "alert-1",
|
||||
"bgColor": "#FF6B35",
|
||||
"metrics": {
|
||||
"funding_rate_high": {
|
||||
"value": 0.15,
|
||||
"unit": "%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiRating": {
|
||||
"score": 85
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**ストラテジープッシュフィールド説明**:
|
||||
- `id`:ニュース/イベント ID
|
||||
- `engineType`:ソースエンジンタイプ(`market`、`news`、`onchain`)
|
||||
- `text`:イベントの説明
|
||||
- `coins`:関連コイン
|
||||
- `ts`:イベントタイムスタンプ
|
||||
- `strategy.id`:ユーザーストラテジー ID
|
||||
- `strategy.name`:ストラテジー名
|
||||
- `strategy.sourceType`:ストラテジーソースタイプ
|
||||
- `strategy.soundId`:通知サウンド ID
|
||||
- `strategy.bgColor`:通知背景色
|
||||
- `strategy.metrics`:トリガーされた指標値と単位
|
||||
- `aiRating`(オプション):ニュースに AI スコアがある場合に存在:
|
||||
- `score`:影響スコア(0-100)
|
||||
- `relatedAddress`(オプション):関連ウォレットアドレス
|
||||
|
||||
**注意**:ストラテジートリガーイベントは NATS を通じてユーザーごとにプッシュされます。追加のサブスクリプションは不要で、接続後に自動的にそのユーザーのストラテジーイベントを受信します。
|
||||
|
||||
---
|
||||
|
||||
## データ構造
|
||||
@@ -253,14 +487,20 @@ AI 分析付きニュース(購読している場合):
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [{ "symbol": "BTC", "market_type": "spot", "match": "title" }],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"match": "title",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "中国語の要約",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
@@ -268,9 +508,11 @@ AI 分析付きニュース(購読している場合):
|
||||
|
||||
| AI フィールド | 説明 |
|
||||
|-------------|------|
|
||||
| `score` | 0-100 影響度スコア |
|
||||
| `score` | 0-100 影響度スコア(トップレベル = 全コイン中の最高スコア) |
|
||||
| `signal` | `long`(強気)/ `short`(弱気)/ `neutral` |
|
||||
| `status` | `done` = AI 分析完了 |
|
||||
| `coins[].score` | 個別コインの影響度スコア(0-100) |
|
||||
| `coins[].signal` | 個別コインのシグナル方向(long/short/neutral) |
|
||||
| `coins[].grade` | 個別コインのグレード(A+/A/B+/B/C) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+268
-26
@@ -1,6 +1,6 @@
|
||||
<p align="center">
|
||||
<b>OpenNews MCP Server</b><br>
|
||||
암호화폐 뉴스 집계 · AI 평가 · 트레이딩 시그널 · 실시간 업데이트
|
||||
85+ 실시간 데이터 소스 · 6개 엔진 카테고리 · AI 평가 · 트레이딩 시그널
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -54,6 +54,151 @@ opennews-mcp MCP 서버를 검토하고 설치해주세요. 프로젝트는 로
|
||||
|
||||
---
|
||||
|
||||
## 데이터 소스 — 6개 카테고리 85+ 소스
|
||||
|
||||
| 카테고리 | 수량 | 주요 소스 |
|
||||
|---------|------|----------|
|
||||
| **News** | 55 | Bloomberg, Reuters, Financial Times, CNBC, CNN, BBC, Fox Business, CoinDesk, Cointelegraph, The Block, Blockworks, Decrypt, DlNews, A16Z, TechCrunch, Wired, Politico, Business Insider, Twitter/X, Telegram, Weibo, Truth Social, U.S. Treasury, ECB, TASS, Handelsblatt, Welt, Ambrey, Morgan Stanley, PR Newswire, GlobeNewswire, Business Wire, Coinbase 등 |
|
||||
| **Listing** | 9 | Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood, Hyperliquid, Aster |
|
||||
| **OnChain** | 2 | Hyperliquid Whale Trade, Hyperliquid Large Position |
|
||||
| **Meme** | 1 | Twitter 밈코인 소셜 센티먼트 |
|
||||
| **Market** | 6 | Price Change, Funding Rate, Funding Rate Difference, Large Liquidation, Market Trends, OI Change |
|
||||
| **Prediction** | 12 | CORRELATION_LOGICAL, SMART_MONEY_TRADE, PRICE_SPIKE, CLUSTER_ENTRY, WHALE_POSITION, NEW_WALLET_TRADE, INSIDER_PATTERN, CORRELATION_NARRATIVE, CORRELATION_HEDGE, CORRELATION_ENTITY_GEO, CORRELATION_CAUSAL, SETTLEMENT_ARBITRAGE |
|
||||
|
||||
모든 기사는 **AI 분석** 완료 — 영향도 점수(0-100), 트레이딩 시그널(long/short/neutral), 중영 이중 언어 요약 포함.
|
||||
|
||||
<details>
|
||||
<summary><b>News — 55개 소스</b> (engineType: "news") — 프리미엄 금융 및 암호화폐 미디어, 정부 기관, 소셜 플랫폼</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| Bloomberg | 블룸버그 — 최상위 금융 뉴스 |
|
||||
| Reuters | 로이터 — 글로벌 통신사 |
|
||||
| Financial Times | 파이낸셜 타임스 — 프리미엄 비즈니스 뉴스 |
|
||||
| CNBC | CNBC — 금융 방송 |
|
||||
| CNN | CNN — 미국 뉴스 네트워크 |
|
||||
| BBC | BBC — 영국 방송 공사 |
|
||||
| Fox Business | Fox Business — 미국 금융 뉴스 |
|
||||
| CoinDesk | CoinDesk — 선도적 암호화폐 미디어 |
|
||||
| Cointelegraph | Cointelegraph — 암호화폐 미디어 |
|
||||
| The Block | The Block — 암호화폐 데이터 및 저널리즘 |
|
||||
| Blockworks | Blockworks — 암호화폐 네이티브 미디어 |
|
||||
| Decrypt | Decrypt — 암호화폐 및 Web3 미디어 |
|
||||
| DlNews | DL News — 암호화폐 탐사 보도 |
|
||||
| A16Z | a16z (Andreessen Horowitz) — 선도적 암호화폐 VC |
|
||||
| TechCrunch | TechCrunch — 테크 및 스타트업 뉴스 |
|
||||
| Wired | Wired — 테크 저널리즘 |
|
||||
| Politico | Politico — 미국 및 EU 정치 뉴스 |
|
||||
| Business Insider | Business Insider |
|
||||
| Twitter/X | Twitter/X 암호화폐 인플루언서 게시물 |
|
||||
| X / Twitter Profile | Twitter/X 프로필 변경 (이름, 자기소개 업데이트) |
|
||||
| Telegram | Telegram 채널 |
|
||||
| Weibo | Weibo (微博) — 중국 소셜 미디어 |
|
||||
| Truth Social | Truth Social — 트럼프 소셜 플랫폼 |
|
||||
| U.S. Treasury | 미국 재무부 — 공식 성명 |
|
||||
| U.S. Trade Representative | USTR — 무역 정책 발표 |
|
||||
| ECB | 유럽중앙은행 — 공식 커뮤니케이션 |
|
||||
| TASS | TASS — 러시아 국영 통신사 |
|
||||
| Interfax | Interfax — 러시아 통신사 |
|
||||
| Handelsblatt | Handelsblatt — 독일 비즈니스 신문 |
|
||||
| Hadelsblatt | Hadelsblatt — 독일 비즈니스 |
|
||||
| Welt | Welt — 독일 신문 |
|
||||
| Telegraph | 텔레그래프 — 영국 뉴스 |
|
||||
| MS NOW | 모건 스탠리 NOW — 기관 리서치 |
|
||||
| Ambrey | Ambrey — 해양 및 지정학 인텔리전스 |
|
||||
| PR Newswire | PR Newswire — 보도자료 |
|
||||
| GlobeNewswire | GlobeNewswire — 보도자료 |
|
||||
| Business Wire | Business Wire — 보도자료 |
|
||||
| Coinbase | Coinbase 공지 및 블로그 |
|
||||
| Binance | Binance 공지 및 블로그 |
|
||||
| jin10 | 진스 데이터 — 중국 금융 속보 |
|
||||
| The Big Whale | The Big Whale — 유럽 암호화폐 미디어 |
|
||||
| The Verge | The Verge — 테크 미디어 |
|
||||
| Techinasia | Tech in Asia — 아시아 테크 뉴스 |
|
||||
| Medium | Medium 블로그 |
|
||||
| Chainwire | Chainwire — 암호화폐 보도자료 |
|
||||
| Token Relations | 토큰 관계 및 파트너십 |
|
||||
| Crypto Narratives | 암호화폐 내러티브 추적 |
|
||||
| Crypto in America | 미국 암호화폐 산업 보도 |
|
||||
| 6551News | 6551 플랫폼 오리지널 분석 |
|
||||
| BWEnews | BWE 뉴스 와이어 |
|
||||
| AGGRNEWS | 통합 뉴스 피드 |
|
||||
| Velo | Velo 데이터 인텔리전스 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Listing — 9개 소스</b> (engineType: "listing") — 주요 거래소 토큰 상장 공지</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| Binance | Binance 신규 토큰 상장 |
|
||||
| Coinbase | Coinbase 신규 토큰 상장 |
|
||||
| OKX | OKX 신규 토큰 상장 |
|
||||
| Bybit | Bybit 신규 토큰 상장 |
|
||||
| Upbit | Upbit (한국 거래소) 상장 |
|
||||
| Bithumb | Bithumb (한국 거래소) 상장 |
|
||||
| Robinhood | Robinhood 암호화폐 상장 |
|
||||
| Hyperliquid | Hyperliquid 무기한 선물 상장 |
|
||||
| Aster | Aster 거래소 상장 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>OnChain — 2개 소스</b> (engineType: "onchain") — Hyperliquid 고래 거래 및 대형 포지션 활동</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| Hyperliquid Whale Trade | Hyperliquid 고래 거래 알림 |
|
||||
| Hyperliquid Large Position | Hyperliquid 대형 포지션 변동 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Meme — 1개 소스</b> (engineType: "meme") — 밈코인 소셜 센티먼트 추적</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| Twitter | Twitter/X 밈코인 논의 및 바이럴 게시물 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Market — 6개 소스</b> (engineType: "market") — 시장 이상 감지 및 퀀트 시그널</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| Price Change | 대폭 가격 변동 (급등/급락) |
|
||||
| Funding Rate | 펀딩비 이상 (무기한 선물) |
|
||||
| Funding Rate Difference | 거래소 간 펀딩비 차이 |
|
||||
| Large Liquidation | 대형 청산 이벤트 |
|
||||
| Market Trends | 전체 시장 추세 변화 |
|
||||
| OI Change | 미결제약정 대폭 변동 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Prediction — 12개 소스</b> (engineType: "prediction") — AI 예측 및 상관관계 시그널</summary>
|
||||
|
||||
| 소스 코드 | 설명 |
|
||||
|----------|------|
|
||||
| CORRELATION_LOGICAL | 논리적 상관관계 분석 |
|
||||
| SMART_MONEY_TRADE | 스마트 머니 거래 추적 |
|
||||
| PRICE_SPIKE | 가격 급변 감지 |
|
||||
| CLUSTER_ENTRY | 클러스터 진입 시그널 |
|
||||
| WHALE_POSITION | 고래 포지션 모니터링 |
|
||||
| NEW_WALLET_TRADE | 신규 지갑 거래 감지 |
|
||||
| INSIDER_PATTERN | 내부자 패턴 인식 |
|
||||
| CORRELATION_NARRATIVE | 내러티브 상관관계 분석 |
|
||||
| CORRELATION_HEDGE | 헤지 상관관계 분석 |
|
||||
| CORRELATION_ENTITY_GEO | 지정학적 엔티티 상관관계 |
|
||||
| CORRELATION_CAUSAL | 인과 상관관계 분석 |
|
||||
| SETTLEMENT_ARBITRAGE | 결제 차익거래 시그널 |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 무엇을 할 수 있나요?
|
||||
|
||||
연결 후 AI 어시스턴트에게 말하기만 하면 됩니다:
|
||||
@@ -75,17 +220,24 @@ opennews-mcp MCP 서버를 검토하고 설치해주세요. 프로젝트는 로
|
||||
|
||||
| 카테고리 | 도구 | 설명 |
|
||||
|---------|------|------|
|
||||
| 디스커버리 | `get_news_sources` | 전체 뉴스 소스 카테고리 트리 |
|
||||
| | `list_news_types` | 사용 가능한 소스 코드 목록 |
|
||||
| 검색 | `get_latest_news` | 최신 기사 |
|
||||
| | `search_news` | 키워드 검색 |
|
||||
| | `search_news_by_coin` | 코인별 (BTC, ETH, SOL...) |
|
||||
| | `get_news_by_source` | 엔진 유형과 소스별 |
|
||||
| | `get_news_by_engine` | 유형별 (news, listing, onchain, meme, market) |
|
||||
| | `search_news_advanced` | 고급 검색 (다중 필터) |
|
||||
| AI | `get_high_score_news` | 점수 >= 임계값 기사 |
|
||||
| | `get_news_by_signal` | 시그널별: long / short / neutral |
|
||||
| 실시간 | `subscribe_latest_news` | WebSocket 실시간 수집 |
|
||||
| 디스커버리 | `get_news_sources` | 완전한 엔진 트리 — 6개 카테고리 85+ 소스 및 메타데이터 |
|
||||
| | `list_news_types` | 필터용 소스 코드 플랫 리스트 |
|
||||
| 검색 | `get_latest_news` | 85+ 소스에서 최신 기사 조회 |
|
||||
| | `search_news` | 전체 소스 대상 키워드 검색 |
|
||||
| | `search_news_by_coin` | 코인별 (BTC, ETH, SOL...) 전체 소스 대상 |
|
||||
| | `get_news_by_source` | 특정 소스 지정 (예: engine_type="news", news_type="Bloomberg") |
|
||||
| | `get_news_by_engine` | 카테고리별: news, listing, onchain, meme, market, prediction |
|
||||
| | `search_news_advanced` | 복합 필터: 코인 + 키워드 + 엔진 유형 조합 |
|
||||
| AI | `get_high_score_news` | 높은 AI 영향도 점수 기사 (0-100 스케일) |
|
||||
| | `get_news_by_signal` | AI 트레이딩 시그널별: long / short / neutral |
|
||||
| 금융 강화 | `search_companies` | 키워드, ticker, CIK 또는 유사 회사명으로 상장사 후보 검색 |
|
||||
| | `get_company_info` | 회사를 식별하고 사용 가능한 SEC filing, 리서치 보고서, 실적 콜 transcript, 재무 항목을 나열 |
|
||||
| | `get_company_report_text` | SEC filing, 서드파티 리서치, 실적 콜 transcript 본문 조회 |
|
||||
| | `get_crypto_holdings` | 기관 또는 주소의 지갑 기준 온체인 보유 증거 조회 |
|
||||
| | `get_crypto_holding_changes` | 인접 스냅샷 사이의 온체인 보유 변화 조회 |
|
||||
| 실시간 | `subscribe_latest_news` | WebSocket 라이브 피드, 코인 및 엔진 유형 필터 지원 |
|
||||
|
||||
> 자세한 사용 가이드와 예제는 [지식 가이드](../knowledge/guide.md)를 참조하세요.
|
||||
|
||||
---
|
||||
|
||||
@@ -167,7 +319,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
|
||||
**필터 매개변수** (모두 선택사항):
|
||||
- `engineTypes`: 엔진 유형에서 뉴스 유형 코드로의 매핑 객체
|
||||
- 키: 엔진 유형 (예: `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`)
|
||||
- 키: 엔진 유형 (예: `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`, `"prediction"`)
|
||||
- 값: 뉴스 유형 코드 배열 (예: `["Bloomberg", "CoinDesk"]`)
|
||||
- 빈 배열 `[]`은 해당 엔진의 모든 뉴스 유형을 의미
|
||||
- `list_news_types` 도구로 사용 가능한 코드 확인
|
||||
@@ -203,7 +355,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "spot",
|
||||
"market_type": "cex",
|
||||
"match": "title"
|
||||
}
|
||||
],
|
||||
@@ -226,20 +378,102 @@ AI 분석이 있는 뉴스 (구독한 경우):
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [...],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
},
|
||||
{
|
||||
"symbol": "ETH",
|
||||
"market_type": "cex",
|
||||
"score": 45,
|
||||
"signal": "short",
|
||||
"grade": "B"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "중국어 요약",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**참고**: `coins` 배열의 각 코인에는 개별 AI 평가가 포함됩니다:
|
||||
- `score`: 해당 코인의 영향력 점수 (0-100)
|
||||
- `signal`: 해당 코인의 시그널 방향 (long/short/neutral)
|
||||
- `grade`: 해당 코인의 등급 (A+/A/B+/B/C)
|
||||
|
||||
최상위 `aiRating.score`는 모든 코인 중 최고 점수를 나타냅니다.
|
||||
|
||||
### 서버 푸시 - 전략 트리거
|
||||
|
||||
> **Max 구독이 필요합니다.** [https://www.newsliquid.com/strategy](https://www.newsliquid.com/strategy)에서 전략을 생성하고 관리하세요.
|
||||
|
||||
사용자 정의 전략이 트리거되면(예: 가격 알림, 키워드 매칭) 서버가 푸시합니다:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "strategy.triggered",
|
||||
"params": {
|
||||
"id": 1234567890,
|
||||
"newsType": "strategy",
|
||||
"engineType": "market",
|
||||
"text": "BTC 펀딩비율 0.15%",
|
||||
"link": "",
|
||||
"source": "binance",
|
||||
"description": "{...}",
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex"
|
||||
}
|
||||
],
|
||||
"ts": "2025-01-15T08:30:00Z",
|
||||
"strategy": {
|
||||
"id": 42,
|
||||
"name": "BTC 펀딩비율 알림",
|
||||
"sourceType": "market",
|
||||
"soundId": "alert-1",
|
||||
"bgColor": "#FF6B35",
|
||||
"metrics": {
|
||||
"funding_rate_high": {
|
||||
"value": 0.15,
|
||||
"unit": "%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiRating": {
|
||||
"score": 85
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**전략 푸시 필드 설명**:
|
||||
- `id`: 뉴스/이벤트 ID
|
||||
- `engineType`: 소스 엔진 유형 (`market`, `news`, `onchain`)
|
||||
- `text`: 이벤트 설명
|
||||
- `coins`: 관련 코인
|
||||
- `ts`: 이벤트 타임스탬프
|
||||
- `strategy.id`: 사용자 전략 ID
|
||||
- `strategy.name`: 전략 이름
|
||||
- `strategy.sourceType`: 전략 소스 유형
|
||||
- `strategy.soundId`: 알림 사운드 ID
|
||||
- `strategy.bgColor`: 알림 배경색
|
||||
- `strategy.metrics`: 트리거된 지표 값 및 단위
|
||||
- `aiRating` (선택): 뉴스에 AI 점수가 있을 때 존재:
|
||||
- `score`: 영향력 점수 (0-100)
|
||||
- `relatedAddress` (선택): 관련 지갑 주소
|
||||
|
||||
**참고**: 전략 트리거 이벤트는 NATS를 통해 사용자별로 푸시됩니다. 별도의 구독이 필요 없으며, 연결 후 해당 사용자의 전략 이벤트를 자동으로 수신합니다.
|
||||
|
||||
---
|
||||
|
||||
## 데이터 구조
|
||||
@@ -253,14 +487,20 @@ AI 분석이 있는 뉴스 (구독한 경우):
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [{ "symbol": "BTC", "market_type": "spot", "match": "title" }],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"match": "title",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "중국어 요약",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
@@ -268,9 +508,11 @@ AI 분석이 있는 뉴스 (구독한 경우):
|
||||
|
||||
| AI 필드 | 설명 |
|
||||
|---------|------|
|
||||
| `score` | 0-100 영향도 점수 |
|
||||
| `score` | 0-100 영향도 점수 (최상위 = 모든 코인 중 최고 점수) |
|
||||
| `signal` | `long`(강세) / `short`(약세) / `neutral` |
|
||||
| `status` | `done` = AI 분석 완료 |
|
||||
| `coins[].score` | 개별 코인의 영향도 점수 (0-100) |
|
||||
| `coins[].signal` | 개별 코인의 시그널 방향 (long/short/neutral) |
|
||||
| `coins[].grade` | 개별 코인의 등급 (A+/A/B+/B/C) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+268
-26
@@ -1,6 +1,6 @@
|
||||
<p align="center">
|
||||
<b>OpenNews MCP Server</b><br>
|
||||
加密货币新闻聚合 · AI 评分 · 交易信号 · 实时更新
|
||||
85+ 实时数据源 · 6 大引擎类别 · AI 评分 · 交易信号
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -54,6 +54,151 @@ cp -r openclaw-skill/opennews ~/.openclaw/skills/
|
||||
|
||||
---
|
||||
|
||||
## 数据源 — 6 大类别 85+ 数据源
|
||||
|
||||
| 类别 | 数量 | 主要来源 |
|
||||
|------|------|----------|
|
||||
| **News** | 55 | Bloomberg、Reuters、Financial Times、CNBC、CNN、BBC、Fox Business、CoinDesk、Cointelegraph、The Block、Blockworks、Decrypt、DlNews、A16Z、TechCrunch、Wired、Politico、Business Insider、Twitter/X、Telegram、Weibo、Truth Social、U.S. Treasury、ECB、TASS、Handelsblatt、Welt、Ambrey、Morgan Stanley、PR Newswire、GlobeNewswire、Business Wire、Coinbase等 |
|
||||
| **Listing** | 9 | Binance、Coinbase、OKX、Bybit、Upbit、Bithumb、Robinhood、Hyperliquid、Aster |
|
||||
| **OnChain** | 2 | Hyperliquid Whale Trade、Hyperliquid Large Position |
|
||||
| **Meme** | 1 | Twitter meme 币社交情绪 |
|
||||
| **Market** | 6 | Price Change、Funding Rate、Funding Rate Difference、Large Liquidation、Market Trends、OI Change |
|
||||
| **Prediction** | 12 | CORRELATION_LOGICAL(相关性-逻辑)、SMART_MONEY_TRADE(聪明钱交易)、PRICE_SPIKE(价格异动)、CLUSTER_ENTRY(集群进场)、WHALE_POSITION(鲸鱼持仓)、NEW_WALLET_TRADE(新钱包交易)、INSIDER_PATTERN(内幕模式)、CORRELATION_NARRATIVE(相关性-叙述)、CORRELATION_HEDGE(相关性-对冲)、CORRELATION_ENTITY_GEO(相关性-地缘)、CORRELATION_CAUSAL(相关性-因果)、SETTLEMENT_ARBITRAGE(套利) |
|
||||
|
||||
所有文章均经 **AI 分析**,包含影响力评分(0-100)、交易信号(long/short/neutral)及中英双语摘要。
|
||||
|
||||
<details>
|
||||
<summary><b>News — 55 个来源</b>(engineType: "news")— 顶级财经与加密媒体、政府机构、社交平台</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| Bloomberg | 彭博社 — 顶级财经新闻 |
|
||||
| Reuters | 路透社 — 全球通讯社 |
|
||||
| Financial Times | 金融时报 — 高端商业新闻 |
|
||||
| CNBC | CNBC — 财经电视 |
|
||||
| CNN | CNN — 美国新闻网 |
|
||||
| BBC | BBC — 英国广播公司 |
|
||||
| Fox Business | Fox Business — 美国财经新闻 |
|
||||
| CoinDesk | CoinDesk — 头部加密媒体 |
|
||||
| Cointelegraph | Cointelegraph — 加密媒体 |
|
||||
| The Block | The Block — 加密数据与新闻 |
|
||||
| Blockworks | Blockworks — 加密原生媒体 |
|
||||
| Decrypt | Decrypt — 加密与 web3 媒体 |
|
||||
| DlNews | DL News — 加密调查新闻 |
|
||||
| A16Z | a16z(Andreessen Horowitz)— 头部加密 VC |
|
||||
| TechCrunch | TechCrunch — 科技与创业新闻 |
|
||||
| Wired | Wired — 科技杂志 |
|
||||
| Politico | Politico — 美欧政治新闻 |
|
||||
| Business Insider | Business Insider |
|
||||
| Twitter/X | Twitter/X 加密 KOL 动态 |
|
||||
| X / Twitter Profile | Twitter/X 个人资料变更(用户名、简介更新) |
|
||||
| Telegram | Telegram 频道 |
|
||||
| Weibo | 微博 — 中国社交媒体 |
|
||||
| Truth Social | Truth Social — 特朗普社交平台 |
|
||||
| U.S. Treasury | 美国财政部 — 官方声明 |
|
||||
| U.S. Trade Representative | 美国贸易代表办公室 — 贸易政策公告 |
|
||||
| ECB | 欧洲央行 — 官方通讯 |
|
||||
| TASS | 塔斯社 — 俄罗斯国家通讯社 |
|
||||
| Interfax | 国际文传电讯社 — 俄罗斯通讯社 |
|
||||
| Handelsblatt | 德国商报 |
|
||||
| Hadelsblatt | Hadelsblatt — 德国商业 |
|
||||
| Welt | 世界报 — 德国报纸 |
|
||||
| Telegraph | 每日电讯报 — 英国新闻 |
|
||||
| MS NOW | 摩根士丹利 NOW — 机构研究 |
|
||||
| Ambrey | Ambrey — 海事与地缘政治情报 |
|
||||
| PR Newswire | 美通社 — 新闻稿发布 |
|
||||
| GlobeNewswire | GlobeNewswire — 新闻稿发布 |
|
||||
| Business Wire | Business Wire — 新闻稿发布 |
|
||||
| Coinbase | Coinbase 公告与博客 |
|
||||
| Binance | Binance 公告与博客 |
|
||||
| jin10 | 金十数据 — 财经快讯 |
|
||||
| The Big Whale | The Big Whale — 欧洲加密媒体 |
|
||||
| The Verge | The Verge — 科技媒体 |
|
||||
| Techinasia | Tech in Asia — 亚洲科技新闻 |
|
||||
| Medium | Medium 博客 |
|
||||
| Chainwire | Chainwire — 加密新闻稿 |
|
||||
| Token Relations | 代币合作与关系 |
|
||||
| Crypto Narratives | 加密叙事追踪 |
|
||||
| Crypto in America | 美国加密行业报道 |
|
||||
| 6551News | 6551 平台原创分析 |
|
||||
| BWEnews | BWE 新闻线 |
|
||||
| AGGRNEWS | 聚合新闻源 |
|
||||
| Velo | Velo 数据情报 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Listing — 9 个来源</b>(engineType: "listing")— 主要交易所代币上新公告</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| Binance | 币安新币上线 |
|
||||
| Coinbase | Coinbase 新币上线 |
|
||||
| OKX | OKX 新币上线 |
|
||||
| Bybit | Bybit 新币上线 |
|
||||
| Upbit | Upbit(韩国交易所)上新 |
|
||||
| Bithumb | Bithumb(韩国交易所)上新 |
|
||||
| Robinhood | Robinhood 加密货币上线 |
|
||||
| Hyperliquid | Hyperliquid 永续合约上线 |
|
||||
| Aster | Aster 交易所上新 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>OnChain — 2 个来源</b>(engineType: "onchain")— Hyperliquid 巨鲸交易与大额持仓活动</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| Hyperliquid Whale Trade | Hyperliquid 巨鲸交易预警 |
|
||||
| Hyperliquid Large Position | Hyperliquid 大额持仓变动 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Meme — 1 个来源</b>(engineType: "meme")— Meme 币社交情绪追踪</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| Twitter | Twitter/X meme 币讨论与病毒式传播 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Market — 6 个来源</b>(engineType: "market")— 市场异动检测与量化信号</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| Price Change | 价格剧烈波动(暴涨/暴跌) |
|
||||
| Funding Rate | 资金费率异常(永续合约) |
|
||||
| Funding Rate Difference | 跨交易所资金费率差异 |
|
||||
| Large Liquidation | 大额清算事件 |
|
||||
| Market Trends | 整体市场趋势变化 |
|
||||
| OI Change | 未平仓合约量显著变化 |
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Prediction — 12 个来源</b>(engineType: "prediction")— AI 预测与相关性信号</summary>
|
||||
|
||||
| 来源代码 | 描述 |
|
||||
|----------|------|
|
||||
| CORRELATION_LOGICAL | 相关性(逻辑) |
|
||||
| SMART_MONEY_TRADE | 聪明钱交易 |
|
||||
| PRICE_SPIKE | 价格异动 |
|
||||
| CLUSTER_ENTRY | 集群进场 |
|
||||
| WHALE_POSITION | 鲸鱼持仓 |
|
||||
| NEW_WALLET_TRADE | 新钱包交易 |
|
||||
| INSIDER_PATTERN | 内幕模式 |
|
||||
| CORRELATION_NARRATIVE | 相关性(叙述) |
|
||||
| CORRELATION_HEDGE | 相关性(对冲) |
|
||||
| CORRELATION_ENTITY_GEO | 相关性(地缘) |
|
||||
| CORRELATION_CAUSAL | 相关性(因果) |
|
||||
| SETTLEMENT_ARBITRAGE | 套利 |
|
||||
|
||||
</details>
|
||||
|
||||
---
|
||||
|
||||
## 功能介绍
|
||||
|
||||
连接后,直接告诉你的 AI 助手:
|
||||
@@ -75,17 +220,24 @@ cp -r openclaw-skill/opennews ~/.openclaw/skills/
|
||||
|
||||
| 分类 | 工具 | 描述 |
|
||||
|------|------|------|
|
||||
| 发现 | `get_news_sources` | 获取所有新闻来源分类树 |
|
||||
| | `list_news_types` | 所有可用的新闻来源代码 |
|
||||
| 搜索 | `get_latest_news` | 最新文章 |
|
||||
| | `search_news` | 关键词搜索 |
|
||||
| | `search_news_by_coin` | 按币种搜索 (BTC, ETH, SOL...) |
|
||||
| | `get_news_by_source` | 按引擎类型和来源搜索 |
|
||||
| | `get_news_by_engine` | 按类型搜索 (news, listing, onchain, meme, market) |
|
||||
| | `search_news_advanced` | 高级搜索(多条件筛选) |
|
||||
| AI | `get_high_score_news` | 评分 >= 阈值的文章 |
|
||||
| | `get_news_by_signal` | 按信号搜索: long / short / neutral |
|
||||
| 实时 | `subscribe_latest_news` | WebSocket 实时采集 |
|
||||
| 发现 | `get_news_sources` | 完整引擎树 — 6 大类别 85+ 数据源及元数据 |
|
||||
| | `list_news_types` | 所有来源代码的扁平列表,用于过滤 |
|
||||
| 搜索 | `get_latest_news` | 跨 85+ 数据源获取最新文章 |
|
||||
| | `search_news` | 跨所有数据源全文关键词搜索 |
|
||||
| | `search_news_by_coin` | 按币种搜索 (BTC, ETH, SOL...) 跨所有数据源 |
|
||||
| | `get_news_by_source` | 按特定来源搜索 (如 engine_type="news", news_type="Bloomberg") |
|
||||
| | `get_news_by_engine` | 按类别搜索: news, listing, onchain, meme, market, prediction |
|
||||
| | `search_news_advanced` | 多条件组合: 币种 + 关键词 + 引擎类型 |
|
||||
| AI | `get_high_score_news` | 高 AI 影响力评分文章 (0-100 分制) |
|
||||
| | `get_news_by_signal` | 按 AI 交易信号: long / short / neutral |
|
||||
| 金融增强 | `search_companies` | 按关键词、ticker、CIK 或模糊公司名搜索上市公司候选项 |
|
||||
| | `get_company_info` | 解析公司并列出可用 SEC filings、研报、电话会 transcript 和财务字段 |
|
||||
| | `get_company_report_text` | 获取 SEC filing、第三方研报或财报电话会 transcript 文本 |
|
||||
| | `get_crypto_holdings` | 查询机构或地址的钱包可见链上持仓证据 |
|
||||
| | `get_crypto_holding_changes` | 查询相邻快照之间的链上持仓变化 |
|
||||
| 实时 | `subscribe_latest_news` | WebSocket 实时推送,支持币种和引擎类型过滤 |
|
||||
|
||||
> 完整使用指南和详细示例,请查看 [知识指南](../knowledge/guide.md)。
|
||||
|
||||
---
|
||||
|
||||
@@ -167,7 +319,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
|
||||
**过滤参数**(全部可选):
|
||||
- `engineTypes`: 引擎类型到新闻类型代码的映射对象
|
||||
- 键:引擎类型(如 `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`)
|
||||
- 键:引擎类型(如 `"news"`, `"onchain"`, `"listing"`, `"meme"`, `"market"`, `"prediction"`)
|
||||
- 值:新闻类型代码数组(如 `["Bloomberg", "CoinDesk"]`)
|
||||
- 空数组 `[]` 表示该引擎下的所有新闻类型
|
||||
- 使用 `list_news_types` 工具获取可用代码
|
||||
@@ -203,7 +355,7 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "spot",
|
||||
"market_type": "cex",
|
||||
"match": "title"
|
||||
}
|
||||
],
|
||||
@@ -226,20 +378,102 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [...],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
},
|
||||
{
|
||||
"symbol": "ETH",
|
||||
"market_type": "cex",
|
||||
"score": 45,
|
||||
"signal": "short",
|
||||
"grade": "B"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "中文摘要",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**注意**:`coins` 数组中的每个币种现在包含独立的 AI 评分:
|
||||
- `score`:该币种的影响力评分(0-100)
|
||||
- `signal`:该币种的信号方向(long/short/neutral)
|
||||
- `grade`:该币种的评级(A+/A/B+/B/C)
|
||||
|
||||
顶层 `aiRating.score` 代表所有币种中的最高分。
|
||||
|
||||
### 服务器推送 - 策略命中
|
||||
|
||||
> **需要 Max 订阅套餐。** 在 [https://www.newsliquid.com/strategy](https://www.newsliquid.com/strategy) 创建和管理您的策略。
|
||||
|
||||
当用户自定义策略被触发时(如价格预警、关键词匹配),服务器推送:
|
||||
|
||||
```json
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "strategy.triggered",
|
||||
"params": {
|
||||
"id": 1234567890,
|
||||
"newsType": "strategy",
|
||||
"engineType": "market",
|
||||
"text": "BTC 资金费率 0.15%",
|
||||
"link": "",
|
||||
"source": "binance",
|
||||
"description": "{...}",
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex"
|
||||
}
|
||||
],
|
||||
"ts": "2025-01-15T08:30:00Z",
|
||||
"strategy": {
|
||||
"id": 42,
|
||||
"name": "BTC 资金费率预警",
|
||||
"sourceType": "market",
|
||||
"soundId": "alert-1",
|
||||
"bgColor": "#FF6B35",
|
||||
"metrics": {
|
||||
"funding_rate_high": {
|
||||
"value": 0.15,
|
||||
"unit": "%"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiRating": {
|
||||
"score": 85
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**策略推送字段说明**:
|
||||
- `id`:新闻/事件 ID
|
||||
- `engineType`:来源引擎类型(`market`、`news`、`onchain`)
|
||||
- `text`:可读的事件描述
|
||||
- `coins`:相关币种
|
||||
- `ts`:事件时间戳
|
||||
- `strategy.id`:用户策略 ID
|
||||
- `strategy.name`:策略名称
|
||||
- `strategy.sourceType`:策略来源类型
|
||||
- `strategy.soundId`:通知音效 ID
|
||||
- `strategy.bgColor`:通知背景色
|
||||
- `strategy.metrics`:触发的指标值及单位
|
||||
- `aiRating`(可选):当新闻有 AI 评分时存在,包含:
|
||||
- `score`:影响力评分(0-100)
|
||||
- `relatedAddress`(可选):相关钱包地址
|
||||
|
||||
**注意**:策略命中事件通过 NATS 按用户推送,无需额外订阅,连接后自动接收属于该用户的策略事件。
|
||||
|
||||
---
|
||||
|
||||
## 数据结构
|
||||
@@ -253,14 +487,20 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [{ "symbol": "BTC", "market_type": "spot", "match": "title" }],
|
||||
"coins": [
|
||||
{
|
||||
"symbol": "BTC",
|
||||
"market_type": "cex",
|
||||
"match": "title",
|
||||
"score": 85,
|
||||
"signal": "long",
|
||||
"grade": "A"
|
||||
}
|
||||
],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "long",
|
||||
"status": "done",
|
||||
"summary": "中文摘要",
|
||||
"enSummary": "English summary"
|
||||
"signal": "long"
|
||||
},
|
||||
"ts": 1708473600000
|
||||
}
|
||||
@@ -268,9 +508,11 @@ $env:OPENNEWS_TOKEN = "<your-token>"
|
||||
|
||||
| AI 字段 | 描述 |
|
||||
|---------|------|
|
||||
| `score` | 0-100 影响力评分 |
|
||||
| `score` | 0-100 影响力评分(顶层 = 所有币种中的最高分) |
|
||||
| `signal` | `long`(看涨)/ `short`(看跌)/ `neutral`(中性) |
|
||||
| `status` | `done` = AI 分析完成 |
|
||||
| `coins[].score` | 单个币种的影响力评分(0-100) |
|
||||
| `coins[].signal` | 单个币种的信号方向(long/short/neutral) |
|
||||
| `coins[].grade` | 单个币种的评级(A+/A/B+/B/C) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
+166
-24
@@ -2,46 +2,188 @@
|
||||
|
||||
## Overview
|
||||
|
||||
This MCP server provides access to crypto news from the 6551 news platform
|
||||
via REST API and WebSocket. It replaces direct database access with API calls.
|
||||
This MCP server provides real-time access to a **massive, multi-source crypto & financial news aggregation platform** powered by 6551.io. It aggregates **85+ data sources** across 6 engine categories, covering everything from Bloomberg and Reuters breaking news to on-chain whale trades, meme coin signals, market anomaly alerts, and AI prediction signals — all with AI-powered ratings and trading signal analysis.
|
||||
|
||||
## Data Source Coverage (6 Categories, 85+ Sources)
|
||||
|
||||
### 1. News — 55 sources (engineType: "news")
|
||||
Premium financial & crypto media, government agencies, social platforms:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| 6551News | 6551 platform original analysis |
|
||||
| BWEnews | BWE news wire |
|
||||
| Bloomberg | Bloomberg — top-tier financial news |
|
||||
| Reuters | Reuters — global wire service |
|
||||
| A16Z | a16z (Andreessen Horowitz) — leading crypto VC |
|
||||
| AGGRNEWS | Aggregated news feed |
|
||||
| Velo | Velo data intelligence |
|
||||
| BBC | BBC — British Broadcasting Corporation |
|
||||
| Binance | Binance announcements & blog |
|
||||
| Blockworks | Blockworks — crypto-native media |
|
||||
| Business Insider | Business Insider |
|
||||
| Chainwire | Chainwire — crypto press releases |
|
||||
| CNBC | CNBC — financial television |
|
||||
| CNN | CNN — US news network |
|
||||
| CoinDesk | CoinDesk — leading crypto media |
|
||||
| Cointelegraph | Cointelegraph — crypto media |
|
||||
| Crypto Narratives | Crypto narrative tracking |
|
||||
| Decrypt | Decrypt — crypto & web3 media |
|
||||
| DlNews | DL News — crypto investigative journalism |
|
||||
| Financial Times | Financial Times — premium business news |
|
||||
| Interfax | Interfax — Russian news agency |
|
||||
| Medium | Medium blog posts |
|
||||
| MS NOW | Morgan Stanley NOW — institutional research |
|
||||
| Politico | Politico — US & EU political news |
|
||||
| PR Newswire | PR Newswire — press releases |
|
||||
| GlobeNewswire | GlobeNewswire — press releases |
|
||||
| Business Wire | Business Wire — press releases |
|
||||
| TechCrunch | TechCrunch — tech & startup news |
|
||||
| Techinasia | Tech in Asia — Asian tech news |
|
||||
| Telegram | Telegram channels |
|
||||
| Telegraph | The Telegraph — UK news |
|
||||
| The Big Whale | The Big Whale — European crypto media |
|
||||
| The Block | The Block — crypto data & journalism |
|
||||
| The Verge | The Verge — tech media |
|
||||
| Token Relations | Token relations & partnerships |
|
||||
| U.S. Treasury | U.S. Treasury Department — official statements |
|
||||
| Truth Social | Truth Social — Trump's social platform |
|
||||
| Twitter/X | Twitter/X posts from crypto influencers |
|
||||
| X / Twitter Profile | Twitter/X profile changes (name, bio updates) |
|
||||
| U.S. Trade Representative | USTR — trade policy announcements |
|
||||
| Weibo | Weibo (微博) — Chinese social media |
|
||||
| Wired | Wired magazine — tech journalism |
|
||||
| Coinbase | Coinbase announcements & blog |
|
||||
| Crypto in America | Crypto in America coverage |
|
||||
| AI_Helper | AI-generated analysis & helper |
|
||||
| Fox Business | Fox Business — US financial news |
|
||||
| TASS | TASS — Russian state news agency |
|
||||
| Hadelsblatt | Hadelsblatt — German business |
|
||||
| Welt | Welt — German newspaper |
|
||||
| Handelsblatt | Handelsblatt — German business newspaper |
|
||||
| Ambrey | Ambrey — maritime & geopolitical intelligence |
|
||||
| ECB | European Central Bank — official communications |
|
||||
| jin10 | 金十数据快讯 |
|
||||
|
||||
### 2. Listing — 9 sources (engineType: "listing")
|
||||
Token listing announcements from major exchanges:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Binance | Binance new token listings |
|
||||
| Aster | Aster exchange listings |
|
||||
| Hyperliquid | Hyperliquid perp listings |
|
||||
| Bithumb | Bithumb (Korean exchange) listings |
|
||||
| Upbit | Upbit (Korean exchange) listings |
|
||||
| Robinhood | Robinhood crypto listings |
|
||||
| Bybit | Bybit new token listings |
|
||||
| OKX | OKX new token listings |
|
||||
| Coinbase | Coinbase new token listings |
|
||||
|
||||
### 3. OnChain — 2 sources (engineType: "onchain")
|
||||
Hyperliquid whale trades and large position activity:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Hyperliquid Whale Trade | Hyperliquid whale trade alerts |
|
||||
| Hyperliquid Large Position | Hyperliquid large position changes |
|
||||
|
||||
### 4. Meme — 1 source (engineType: "meme")
|
||||
Meme coin social sentiment tracking:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Twitter | Twitter/X meme coin discussions & viral posts |
|
||||
|
||||
### 5. Market — 6 sources (engineType: "market")
|
||||
Market anomaly detection and quantitative signals:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| Price Change | Significant price movements (pumps/dumps) |
|
||||
| Funding Rate | Funding rate anomalies (perp futures) |
|
||||
| Funding Rate Difference | Cross-exchange funding rate divergences |
|
||||
| Large Liquidation | Large liquidation events |
|
||||
| Market Trends | Overall market trend shifts |
|
||||
| OI Change | Open interest significant changes |
|
||||
|
||||
### 6. Prediction — 12 sources (engineType: "prediction")
|
||||
AI-powered prediction and correlation signals:
|
||||
|
||||
| Source Code | Description |
|
||||
|-------------|-------------|
|
||||
| CORRELATION_LOGICAL | Logical correlation analysis |
|
||||
| SMART_MONEY_TRADE | Smart money trade tracking |
|
||||
| PRICE_SPIKE | Price spike detection |
|
||||
| CLUSTER_ENTRY | Cluster entry signals |
|
||||
| WHALE_POSITION | Whale position monitoring |
|
||||
| NEW_WALLET_TRADE | New wallet trade detection |
|
||||
| INSIDER_PATTERN | Insider pattern recognition |
|
||||
| CORRELATION_NARRATIVE | Narrative correlation analysis |
|
||||
| CORRELATION_HEDGE | Hedge correlation analysis |
|
||||
| CORRELATION_ENTITY_GEO | Geopolitical entity correlation |
|
||||
| CORRELATION_CAUSAL | Causal correlation analysis |
|
||||
| SETTLEMENT_ARBITRAGE | Settlement arbitrage signals |
|
||||
|
||||
## Available Tools
|
||||
|
||||
### Discovery
|
||||
- **get_news_sources**: Get all available news source categories (Bloomberg, Reuters, etc.)
|
||||
- **list_news_types**: Flat list of news type codes for filtering
|
||||
- **get_news_sources**: Get the full engine tree with all 6 categories and 85+ sources, including metadata (names, icons, AI-enabled status)
|
||||
- **list_news_types**: Flat list of all source codes for use in filters
|
||||
|
||||
### News Search
|
||||
- **get_latest_news**: Get most recent news (no filters)
|
||||
- **search_news**: Search by keyword
|
||||
- **search_news_by_coin**: Search by coin symbol (BTC, ETH, SOL, etc.)
|
||||
- **get_news_by_source**: Filter by source (Bloomberg, Reuters, Coindesk, etc.)
|
||||
- **get_news_by_engine**: Filter by engine type (news, listing, onchain, meme, market)
|
||||
- **search_news_by_date**: Search within a date range
|
||||
- **get_latest_news**: Most recent articles across all sources
|
||||
- **search_news**: Full-text keyword search across all sources
|
||||
- **search_news_by_coin**: Filter by coin symbol (BTC, ETH, SOL, etc.)
|
||||
- **get_news_by_source**: Filter by specific source within a category (e.g. engine_type="news", news_type="Bloomberg")
|
||||
- **get_news_by_engine**: Filter by entire engine category (e.g. "listing" for all exchange listing alerts, "prediction" for AI prediction signals)
|
||||
- **search_news_advanced**: Combined multi-filter search (coins + keywords + engine types + has_coin)
|
||||
|
||||
### AI Ratings
|
||||
- **get_high_score_news**: Get articles with high AI scores (>=70)
|
||||
- **get_news_by_signal**: Filter by trading signal (long/short/neutral)
|
||||
### AI Ratings & Signals
|
||||
- **get_high_score_news**: Articles with high AI impact scores (0-100 scale)
|
||||
- **get_news_by_signal**: Filter by AI trading signal — "long" (bullish), "short" (bearish), or "neutral"
|
||||
|
||||
### Finance Enhancement
|
||||
- **search_companies**: Search public company candidates by keyword, ticker, CIK, or fuzzy company name
|
||||
- **get_company_info**: Resolve a company and list available SEC filings, research reports, earnings-call transcripts, report forms, and financial item names
|
||||
- **get_company_report_text**: Fetch SEC filing, third-party research report, or earnings-call transcript text by report name, form, accession, source key, quarter hint, section, or text search
|
||||
- **get_crypto_holdings**: Query wallet-visible on-chain holdings evidence for an institution or address; results are Blockscout address-balance evidence, not proof of beneficial ownership or a trading signal
|
||||
- **get_crypto_holding_changes**: Query on-chain holdings changes between adjacent snapshots, with optional token, date, and change-type filters
|
||||
|
||||
For the MCP tool, pass `change_types` as a comma-separated string such as `"increase,decrease"`. `get_crypto_holding_changes` defaults `auto_collect` to false; call `get_crypto_holdings` first with `auto_collect=true` or `force_collect=true` when you need to populate a fresh wallet snapshot.
|
||||
|
||||
### Real-time
|
||||
- **subscribe_latest_news**: Connect to WebSocket for live news updates
|
||||
- **subscribe_latest_news**: WebSocket live feed with optional filters by coins, engine types
|
||||
|
||||
## Workflow Examples
|
||||
|
||||
1. **Quick market overview**: `get_latest_news(limit=10)`
|
||||
2. **Coin-specific research**: `search_news_by_coin(coin="BTC", limit=20)`
|
||||
3. **Source-specific feed**: `get_news_by_source(source="Bloomberg")`
|
||||
4. **Bullish signals**: `get_news_by_signal(signal="long")`
|
||||
5. **High-impact news**: `get_high_score_news(min_score=80)`
|
||||
1. **Breaking news scan**: `get_latest_news(limit=20)` — see what's happening right now across all 85+ sources
|
||||
2. **Institutional media only**: `get_news_by_source(engine_type="news", news_type="Bloomberg")` — Bloomberg-only feed
|
||||
3. **Exchange listing alpha**: `get_news_by_engine(engine_type="listing")` — catch new token listings on Binance, Coinbase, Upbit, etc.
|
||||
4. **Whale watching**: `get_news_by_engine(engine_type="onchain")` — Hyperliquid whale trades and large position activity
|
||||
5. **Market anomalies**: `get_news_by_engine(engine_type="market")` — price spikes, liquidations, OI changes, funding rate divergences
|
||||
6. **AI predictions**: `get_news_by_engine(engine_type="prediction")` — smart money trades, whale positions, correlations, insider patterns
|
||||
7. **Coin deep-dive**: `search_news_by_coin(coin="ETH", limit=30)` — all ETH-related news across every source
|
||||
8. **Bullish signals**: `get_news_by_signal(signal="long")` — AI-detected bullish catalysts
|
||||
9. **Multi-filter power search**: `search_news_advanced(coins="BTC,ETH", engine_types="news:Bloomberg,Reuters;market:", keyword="ETF")` — Bloomberg & Reuters ETF news for BTC/ETH plus all market signals
|
||||
10. **Live monitoring**: `subscribe_latest_news(wait_seconds=15, coins="BTC", engine_types="news:;market:")` — real-time BTC news + market anomalies
|
||||
11. **Company filings workflow**: `get_company_info(company="IBM")`, then `get_company_report_text(company="IBM", report_name="10-K", form_type="10-K")` — discover and fetch company reports
|
||||
12. **On-chain holdings evidence**: `get_crypto_holdings(address="0x...", chain="ethereum", token_symbol="ETH")` — inspect visible wallet-balance evidence
|
||||
|
||||
## Data Structure
|
||||
|
||||
Each news article contains:
|
||||
- `id`: Unique article ID
|
||||
- `text`: Article headline/content
|
||||
- `newsType`: Source type (Bloomberg, Reuters, etc.)
|
||||
- `engineType`: Engine category (news, listing, onchain, etc.)
|
||||
- `newsType`: Source code (e.g. "Bloomberg", "Binance", "price_change")
|
||||
- `engineType`: Engine category ("news", "listing", "onchain", "meme", "market", "prediction")
|
||||
- `link`: URL to original article
|
||||
- `coins`: Array of related coins with symbol, market_type, match
|
||||
- `aiRating`: AI analysis with score, grade, signal, summary, enSummary
|
||||
- `ts`: Timestamp of the article
|
||||
- `coins`: Array of related coins `[{symbol, market_type, match}]`
|
||||
- `aiRating`: AI analysis object:
|
||||
- `score`: Impact score 0-100
|
||||
- `grade`: Letter grade (A/B/C/D)
|
||||
- `signal`: Trading signal ("long" / "short" / "neutral")
|
||||
- `status`: Analysis status ("done" = completed)
|
||||
- `summary`: Chinese summary
|
||||
- `enSummary`: English summary
|
||||
- `ts`: ISO timestamp
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
---
|
||||
name: opennews
|
||||
description: Crypto news search, AI ratings, trading signals, and real-time updates via the OpenNews 6551 API. Supports keyword search, coin filtering, source filtering, AI score ranking, and WebSocket live feeds.
|
||||
description: "Real-time crypto, equities, macro, and financial market news aggregator — 85+ data sources across 6 categories covering digital assets, U.S. stocks, semiconductors, AI infrastructure, supply chains, commodities, rates, policy, and market-moving social/news signals. Sources include Bloomberg, Reuters, FT, CNBC, CoinDesk, Twitter/X, Binance, Coinbase, OKX, Hyperliquid whale trades, price/funding/liquidation alerts, and 12 AI prediction signals. AI-analyzed with impact score, trading signals, and bilingual summaries. **Free tools available without token**."
|
||||
|
||||
user-invocable: true
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- OPENNEWS_TOKEN
|
||||
bins:
|
||||
- curl
|
||||
optionalEnv:
|
||||
- OPENNEWS_TOKEN
|
||||
primaryEnv: OPENNEWS_TOKEN
|
||||
emoji: "\U0001F4F0"
|
||||
install:
|
||||
@@ -21,17 +21,30 @@ metadata:
|
||||
- darwin
|
||||
- linux
|
||||
- win32
|
||||
version: 1.0.0
|
||||
version: 1.0.5
|
||||
---
|
||||
|
||||
# OpenNews Crypto News Skill
|
||||
# OpenNews Financial Market News Skill
|
||||
|
||||
Query crypto news from the 6551 platform REST API. All endpoints require a Bearer token via `$OPENNEWS_TOKEN`.
|
||||
Real-time crypto, equities, macro, and financial market news aggregator powered by 6551.io — **85+ data sources** across 6 engine categories, all AI-analyzed with impact scores, trading signals, and bilingual summaries.
|
||||
|
||||
Use OpenNews for time-sensitive, market-moving news and signals across digital assets, U.S. stocks, semiconductors, AI infrastructure, supply chains, commodities, rates, policy, and social/news channels that can affect prices or investor positioning.
|
||||
|
||||
**Get your token**: https://6551.io/mcp
|
||||
|
||||
**Base URL**: `https://ai.6551.io`
|
||||
|
||||
## Data Sources — 85+ Sources Across 6 Categories
|
||||
|
||||
| Category | Count | Key Sources |
|
||||
|----------|-------|-------------|
|
||||
| **News** | 55 | Bloomberg, Reuters, Financial Times, CNBC, CNN, BBC, Fox Business, CoinDesk, Cointelegraph, The Block, Blockworks, Decrypt, DlNews, A16Z, TechCrunch, Wired, Politico, Business Insider, Twitter/X, Telegram, Weibo, Truth Social, U.S. Treasury, ECB, TASS, Handelsblatt, Welt, Ambrey, Morgan Stanley, PR Newswire, GlobeNewswire, Business Wire, Coinbase, and more; useful for crypto, U.S. equities, semiconductors, AI infrastructure, supply chains, commodities, rates, policy, and market-moving social/news signals |
|
||||
| **Listing** | 9 | Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood, Hyperliquid, Aster |
|
||||
| **OnChain** | 2 | Hyperliquid Whale Trade, Hyperliquid Large Position |
|
||||
| **Meme** | 1 | Twitter meme coin social sentiment |
|
||||
| **Market** | 6 | Price Change, Funding Rate, Funding Rate Difference, Large Liquidation, Market Trends, OI Change |
|
||||
| **Prediction** | 12 | CORRELATION_LOGICAL, SMART_MONEY_TRADE, PRICE_SPIKE, CLUSTER_ENTRY, WHALE_POSITION, NEW_WALLET_TRADE, INSIDER_PATTERN, CORRELATION_NARRATIVE, CORRELATION_HEDGE, CORRELATION_ENTITY_GEO, CORRELATION_CAUSAL, SETTLEMENT_ARBITRAGE |
|
||||
|
||||
## Authentication
|
||||
|
||||
All requests require the header:
|
||||
@@ -45,14 +58,14 @@ Authorization: Bearer $OPENNEWS_TOKEN
|
||||
|
||||
### 1. Get News Sources
|
||||
|
||||
Fetch all available news source categories organized by engine type.
|
||||
Fetch the full engine tree with all 6 categories and 85+ sources.
|
||||
|
||||
```bash
|
||||
curl -s -H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
"https://ai.6551.io/open/news_type"
|
||||
```
|
||||
|
||||
Returns a tree with engine types (`news`, `listing`, `onchain`, `meme`, `market`) and their sub-categories.
|
||||
Returns a tree with engine types (`news` — 55 sources, `listing` — 9 exchanges, `onchain` — 2 Hyperliquid trackers, `meme` — 1 sentiment source, `market` — 6 anomaly signals, `prediction` — 12 AI prediction signals) and their sub-categories.
|
||||
|
||||
### 2. Search News
|
||||
|
||||
@@ -71,7 +84,7 @@ curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"q": "bitcoin ETF", "limit": 10, "page": 1}'
|
||||
-d '{"q": "bitcoin OR ETF", "limit": 10, "page": 1}'
|
||||
```
|
||||
|
||||
**Search by coin symbol:**
|
||||
@@ -108,6 +121,69 @@ curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
| `coins` | string[] | no | Filter by coin symbols (e.g. `["BTC","ETH"]`) |
|
||||
| `engineTypes`| map[string][]string | no | Filter by engine and news types |
|
||||
| `hasCoin` | boolean | no | Only return news with associated coins |
|
||||
| `score` | integer | no | Filter by minimum AI score (0-100) |
|
||||
|
||||
Important: You need to understand the user's query intent and perform word segmentation, then combine them using OR/AND to form search keywords, supporting both Chinese and English.
|
||||
|
||||
---
|
||||
|
||||
## Finance Enhancement Endpoints
|
||||
|
||||
These authenticated endpoints provide company report discovery, company report text, and wallet-visible on-chain holdings evidence. Responses are wrapped as `{"success": true, "data": ...}` and may include usage quota metadata.
|
||||
|
||||
### Company Search
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://ai.6551.io/open/finance-enhance/company-search" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"keyword": "IBM", "limit": 20, "auto_collect": true}'
|
||||
```
|
||||
|
||||
### Company Info
|
||||
|
||||
Returns company identity, available SEC filings, third-party research reports, earnings-call transcripts, report forms, and financial item names.
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://ai.6551.io/open/finance-enhance/company-info" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"company": "IBM", "auto_collect": true, "filing_limit": 300, "fact_limit": 5000}'
|
||||
```
|
||||
|
||||
### Company Report Text
|
||||
|
||||
Fetches SEC filing, third-party research report, or earnings-call transcript text by report name, form, accession, source key, quarter hint, section, or text search.
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://ai.6551.io/open/finance-enhance/company-report-text" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"company": "IBM", "report_name": "10-K", "form_type": "10-K", "auto_collect": true}'
|
||||
```
|
||||
|
||||
### Crypto Holdings Evidence
|
||||
|
||||
Returns Blockscout address-balance evidence for an institution or wallet address. It is not proof of economic ownership, beneficial ownership, investment advice, or a trading signal.
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://ai.6551.io/open/finance-enhance/crypto-holdings" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"address": "0x...", "chain": "ethereum", "token_symbol": "ETH", "limit": 100}'
|
||||
```
|
||||
|
||||
### Crypto Holding Changes
|
||||
|
||||
Returns changes between adjacent wallet snapshots. At least two snapshots are needed to produce changed records.
|
||||
The raw HTTP API accepts `change_types` as a JSON array. The MCP tool `get_crypto_holding_changes` accepts a comma-separated string such as `increase,decrease` and defaults `auto_collect` to `false`; collect holdings first when a fresh wallet snapshot is needed.
|
||||
|
||||
```bash
|
||||
curl -s -X POST "https://ai.6551.io/open/finance-enhance/crypto-holding-changes" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"address": "0x...", "chain": "ethereum", "change_types": ["increase", "decrease"], "auto_collect": false, "limit": 100}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -122,7 +198,7 @@ curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
"newsType": "Bloomberg",
|
||||
"engineType": "news",
|
||||
"link": "https://...",
|
||||
"coins": [{"symbol": "BTC", "market_type": "spot", "match": "title"}],
|
||||
"coins": [{"symbol": "BTC", "market_type": "cex", "match": "title"}],
|
||||
"aiRating": {
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
@@ -152,11 +228,97 @@ curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
curl -s -X POST "https://ai.6551.io/open/news_search" \
|
||||
-H "Authorization: Bearer $OPENNEWS_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"limit": 50, "page": 1}' | jq '[.data[] | select(.aiRating.score >= 80)]'
|
||||
-d '{"score": 80, "limit": 50, "page": 1}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Free API Endpoints (No Token Required)
|
||||
|
||||
If you don't have an `OPENNEWS_TOKEN`, you can use these free endpoints as a fallback. These provide curated hot news and trending tweets by category, but with limited search capabilities compared to the authenticated API.
|
||||
|
||||
### 1. Get Free News Categories
|
||||
|
||||
Get all available news categories and subcategories for the free tier.
|
||||
|
||||
```bash
|
||||
curl -s -X GET "https://ai.6551.io/open/free_categories"
|
||||
```
|
||||
|
||||
### 2. Get Hot News by Category
|
||||
|
||||
Get hot news articles and trending tweets by category. No authentication required.
|
||||
|
||||
```bash
|
||||
curl -s -X GET "https://ai.6551.io/open/free_hot?category=macro"
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
|
||||
| Parameter | Type | Required | Description |
|
||||
|-----------|------|----------|-------------|
|
||||
| `category` | string | yes | Category key from free_categories |
|
||||
| `subcategory` | string | no | Subcategory key for more specific filtering |
|
||||
|
||||
**Response Structure:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"category": "crypto",
|
||||
"subcategory": "defi",
|
||||
"news": {
|
||||
"success": true,
|
||||
"count": 10,
|
||||
"items": [
|
||||
{
|
||||
"id": 123,
|
||||
"title": "...",
|
||||
"source": "...",
|
||||
"link": "https://...",
|
||||
"score": 85,
|
||||
"grade": "A",
|
||||
"signal": "bullish",
|
||||
"summary_zh": "...",
|
||||
"summary_en": "...",
|
||||
"coins": ["BTC", "ETH"],
|
||||
"published_at": "2026-03-17T10:00:00Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
"tweets": {
|
||||
"success": true,
|
||||
"count": 5,
|
||||
"items": [
|
||||
{
|
||||
"author": "Vitalik Buterin",
|
||||
"handle": "VitalikButerin",
|
||||
"content": "...",
|
||||
"url": "https://...",
|
||||
"metrics": { "likes": 1000, "retweets": 200, "replies": 50 },
|
||||
"posted_at": "2026-03-17T09:00:00Z",
|
||||
"relevance": "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Example - Get Hot Macro News:**
|
||||
```bash
|
||||
curl -s -X GET "https://ai.6551.io/open/free_hot?category=macro"
|
||||
```
|
||||
|
||||
**Example - Get DeFi Subcategory News:**
|
||||
```bash
|
||||
curl -s -X GET "https://ai.6551.io/open/free_hot?category=macro&subcategory=defi"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Get your API token at https://6551.io/mcp
|
||||
- Rate limits apply; max 100 results per request
|
||||
- **Primary API**: Get your token at https://6551.io/mcp for full access to 85+ sources with advanced search
|
||||
- **Free API**: Use free endpoints as fallback when token is unavailable (limited to curated hot news)
|
||||
- Rate limits apply; max 100 results per request for authenticated API
|
||||
- AI ratings may not be available on all articles (check `status == "done"`)
|
||||
- Free API data is cached and updated periodically; if data is still being generated, a 503 response will be returned
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "opennews",
|
||||
"version": "0.1.0",
|
||||
"description": "Crypto news search, AI ratings, trading signals, and real-time updates via the OpenNews 6551 API",
|
||||
"description": "85+ real-time crypto & financial news sources across 6 categories (News, Listing, OnChain, Meme, Market, Prediction) with AI ratings, trading signals, and bilingual summaries via the OpenNews 6551 API",
|
||||
"author": "0xfaskety",
|
||||
"license": "MIT",
|
||||
"homepage": "https://github.com/0xfaskety/opennews-mcp",
|
||||
@@ -22,6 +22,14 @@
|
||||
"ai-ratings",
|
||||
"signals",
|
||||
"blockchain",
|
||||
"defi"
|
||||
"defi",
|
||||
"bloomberg",
|
||||
"reuters",
|
||||
"onchain",
|
||||
"whale-tracking",
|
||||
"market-signals",
|
||||
"exchange-listings",
|
||||
"meme-coins",
|
||||
"real-time"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -15,6 +15,65 @@ logger = logging.getLogger(__name__)
|
||||
MAX_RETRIES = 2
|
||||
|
||||
|
||||
class FreeNewsAPIClient:
|
||||
"""Async HTTP client for free (no-auth) 6551 news API endpoints."""
|
||||
|
||||
def __init__(self, base_url: str = API_BASE_URL):
|
||||
self.base_url = base_url.rstrip("/")
|
||||
self._client: Optional[httpx.AsyncClient] = None
|
||||
|
||||
async def _get_client(self) -> httpx.AsyncClient:
|
||||
if self._client is None or self._client.is_closed:
|
||||
self._client = httpx.AsyncClient(timeout=httpx.Timeout(30.0))
|
||||
return self._client
|
||||
|
||||
async def _reset_client(self):
|
||||
"""Force close and recreate the HTTP client."""
|
||||
if self._client and not self._client.is_closed:
|
||||
await self._client.aclose()
|
||||
self._client = None
|
||||
|
||||
async def close(self):
|
||||
await self._reset_client()
|
||||
|
||||
async def _request(self, method: str, url: str, **kwargs) -> httpx.Response:
|
||||
"""Execute an HTTP request with automatic retry on connection errors."""
|
||||
last_exc = None
|
||||
for attempt in range(MAX_RETRIES + 1):
|
||||
try:
|
||||
client = await self._get_client()
|
||||
resp = await client.request(method, url, **kwargs)
|
||||
resp.raise_for_status()
|
||||
return resp
|
||||
except (httpx.ConnectError, httpx.RemoteProtocolError) as e:
|
||||
last_exc = e
|
||||
logger.warning(
|
||||
"Connection error (attempt %d/%d): %s",
|
||||
attempt + 1, MAX_RETRIES + 1, repr(e),
|
||||
)
|
||||
await self._reset_client()
|
||||
except httpx.HTTPStatusError:
|
||||
raise
|
||||
raise last_exc # type: ignore[misc]
|
||||
|
||||
async def get_free_categories(self) -> dict:
|
||||
"""GET /open/free_categories — 获取所有新闻分类"""
|
||||
resp = await self._request("GET", f"{self.base_url}/open/free_categories")
|
||||
return resp.json()
|
||||
|
||||
async def get_free_hot(
|
||||
self,
|
||||
category: str,
|
||||
subcategory: str = "",
|
||||
) -> dict:
|
||||
"""GET /open/free_hot — 获取热点新闻和推文"""
|
||||
params: dict = {"category": category}
|
||||
if subcategory:
|
||||
params["subcategory"] = subcategory
|
||||
resp = await self._request("GET", f"{self.base_url}/open/free_hot", params=params)
|
||||
return resp.json()
|
||||
|
||||
|
||||
class NewsAPIClient:
|
||||
"""Async HTTP client for the 6551 news REST API."""
|
||||
|
||||
@@ -81,6 +140,7 @@ class NewsAPIClient:
|
||||
query: Optional[str] = None,
|
||||
engine_types: Optional[dict[str, list[str]]] = None,
|
||||
has_coin: bool = False,
|
||||
score: Optional[int] = None,
|
||||
limit: int = 20,
|
||||
page: int = 1,
|
||||
) -> dict:
|
||||
@@ -94,10 +154,174 @@ class NewsAPIClient:
|
||||
body["engineTypes"] = engine_types
|
||||
if has_coin:
|
||||
body["hasCoin"] = has_coin
|
||||
if score is not None:
|
||||
body["score"] = score
|
||||
|
||||
resp = await self._request("POST", f"{self.base_url}/open/news_search", json=body)
|
||||
return resp.json()
|
||||
|
||||
async def search_companies(
|
||||
self,
|
||||
keyword: str,
|
||||
limit: int = 20,
|
||||
auto_collect: bool = True,
|
||||
) -> dict:
|
||||
"""POST /open/finance-enhance/company-search — search public company candidates."""
|
||||
body = {
|
||||
"keyword": keyword,
|
||||
"limit": limit,
|
||||
"auto_collect": auto_collect,
|
||||
}
|
||||
resp = await self._request(
|
||||
"POST",
|
||||
f"{self.base_url}/open/finance-enhance/company-search",
|
||||
json=body,
|
||||
)
|
||||
return resp.json()
|
||||
|
||||
async def get_company_info(
|
||||
self,
|
||||
company: str,
|
||||
auto_collect: bool = True,
|
||||
filing_limit: int = 300,
|
||||
fact_limit: int = 5000,
|
||||
include_all_filings: bool = False,
|
||||
) -> dict:
|
||||
"""POST /open/finance-enhance/company-info — get company metadata and report indexes."""
|
||||
body = {
|
||||
"company": company,
|
||||
"auto_collect": auto_collect,
|
||||
"filing_limit": filing_limit,
|
||||
"fact_limit": fact_limit,
|
||||
"include_all_filings": include_all_filings,
|
||||
}
|
||||
resp = await self._request(
|
||||
"POST",
|
||||
f"{self.base_url}/open/finance-enhance/company-info",
|
||||
json=body,
|
||||
)
|
||||
return resp.json()
|
||||
|
||||
async def get_company_report_text(
|
||||
self,
|
||||
company: str,
|
||||
report_name: str,
|
||||
accession: Optional[str] = None,
|
||||
form_type: Optional[str] = None,
|
||||
section_key: Optional[str] = None,
|
||||
text_search: Optional[str] = None,
|
||||
auto_collect: bool = True,
|
||||
max_section_chars: int = 100000,
|
||||
filing_search_limit: int = 300,
|
||||
section_limit: int = 1000,
|
||||
) -> dict:
|
||||
"""POST /open/finance-enhance/company-report-text — get filing/report/transcript text."""
|
||||
body: dict[str, Any] = {
|
||||
"company": company,
|
||||
"report_name": report_name,
|
||||
"auto_collect": auto_collect,
|
||||
"max_section_chars": max_section_chars,
|
||||
"filing_search_limit": filing_search_limit,
|
||||
"section_limit": section_limit,
|
||||
}
|
||||
optional_fields = {
|
||||
"accession": accession,
|
||||
"form_type": form_type,
|
||||
"section_key": section_key,
|
||||
"text_search": text_search,
|
||||
}
|
||||
body.update({key: value for key, value in optional_fields.items() if value})
|
||||
resp = await self._request(
|
||||
"POST",
|
||||
f"{self.base_url}/open/finance-enhance/company-report-text",
|
||||
json=body,
|
||||
)
|
||||
return resp.json()
|
||||
|
||||
async def get_crypto_holdings(
|
||||
self,
|
||||
institution: Optional[str] = None,
|
||||
address: Optional[str] = None,
|
||||
chain: Optional[str] = None,
|
||||
token_symbol: Optional[str] = None,
|
||||
token_address: Optional[str] = None,
|
||||
as_of: Optional[str] = None,
|
||||
auto_collect: bool = True,
|
||||
force_collect: bool = False,
|
||||
collect_max_rows: Optional[int] = None,
|
||||
limit: int = 100,
|
||||
) -> dict:
|
||||
"""POST /open/finance-enhance/crypto-holdings — get on-chain holdings evidence."""
|
||||
body: dict[str, Any] = {
|
||||
"auto_collect": auto_collect,
|
||||
"force_collect": force_collect,
|
||||
"limit": limit,
|
||||
}
|
||||
optional_fields = {
|
||||
"institution": institution,
|
||||
"address": address,
|
||||
"chain": chain,
|
||||
"token_symbol": token_symbol,
|
||||
"token_address": token_address,
|
||||
"as_of": as_of,
|
||||
"collect_max_rows": collect_max_rows,
|
||||
}
|
||||
body.update({
|
||||
key: value for key, value in optional_fields.items()
|
||||
if value is not None and value != ""
|
||||
})
|
||||
resp = await self._request(
|
||||
"POST",
|
||||
f"{self.base_url}/open/finance-enhance/crypto-holdings",
|
||||
json=body,
|
||||
)
|
||||
return resp.json()
|
||||
|
||||
async def get_crypto_holding_changes(
|
||||
self,
|
||||
institution: Optional[str] = None,
|
||||
address: Optional[str] = None,
|
||||
chain: Optional[str] = None,
|
||||
token_symbol: Optional[str] = None,
|
||||
token_address: Optional[str] = None,
|
||||
change_types: Optional[list[str]] = None,
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
include_unchanged: bool = False,
|
||||
auto_collect: bool = False,
|
||||
force_collect: bool = False,
|
||||
collect_max_rows: Optional[int] = None,
|
||||
limit: int = 100,
|
||||
) -> dict:
|
||||
"""POST /open/finance-enhance/crypto-holding-changes — get holdings changes."""
|
||||
body: dict[str, Any] = {
|
||||
"include_unchanged": include_unchanged,
|
||||
"auto_collect": auto_collect,
|
||||
"force_collect": force_collect,
|
||||
"limit": limit,
|
||||
}
|
||||
optional_fields = {
|
||||
"institution": institution,
|
||||
"address": address,
|
||||
"chain": chain,
|
||||
"token_symbol": token_symbol,
|
||||
"token_address": token_address,
|
||||
"change_types": change_types,
|
||||
"start_date": start_date,
|
||||
"end_date": end_date,
|
||||
"collect_max_rows": collect_max_rows,
|
||||
}
|
||||
body.update({
|
||||
key: value for key, value in optional_fields.items()
|
||||
if value is not None and value != "" and value != []
|
||||
})
|
||||
resp = await self._request(
|
||||
"POST",
|
||||
f"{self.base_url}/open/finance-enhance/crypto-holding-changes",
|
||||
json=body,
|
||||
)
|
||||
return resp.json()
|
||||
|
||||
|
||||
|
||||
class NewsWSClient:
|
||||
|
||||
+40
-8
@@ -7,7 +7,8 @@ from pathlib import Path
|
||||
|
||||
from mcp.server.fastmcp import FastMCP
|
||||
|
||||
from opennews_mcp.api_client import NewsAPIClient, NewsWSClient
|
||||
from opennews_mcp.api_client import FreeNewsAPIClient, NewsAPIClient, NewsWSClient
|
||||
from opennews_mcp.config import HAS_TOKEN
|
||||
|
||||
# Knowledge directory (project root / knowledge)
|
||||
KNOWLEDGE_DIR = Path(__file__).resolve().parent.parent.parent / "knowledge"
|
||||
@@ -16,25 +17,56 @@ KNOWLEDGE_DIR = Path(__file__).resolve().parent.parent.parent / "knowledge"
|
||||
@dataclass
|
||||
class AppContext:
|
||||
"""Shared application state available to all tools via ctx."""
|
||||
api: NewsAPIClient
|
||||
ws: NewsWSClient
|
||||
free_api: FreeNewsAPIClient
|
||||
api: NewsAPIClient | None = None
|
||||
ws: NewsWSClient | None = None
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def app_lifespan(server: FastMCP) -> AsyncIterator[AppContext]:
|
||||
"""Manage the API client lifecycle."""
|
||||
api = NewsAPIClient()
|
||||
ws = NewsWSClient()
|
||||
free_api = FreeNewsAPIClient()
|
||||
api = NewsAPIClient() if HAS_TOKEN else None
|
||||
ws = NewsWSClient() if HAS_TOKEN else None
|
||||
try:
|
||||
yield AppContext(api=api, ws=ws)
|
||||
yield AppContext(free_api=free_api, api=api, ws=ws)
|
||||
finally:
|
||||
await api.close()
|
||||
await ws.close()
|
||||
await free_api.close()
|
||||
if api:
|
||||
await api.close()
|
||||
if ws:
|
||||
await ws.close()
|
||||
|
||||
|
||||
# ---------- FastMCP instance ----------
|
||||
_INSTRUCTIONS = """\
|
||||
OpenNews MCP — Real-time crypto & financial news aggregator powered by 6551.io.
|
||||
|
||||
Aggregates 85+ data sources across 6 engine categories:
|
||||
- NEWS (55 sources): Bloomberg, Reuters, Financial Times, CNBC, CNN, BBC, Fox Business, \
|
||||
CoinDesk, Cointelegraph, The Block, Blockworks, Decrypt, DlNews, A16Z, TechCrunch, Wired, \
|
||||
Politico, Business Insider, Twitter/X, Telegram, Weibo, Truth Social, U.S. Treasury, ECB, \
|
||||
TASS, Handelsblatt, Welt, Ambrey, Morgan Stanley, PR Newswire, GlobeNewswire, Business Wire, \
|
||||
Coinbase, and more.
|
||||
- LISTING (9 sources): Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood, \
|
||||
Hyperliquid, Aster — new token listing announcements.
|
||||
- ONCHAIN (2 sources): Hyperliquid Whale Trade, Hyperliquid Large Position — \
|
||||
Hyperliquid whale trades and large position activity.
|
||||
- MEME (1 source): Twitter meme coin social sentiment.
|
||||
- MARKET (6 sources): Price Change, Funding Rate, Funding Rate Difference, \
|
||||
Large Liquidation, Market Trends, OI Change — quantitative market signals.
|
||||
- PREDICTION (12 sources): CORRELATION_LOGICAL, SMART_MONEY_TRADE, PRICE_SPIKE, \
|
||||
CLUSTER_ENTRY, WHALE_POSITION, NEW_WALLET_TRADE, INSIDER_PATTERN, \
|
||||
CORRELATION_NARRATIVE, CORRELATION_HEDGE, CORRELATION_ENTITY_GEO, \
|
||||
CORRELATION_CAUSAL, SETTLEMENT_ARBITRAGE — AI-powered prediction signals.
|
||||
|
||||
All articles are AI-analyzed with impact score (0-100), trading signal (long/short/neutral), \
|
||||
and bilingual summaries (EN/ZH).
|
||||
"""
|
||||
|
||||
mcp = FastMCP(
|
||||
"opennews-6551",
|
||||
instructions=_INSTRUCTIONS,
|
||||
lifespan=app_lifespan,
|
||||
json_response=True,
|
||||
)
|
||||
|
||||
@@ -24,12 +24,24 @@ API_BASE_URL = os.environ.get("OPENNEWS_API_BASE") or _cfg.get("api_base_url", "
|
||||
WSS_URL = os.environ.get("OPENNEWS_WSS_URL") or _cfg.get("wss_url", "")
|
||||
API_TOKEN = os.environ.get("OPENNEWS_TOKEN") or _cfg.get("api_token", "")
|
||||
|
||||
# 检查 token 是否配置
|
||||
if not API_TOKEN:
|
||||
raise ValueError(
|
||||
"OPENNEWS_TOKEN 未配置。请前往 https://6551.io/mcp 申请 API Token,"
|
||||
"然后设置环境变量 OPENNEWS_TOKEN 或在 config.json 中配置 api_token。"
|
||||
)
|
||||
# Token 状态检查(可选)
|
||||
HAS_TOKEN = bool(API_TOKEN)
|
||||
|
||||
TOKEN_REQUIRED_MSG = (
|
||||
"此工具需要 API Token 才能使用。\n"
|
||||
"请前往 https://6551.io/mcp 免费申请 Token,\n"
|
||||
"然后设置环境变量 OPENNEWS_TOKEN 或在 config.json 中填写 api_token。\n\n"
|
||||
"This tool requires an API token. "
|
||||
"Get your free token at https://6551.io/mcp, "
|
||||
"then set OPENNEWS_TOKEN env var or add api_token to config.json."
|
||||
)
|
||||
|
||||
|
||||
def require_token() -> dict | None:
|
||||
"""检查是否配置了 token,未配置时返回错误信息。"""
|
||||
if not HAS_TOKEN:
|
||||
return {"success": False, "error": TOKEN_REQUIRED_MSG}
|
||||
return None
|
||||
|
||||
# ---------- Safety ----------
|
||||
MAX_ROWS = int(os.environ.get("OPENNEWS_MAX_ROWS", 0) or _cfg.get("max_rows", 100))
|
||||
|
||||
@@ -4,5 +4,7 @@ Each module is self-contained and atomic — no inter-tool dependencies.
|
||||
"""
|
||||
|
||||
from opennews_mcp.tools import discovery # noqa: F401
|
||||
from opennews_mcp.tools import finance # noqa: F401
|
||||
from opennews_mcp.tools import free # noqa: F401
|
||||
from opennews_mcp.tools import news # noqa: F401
|
||||
from opennews_mcp.tools import realtime # noqa: F401
|
||||
|
||||
@@ -1,19 +1,46 @@
|
||||
"""Discovery tools — list available news sources and categories."""
|
||||
"""Discovery tools — list available financial market news sources and categories."""
|
||||
|
||||
from mcp.server.fastmcp import Context
|
||||
|
||||
from opennews_mcp.app import mcp
|
||||
from opennews_mcp.config import require_token
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_news_sources(ctx: Context) -> dict:
|
||||
"""Get all available news source categories and their metadata.
|
||||
"""Get all available market news source categories and their metadata.
|
||||
|
||||
Returns a tree structure with engine types (news, listing, onchain, meme, market)
|
||||
and their sub-categories (Bloomberg, Reuters, Binance, etc.).
|
||||
This platform aggregates 85+ real-time data sources across 6 engine categories:
|
||||
|
||||
Use this first to understand what news sources are available before searching.
|
||||
NEWS (55 sources): Bloomberg, Reuters, Financial Times, CNBC, CNN, BBC, Fox Business,
|
||||
CoinDesk, Cointelegraph, The Block, Blockworks, Decrypt, DlNews, A16Z, TechCrunch,
|
||||
Wired, Politico, Business Insider, Twitter/X, Telegram, Weibo, Truth Social,
|
||||
U.S. Treasury, ECB, TASS, Handelsblatt, Welt, Ambrey, Morgan Stanley (MS NOW),
|
||||
PR Newswire, GlobeNewswire, Business Wire, Coinbase, and more. Useful for crypto, U.S. equities, macro,
|
||||
semiconductors, AI infrastructure, supply chains, commodities, rates, policy,
|
||||
and market-moving social/news signals.
|
||||
|
||||
LISTING (9 sources): Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood,
|
||||
Hyperliquid, Aster — new token listing announcements from major exchanges.
|
||||
|
||||
ONCHAIN (2 sources): Hyperliquid Whale Trade, Hyperliquid Large Position —
|
||||
Hyperliquid whale trades and large position activity.
|
||||
|
||||
MEME (1 source): Twitter — meme coin social sentiment tracking.
|
||||
|
||||
MARKET (6 sources): Price Change, Funding Rate, Funding Rate Difference,
|
||||
Large Liquidation, Market Trends, OI Change — quantitative market anomaly signals.
|
||||
|
||||
PREDICTION (12 sources): CORRELATION_LOGICAL, SMART_MONEY_TRADE, PRICE_SPIKE,
|
||||
CLUSTER_ENTRY, WHALE_POSITION, NEW_WALLET_TRADE, INSIDER_PATTERN,
|
||||
CORRELATION_NARRATIVE, CORRELATION_HEDGE, CORRELATION_ENTITY_GEO,
|
||||
CORRELATION_CAUSAL, SETTLEMENT_ARBITRAGE — AI-powered prediction signals.
|
||||
|
||||
Returns a tree structure with all engine types and their sub-categories.
|
||||
Use this first to discover what sources are available before searching.
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
|
||||
try:
|
||||
@@ -50,11 +77,14 @@ async def get_news_sources(ctx: Context) -> dict:
|
||||
|
||||
@mcp.tool()
|
||||
async def list_news_types(ctx: Context) -> dict:
|
||||
"""List all available news type codes for filtering.
|
||||
"""List all available market news type codes for filtering.
|
||||
|
||||
Returns a flat list of news source codes that can be used with
|
||||
the newsType parameter in search_news.
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
# See get_news_sources for the full 85+ source catalog.
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
|
||||
try:
|
||||
|
||||
@@ -0,0 +1,239 @@
|
||||
"""Finance enhancement tools — company reports and on-chain holdings evidence."""
|
||||
|
||||
from mcp.server.fastmcp import Context
|
||||
|
||||
from opennews_mcp.app import mcp
|
||||
from opennews_mcp.config import make_serializable, require_token
|
||||
|
||||
|
||||
def _clamp(value: int, low: int, high: int) -> int:
|
||||
return min(max(low, value), high)
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def search_companies(keyword: str, ctx: Context, limit: int = 20, auto_collect: bool = True) -> dict:
|
||||
"""Search public company candidates by keyword, ticker, CIK, or fuzzy company name.
|
||||
|
||||
Args:
|
||||
keyword: Search keyword, ticker, CIK, or company name (e.g. "IBM", "Apple").
|
||||
limit: Maximum company candidates to return (default 20, max 100).
|
||||
auto_collect: Whether to trigger backend collection and retry when cache is missing.
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = _clamp(limit, 1, 100)
|
||||
try:
|
||||
result = await api.search_companies(
|
||||
keyword=keyword,
|
||||
limit=limit,
|
||||
auto_collect=auto_collect,
|
||||
)
|
||||
return make_serializable(result)
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_company_info(
|
||||
company: str,
|
||||
ctx: Context,
|
||||
auto_collect: bool = True,
|
||||
filing_limit: int = 300,
|
||||
fact_limit: int = 5000,
|
||||
include_all_filings: bool = False,
|
||||
) -> dict:
|
||||
"""Resolve a company and return available SEC filings, research reports, transcripts, and financial item indexes.
|
||||
|
||||
Args:
|
||||
company: Company name, ticker, or CIK (e.g. "IBM", "AAPL", "0000320193").
|
||||
auto_collect: Whether to trigger backend collection and retry when cache is missing.
|
||||
filing_limit: Number of filings to scan (default 300, max 1000).
|
||||
fact_limit: Number of financial facts to scan (default 5000, max 20000).
|
||||
include_all_filings: Whether to return all filing forms instead of common report forms only.
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
filing_limit = _clamp(filing_limit, 1, 1000)
|
||||
fact_limit = _clamp(fact_limit, 1, 20000)
|
||||
try:
|
||||
result = await api.get_company_info(
|
||||
company=company,
|
||||
auto_collect=auto_collect,
|
||||
filing_limit=filing_limit,
|
||||
fact_limit=fact_limit,
|
||||
include_all_filings=include_all_filings,
|
||||
)
|
||||
return make_serializable(result)
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_company_report_text(
|
||||
company: str,
|
||||
report_name: str,
|
||||
ctx: Context,
|
||||
accession: str = "",
|
||||
form_type: str = "",
|
||||
section_key: str = "",
|
||||
text_search: str = "",
|
||||
auto_collect: bool = True,
|
||||
max_section_chars: int = 100000,
|
||||
filing_search_limit: int = 300,
|
||||
section_limit: int = 1000,
|
||||
) -> dict:
|
||||
"""Get SEC filing, research report, or earnings-call transcript text by report name or identifier.
|
||||
|
||||
Args:
|
||||
company: Company name, ticker, or CIK.
|
||||
report_name: Report name, form, accession, research slug, transcript source key, or quarter hint.
|
||||
accession: Optional SEC accession, research-report identifier, or transcript identifier.
|
||||
form_type: Optional SEC form type such as "10-K", "10-Q", or "8-K".
|
||||
section_key: Optional section key to fetch a specific section.
|
||||
text_search: Optional keyword to search within report text.
|
||||
auto_collect: Whether to trigger backend collection and retry when cache is missing.
|
||||
max_section_chars: Maximum characters per section (default 100000).
|
||||
filing_search_limit: Candidate filing search limit (default 300).
|
||||
section_limit: Maximum returned sections (default 1000).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
max_section_chars = _clamp(max_section_chars, 1, 500000)
|
||||
filing_search_limit = _clamp(filing_search_limit, 1, 1000)
|
||||
section_limit = _clamp(section_limit, 1, 5000)
|
||||
try:
|
||||
result = await api.get_company_report_text(
|
||||
company=company,
|
||||
report_name=report_name,
|
||||
accession=accession or None,
|
||||
form_type=form_type or None,
|
||||
section_key=section_key or None,
|
||||
text_search=text_search or None,
|
||||
auto_collect=auto_collect,
|
||||
max_section_chars=max_section_chars,
|
||||
filing_search_limit=filing_search_limit,
|
||||
section_limit=section_limit,
|
||||
)
|
||||
return make_serializable(result)
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_crypto_holdings(
|
||||
ctx: Context,
|
||||
institution: str = "",
|
||||
address: str = "",
|
||||
chain: str = "",
|
||||
token_symbol: str = "",
|
||||
token_address: str = "",
|
||||
as_of: str = "",
|
||||
auto_collect: bool = True,
|
||||
force_collect: bool = False,
|
||||
collect_max_rows: int = 0,
|
||||
limit: int = 100,
|
||||
) -> dict:
|
||||
"""Query visible on-chain holdings evidence for an institution or wallet address.
|
||||
|
||||
Returns Blockscout address-balance evidence. This is not proof of economic ownership,
|
||||
beneficial ownership, investment advice, or a trading signal.
|
||||
|
||||
Args:
|
||||
institution: Optional institution name for watchlist matching or result labeling.
|
||||
address: Optional wallet address. If address is provided without chain, backend defaults to ethereum.
|
||||
chain: Optional chain name.
|
||||
token_symbol: Optional token symbol filter, such as "ETH" or "USDC".
|
||||
token_address: Optional token contract address filter.
|
||||
as_of: Optional date or snapshot-time filter.
|
||||
auto_collect: Whether to collect address balances when cache is missing.
|
||||
force_collect: Whether to force a fresh address-balance collection.
|
||||
collect_max_rows: Optional collection row cap; 0 means backend default.
|
||||
limit: Maximum holdings rows to return (default 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = _clamp(limit, 1, 1000)
|
||||
collect_rows = _clamp(collect_max_rows, 1, 10000) if collect_max_rows > 0 else None
|
||||
try:
|
||||
result = await api.get_crypto_holdings(
|
||||
institution=institution or None,
|
||||
address=address or None,
|
||||
chain=chain or None,
|
||||
token_symbol=token_symbol or None,
|
||||
token_address=token_address or None,
|
||||
as_of=as_of or None,
|
||||
auto_collect=auto_collect,
|
||||
force_collect=force_collect,
|
||||
collect_max_rows=collect_rows,
|
||||
limit=limit,
|
||||
)
|
||||
return make_serializable(result)
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_crypto_holding_changes(
|
||||
ctx: Context,
|
||||
institution: str = "",
|
||||
address: str = "",
|
||||
chain: str = "",
|
||||
token_symbol: str = "",
|
||||
token_address: str = "",
|
||||
change_types: str = "",
|
||||
start_date: str = "",
|
||||
end_date: str = "",
|
||||
include_unchanged: bool = False,
|
||||
auto_collect: bool = False,
|
||||
force_collect: bool = False,
|
||||
collect_max_rows: int = 0,
|
||||
limit: int = 100,
|
||||
) -> dict:
|
||||
"""Query on-chain holdings changes between adjacent wallet snapshots.
|
||||
|
||||
Args:
|
||||
institution: Optional institution name.
|
||||
address: Optional wallet address. At least two snapshots are needed for changed records.
|
||||
chain: Optional chain name.
|
||||
token_symbol: Optional token symbol filter.
|
||||
token_address: Optional token contract address filter.
|
||||
change_types: Optional comma-separated filters, such as "increase,decrease".
|
||||
start_date: Optional start date filter.
|
||||
end_date: Optional end date filter.
|
||||
include_unchanged: Whether to include unchanged rows.
|
||||
auto_collect: Whether to collect address balances when cache is missing.
|
||||
Defaults to false because address-only change queries can fail in the backend
|
||||
auto-collection path; collect holdings first when a fresh snapshot is needed.
|
||||
force_collect: Whether to force a fresh address-balance collection.
|
||||
collect_max_rows: Optional collection row cap; 0 means backend default.
|
||||
limit: Maximum change rows to return (default 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = _clamp(limit, 1, 1000)
|
||||
collect_rows = _clamp(collect_max_rows, 1, 10000) if collect_max_rows > 0 else None
|
||||
change_type_list = [item.strip() for item in change_types.split(",") if item.strip()] or None
|
||||
try:
|
||||
result = await api.get_crypto_holding_changes(
|
||||
institution=institution or None,
|
||||
address=address or None,
|
||||
chain=chain or None,
|
||||
token_symbol=token_symbol or None,
|
||||
token_address=token_address or None,
|
||||
change_types=change_type_list,
|
||||
start_date=start_date or None,
|
||||
end_date=end_date or None,
|
||||
include_unchanged=include_unchanged,
|
||||
auto_collect=auto_collect,
|
||||
force_collect=force_collect,
|
||||
collect_max_rows=collect_rows,
|
||||
limit=limit,
|
||||
)
|
||||
return make_serializable(result)
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
@@ -0,0 +1,58 @@
|
||||
"""Free financial market news tools — no token required, access via /open/free_* endpoints.
|
||||
|
||||
These tools provide basic news access without authentication.
|
||||
For full features (85+ sources, AI analysis, real-time WebSocket), get a free token at https://6551.io/mcp.
|
||||
"""
|
||||
|
||||
from mcp.server.fastmcp import Context
|
||||
|
||||
from opennews_mcp.app import mcp
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_news_categories(ctx: Context) -> dict:
|
||||
"""Get all available free market news categories and subcategories.
|
||||
|
||||
Returns a list of categories, each containing subcategories,
|
||||
for use with the get_hot_news tool.
|
||||
|
||||
This is a free tool that does not require an API token.
|
||||
"""
|
||||
free_api = ctx.request_context.lifespan_context.free_api
|
||||
try:
|
||||
result = await free_api.get_free_categories()
|
||||
return {"success": True, "data": result}
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_hot_news(
|
||||
category: str,
|
||||
ctx: Context,
|
||||
subcategory: str = "",
|
||||
) -> dict:
|
||||
"""Get hot market news and tweets by category.
|
||||
|
||||
Use this free endpoint for curated real-time financial market news, including
|
||||
crypto, equities, macro, policy, commodities, and market-moving social signals
|
||||
when the authenticated 85+ source search is unavailable.
|
||||
|
||||
Args:
|
||||
category: Category key (required). Use get_news_categories to list available keys.
|
||||
subcategory: Subcategory key (optional).
|
||||
|
||||
Returns:
|
||||
Combined news articles and tweets for the given category.
|
||||
|
||||
This is a free tool that does not require an API token.
|
||||
"""
|
||||
free_api = ctx.request_context.lifespan_context.free_api
|
||||
try:
|
||||
result = await free_api.get_free_hot(
|
||||
category=category,
|
||||
subcategory=subcategory,
|
||||
)
|
||||
return {"success": True, "data": result}
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
@@ -1,24 +1,32 @@
|
||||
"""News content tools — search and retrieve crypto news via REST API.
|
||||
"""News content tools — search and retrieve real-time financial market news via REST API.
|
||||
|
||||
Covers crypto, U.S. equities, macro, semiconductors, AI infrastructure, supply chains,
|
||||
commodities, rates, policy, and market-moving social/news signals across 6 engine categories:
|
||||
news (55 premium media & social sources), listing (9 exchanges), onchain (Hyperliquid whale trades and large positions),
|
||||
meme (social sentiment), market (6 anomaly signals), and prediction (12 AI prediction signals).
|
||||
Uses POST /open/news_search as the primary data source.
|
||||
Returns raw article data as-is from the API.
|
||||
"""
|
||||
|
||||
from mcp.server.fastmcp import Context
|
||||
|
||||
from opennews_mcp.app import mcp
|
||||
from opennews_mcp.config import clamp_limit, make_serializable, MAX_ROWS
|
||||
from opennews_mcp.config import clamp_limit, make_serializable, MAX_ROWS, require_token
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
async def get_latest_news(ctx: Context, limit: int = 10) -> dict:
|
||||
"""Get the most recent crypto news articles, newest first.
|
||||
"""Get the most recent market-moving news and signals, newest first.
|
||||
|
||||
Returns news with title text, source, link, related coins, AI rating, and tags.
|
||||
Returns news from 85+ sources across all 6 categories (news, listing, onchain,
|
||||
meme, market, prediction) with title text, source, link, related assets, AI rating, and tags.
|
||||
Coverage includes crypto, U.S. equities, macro, semiconductors, AI infrastructure,
|
||||
supply chains, commodities, rates, policy, and social/news signals.
|
||||
|
||||
Args:
|
||||
limit: Maximum number of articles to return (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
@@ -34,12 +42,19 @@ async def get_latest_news(ctx: Context, limit: int = 10) -> dict:
|
||||
|
||||
@mcp.tool()
|
||||
async def search_news(keyword: str, ctx: Context, limit: int = 10) -> dict:
|
||||
"""Search crypto news by keyword in text content.
|
||||
"""Search real-time financial market news by keyword in text content.
|
||||
|
||||
Searches across all 85+ sources for crypto, U.S. equities, macro, semiconductors,
|
||||
AI infrastructure, supply chains, commodities, rates, policy, and market-moving
|
||||
social/news signals. Sources include Bloomberg, Reuters, FT, CNBC, CoinDesk,
|
||||
Twitter/X, on-chain alerts, exchange listings, market signals, and AI predictions.
|
||||
|
||||
Args:
|
||||
keyword: Search term (e.g. "bitcoin", "SEC", "ETF").
|
||||
keyword: Search term (e.g. "bitcoin", "NVDA", "FOMC", "tariffs", "oil", "AI chips").
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
@@ -55,12 +70,17 @@ async def search_news(keyword: str, ctx: Context, limit: int = 10) -> dict:
|
||||
|
||||
@mcp.tool()
|
||||
async def search_news_by_coin(coin: str, ctx: Context, limit: int = 10) -> dict:
|
||||
"""Search news related to a specific cryptocurrency coin/token.
|
||||
"""Search news and market signals related to a specific digital asset coin/token.
|
||||
|
||||
Finds all mentions across 85+ sources: media coverage, exchange listings,
|
||||
whale trades, meme sentiment, market anomalies, and AI predictions for the given coin.
|
||||
|
||||
Args:
|
||||
coin: Coin symbol or name (e.g. "BTC", "ETH", "SOL", "TRUMP").
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
@@ -76,15 +96,27 @@ async def search_news_by_coin(coin: str, ctx: Context, limit: int = 10) -> dict:
|
||||
|
||||
@mcp.tool()
|
||||
async def get_news_by_source(engine_type: str, news_type: str, ctx: Context, limit: int = 10) -> dict:
|
||||
"""Get news articles from a specific source.
|
||||
"""Get market news or signal items from a specific source/category.
|
||||
|
||||
Use get_news_sources first to see available engine types and news type codes.
|
||||
|
||||
Args:
|
||||
engine_type: The engine type (e.g. "news", "listing", "onchain", "meme", "market").
|
||||
engine_type: The engine type (e.g. "news", "listing", "onchain", "meme", "market", "prediction").
|
||||
news_type: The news source code (e.g. "Bloomberg", "Reuters", "Coindesk").
|
||||
For listing: "Binance", "Coinbase", "OKX", "Bybit", "Upbit", "Bithumb",
|
||||
"Robinhood", "Hyperliquid", "Aster".
|
||||
For onchain: "Hyperliquid Whale Trade", "Hyperliquid Large Position".
|
||||
For meme: "Twitter".
|
||||
For market: "Price Change", "Funding Rate", "Funding Rate Difference",
|
||||
"Large Liquidation", "Market Trends", "OI Change".
|
||||
For prediction: "CORRELATION_LOGICAL", "SMART_MONEY_TRADE", "PRICE_SPIKE",
|
||||
"CLUSTER_ENTRY", "WHALE_POSITION", "NEW_WALLET_TRADE", "INSIDER_PATTERN",
|
||||
"CORRELATION_NARRATIVE", "CORRELATION_HEDGE", "CORRELATION_ENTITY_GEO",
|
||||
"CORRELATION_CAUSAL", "SETTLEMENT_ARBITRAGE".
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
@@ -100,14 +132,24 @@ async def get_news_by_source(engine_type: str, news_type: str, ctx: Context, lim
|
||||
|
||||
@mcp.tool()
|
||||
async def get_news_by_engine(engine_type: str, ctx: Context, limit: int = 10) -> dict:
|
||||
"""Get news articles filtered by engine type.
|
||||
"""Get market news or signal items filtered by engine type.
|
||||
|
||||
Engine types: "news", "listing", "onchain", "meme", "market".
|
||||
Engine types: "news", "listing", "onchain", "meme", "market", "prediction".
|
||||
- "news": 55 sources — Bloomberg, Reuters, FT, CNBC, CNN, BBC, CoinDesk, Twitter/X, etc.,
|
||||
covering crypto, U.S. equities, macro, semiconductors, AI infrastructure,
|
||||
supply chains, commodities, rates, policy, and social/news signals.
|
||||
- "listing": 9 exchanges — Binance, Coinbase, OKX, Bybit, Upbit, Bithumb, Robinhood, etc.
|
||||
- "onchain": Hyperliquid whale trades and large position activity.
|
||||
- "meme": Meme coin social sentiment from Twitter.
|
||||
- "market": Price changes, funding rates, liquidations, OI changes, market trends.
|
||||
- "prediction": 12 AI prediction signals — smart money, whale positions, correlations, etc.
|
||||
|
||||
Args:
|
||||
engine_type: The engine type code.
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
@@ -128,17 +170,26 @@ async def search_news_advanced(
|
||||
keyword: str = "",
|
||||
engine_types: str = "",
|
||||
has_coin: bool = False,
|
||||
min_score: int = 0,
|
||||
limit: int = 10,
|
||||
) -> dict:
|
||||
"""Advanced news search with multiple filters.
|
||||
"""Advanced financial market news search with multiple filters.
|
||||
|
||||
Combines keyword, digital asset coin, engine type, source, and score filters for precise
|
||||
queries across the full 85+ source catalog. Use it for crypto, U.S. equities, macro,
|
||||
semiconductors, AI infrastructure, supply chains, commodities, rates, policy, and
|
||||
market-moving social/news signals.
|
||||
|
||||
Args:
|
||||
coins: Comma-separated coin symbols (e.g. "BTC,ETH").
|
||||
keyword: Optional search keyword.
|
||||
engine_types: Engine type filter in format "type1:cat1,cat2;type2:cat3" (e.g. "news:Bloomberg,Reuters;listing:").
|
||||
has_coin: If true, only return news that have associated coins.
|
||||
keyword: Optional search keyword (e.g. "NVDA", "FOMC", "tariffs", "oil", "AI chips").
|
||||
engine_types: Engine type filter in format "type1:cat1,cat2;type2:cat3" (e.g. "news:Bloomberg,Reuters;listing:;prediction:").
|
||||
has_coin: If true, only return items that have associated digital asset coins.
|
||||
min_score: Minimum AI score threshold (default 0, range 0-100).
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
|
||||
@@ -159,6 +210,7 @@ async def search_news_advanced(
|
||||
result = await api.search_news(
|
||||
coins=coin_list, query=keyword or None,
|
||||
engine_types=engine_types_dict, has_coin=has_coin,
|
||||
score=min_score if min_score > 0 else None,
|
||||
limit=limit, page=1,
|
||||
)
|
||||
data = result.get("data", [])[:limit]
|
||||
@@ -172,29 +224,28 @@ async def search_news_advanced(
|
||||
|
||||
@mcp.tool()
|
||||
async def get_high_score_news(ctx: Context, min_score: int = 70, limit: int = 10) -> dict:
|
||||
"""Get highly-rated news articles (by AI score), sorted by score descending.
|
||||
"""Get highly-rated market news and signals by AI score, sorted by score descending.
|
||||
|
||||
AI scores range 0-100 and reflect potential market impact across crypto,
|
||||
U.S. equities, macro, semiconductors, AI infrastructure, supply chains,
|
||||
commodities, rates, policy, and social/news signals. All items from 85+
|
||||
sources are AI-analyzed with score, grade, signal, and summary.
|
||||
|
||||
Args:
|
||||
min_score: Minimum score threshold (default 70).
|
||||
limit: Maximum results to return (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
fetch_limit = min(limit * 3, MAX_ROWS)
|
||||
result = await api.search_news(limit=fetch_limit, page=1)
|
||||
raw = result.get("data", [])
|
||||
|
||||
filtered = [it for it in raw
|
||||
if (it.get("aiRating") or {}).get("score", 0) >= min_score]
|
||||
filtered.sort(
|
||||
key=lambda x: (x.get("aiRating") or {}).get("score", 0),
|
||||
reverse=True,
|
||||
)
|
||||
data = filtered[:limit]
|
||||
result = await api.search_news(score=min_score, limit=limit, page=1)
|
||||
data = result.get("data", [])
|
||||
data.sort(key=lambda x: x.get("score", 0), reverse=True)
|
||||
return make_serializable({
|
||||
"success": True, "min_score": min_score,
|
||||
"data": data, "count": len(data),
|
||||
"data": data[:limit], "count": len(data[:limit]), "total": result.get("total", 0),
|
||||
})
|
||||
except Exception as e:
|
||||
return {"success": False, "error": str(e) or repr(e)}
|
||||
@@ -202,12 +253,16 @@ async def get_high_score_news(ctx: Context, min_score: int = 70, limit: int = 10
|
||||
|
||||
@mcp.tool()
|
||||
async def get_news_by_signal(signal: str, ctx: Context, limit: int = 10) -> dict:
|
||||
"""Get news filtered by trading signal type.
|
||||
"""Get market news filtered by AI trading signal type.
|
||||
|
||||
Each item from 85+ sources is AI-analyzed for directional market impact.
|
||||
|
||||
Args:
|
||||
signal: The signal type: "long" (bullish), "short" (bearish), or "neutral".
|
||||
limit: Maximum results (default 10, max 100).
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
api = ctx.request_context.lifespan_context.api
|
||||
limit = clamp_limit(limit)
|
||||
try:
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
"""Real-time news tools — WebSocket subscription for live news updates."""
|
||||
"""Real-time market news tools — WebSocket subscription for live updates from 85+ sources."""
|
||||
|
||||
from mcp.server.fastmcp import Context
|
||||
|
||||
from opennews_mcp.app import mcp
|
||||
from opennews_mcp.config import make_serializable
|
||||
from opennews_mcp.config import make_serializable, require_token
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
@@ -15,18 +15,27 @@ async def subscribe_latest_news(
|
||||
engine_types: str = "",
|
||||
has_coin: bool = False,
|
||||
) -> dict:
|
||||
"""Subscribe to real-time news updates via WebSocket.
|
||||
"""Subscribe to real-time financial market news updates via WebSocket.
|
||||
|
||||
Connects to the WebSocket feed, subscribes to news with optional filters,
|
||||
and collects incoming messages for the specified duration.
|
||||
|
||||
Streams live data from 85+ sources across 6 categories:
|
||||
news (Bloomberg, Reuters, FT, CNBC, Twitter/X, etc.), listing (Binance, Coinbase, etc.),
|
||||
onchain (whale trades), meme (Twitter sentiment), market (price/funding/liquidation alerts),
|
||||
prediction (AI prediction signals — smart money, correlations, whale positions, etc.).
|
||||
Coverage includes crypto, U.S. equities, macro, semiconductors, AI infrastructure,
|
||||
supply chains, commodities, rates, policy, and market-moving social/news signals.
|
||||
|
||||
Args:
|
||||
wait_seconds: How long to listen for news (default 10, max 30 seconds).
|
||||
max_items: Maximum news items to collect (default 5, max 20).
|
||||
coins: Comma-separated coin symbols to filter (e.g. "BTC,ETH").
|
||||
coins: Comma-separated digital asset coin symbols to filter (e.g. "BTC,ETH").
|
||||
engine_types: Engine type filter in format "type1:cat1,cat2;type2:cat3".
|
||||
has_coin: If true, only receive news that have associated coins.
|
||||
has_coin: If true, only receive items that have associated digital asset coins.
|
||||
"""
|
||||
if (err := require_token()):
|
||||
return err
|
||||
ws = ctx.request_context.lifespan_context.ws
|
||||
wait_seconds = min(max(1, wait_seconds), 30)
|
||||
max_items = min(max(1, max_items), 20)
|
||||
@@ -44,7 +53,7 @@ async def subscribe_latest_news(
|
||||
engine_types_dict[engine] = cat_list
|
||||
|
||||
try:
|
||||
sub_result = await ws.subscribe_latest(
|
||||
await ws.subscribe_latest(
|
||||
engine_types=engine_types_dict,
|
||||
coins=coin_list,
|
||||
has_coin=has_coin,
|
||||
|
||||
Reference in New Issue
Block a user