Compare commits

20 Commits

Author SHA1 Message Date
bathfire 1762f473aa Update news source catalog 2026-07-05 16:54:39 +08:00
tkk f5a2c37e4d Add finance enhancement MCP tools 2026-07-03 11:10:21 +08:00
beare 9c6b508c23 docs: update discovery and news tools to reflect financial market focus
- Revised descriptions in discovery.py, free.py, news.py, and realtime.py to emphasize financial market news sources and categories.
- Enhanced docstrings to clarify the scope of news coverage, including crypto, U.S. equities, macro, and other relevant signals.
- Updated function descriptions to align with the new focus on market news and signals.
2026-06-15 16:22:17 +08:00
beare 111e64faad docs: update SKILL.md to reflect expanded news coverage and version increment
- Revised the description to include a broader range of financial topics, including equities and macroeconomic news.
- Updated the version number from 1.0.4 to 1.0.5.
- Changed the title to emphasize the financial market focus.
- Enhanced the news category description to highlight additional relevant sources and signals.
2026-06-15 16:15:33 +08:00
tkk fc26207040 Merge branch 'main' of github.com:6551Team/opennews-mcp 2026-05-29 15:07:55 +08:00
tkk 6cbbd7412f feat(api): Add documentation for policy-triggered server push functionality
The API documentation for strategy triggering (server push - strategy triggered) has been added,
Including JSON-RPC response format, parameter descriptions, field definitions, and usage examples.
2026-05-29 15:03:05 +08:00
bathfire 188140679b docs: remove Tree/dbnews/Phoenixnews sources and change market_type to cex
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 23:20:21 +08:00
tkk f20d81ce4e docs: update coins field structure in news.ai_update
- Add individual AI ratings (score/signal/grade) for each coin in coins array
- Remove deprecated fields (status/summary/enSummary) from aiRating
- Clarify that top-level aiRating.score represents the highest score among all coins
- Update documentation across all languages (EN/ZH/JA/KO)
2026-05-06 16:08:06 +08:00
beare 4e8266b305 refactor: simplify sorting logic in get_high_score_news function
- Updated the sorting mechanism in the get_high_score_news function to directly use the 'score' key, enhancing code readability and performance.
2026-05-05 01:50:38 +08:00
beare f56b2354be chore: update version number to 1.0.4 and add score parameter to SKILL.md
- Incremented version number in SKILL.md from 1.0.3 to 1.0.4.
- Added a new `score` parameter to the news search documentation, allowing users to filter results based on minimum AI score.
2026-05-01 22:07:33 +08:00
beare 3233e3fea4 feat: add score parameter to news search functions
- Introduced a new optional `score` parameter in the `search_news` method of `NewsAPIClient` to filter results based on AI score.
- Updated `search_news_advanced` function to include a `min_score` parameter for advanced filtering.
- Modified `get_high_score_news` to utilize the new score filtering, improving the ability to retrieve high-scoring news articles.
2026-05-01 22:05:53 +08:00
tkk e4f40e1edd feat: add prediction engine category (12 AI prediction sources)
- Add prediction as 6th engine category across all source code and docs
- Update data source count from 72+ to 84+ (53 news + 9 listing + 3 onchain + 1 meme + 6 market + 12 prediction)
- Update engine category count from 5 to 6
- Add prediction 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
- Update all tool docstrings, FastMCP instructions, and engine type lists
- Update README.md, README_ZH.md, README_JA.md, README_KO.md
- Update knowledge/guide.md and SKILL.md
2026-04-10 10:36:01 +08:00
tkk f45afe3270 feat(docs): expand data sources section with detailed source tables and add knowledge guide link
Add collapsible detailed source tables for all 5 engine categories in README and all language variants (ZH/JA/KO). Add link to knowledge/guide.md after Available Tools section. Remove AI_Helper from source listings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 19:01:30 +08:00
tkk c38b7b1c8c feat(docs): add jin10 news source to guide
Add jin10 (金十数据快讯) to the news sources list in the knowledge guide.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:06:38 +08:00
beare cf722fcb25 chore(docs): update version number to 1.0.3 and restructure free tools documentation
- Incremented version number in SKILL.md from 1.0.2 to 1.0.3.
- Restructured the documentation for free tools, consolidating information and providing clearer examples for accessing free news categories and hot news by category.
- Added a new section for free API endpoints, detailing usage and response structures.
2026-03-30 12:44:05 +08:00
beare f38eb1fd85 feat(docs): enhance SKILL.md and add free tools documentation
- Updated SKILL.md to include a new description emphasizing free tools available without a token.
- Added detailed documentation for two free tools: Get News Categories and Get Hot News, including usage examples and response structures.
- Introduced a new FreeNewsAPIClient class to handle requests for free API endpoints.
- Updated app context to manage both free and premium API clients.
- Implemented token requirement checks for premium tools and ensured free tools are accessible without authentication.
2026-03-30 11:59:56 +08:00
beare ce08698e11 chore(docs): update version number in SKILL.md to 1.0.1 2026-03-11 19:52:28 +08:00
beare 836a3341da feat(docs): add .gitignore and enhance README with data source details
- Introduced a .gitignore file to exclude environment variables, logs, and temporary files.
- Updated README.md to reflect the new description and added a detailed table of 72+ data sources across 5 categories.
- Enhanced documentation in multiple languages (Japanese, Korean, Chinese) to include the new data source information.
2026-03-11 19:44:20 +08:00
axssbug d608baad52 Merge pull request #4 from 6551Team/br-v2
docs(news): 更新币种过滤参数文档
2026-03-10 23:57:03 +08:00
axssbug 28e2968612 Merge pull request #3 from 6551Team/br-v2
docs(readme): 添加 WebSocket 实时订阅功能文档
2026-03-10 23:50:57 +08:00
17 changed files with 2179 additions and 195 deletions
+40
View File
@@ -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/
+267 -22
View File
@@ -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
View File
@@ -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 | a16zAndreessen 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
View File
@@ -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
View File
@@ -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 | a16zAndreessen 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
View File
@@ -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
+175 -13
View File
@@ -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
+10 -2
View File
@@ -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"
]
}
+224
View File
@@ -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
View File
@@ -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,
)
+18 -6
View File
@@ -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))
+2
View File
@@ -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
+36 -6
View File
@@ -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:
+239
View File
@@ -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)}
+58
View File
@@ -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)}
+85 -30
View File
@@ -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:
+15 -6
View File
@@ -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,