The Problem

This repository ships production‑ready AI‑driven trading signals with zero test coverage, no CI/CD gate, and duplicated logic across two tool files. Dependencies are declared without a lockfile, and two direct dependencies are multiple major versions behind the current published release. For a technical team evaluating adoption, the absence of reproducibility guarantees and basic SDLC tooling is the primary concern.

What This Does

OpenNews MCP Server is an MCP (Model Context Protocol) service that aggregates 85+ real‑time data sources across six categories—News, Listing, OnChain, Meme, Market, and Prediction—then applies AI analysis to produce impact scores, trading signals (long/short/neutral), and bilingual (EN/ZH) summaries. The code lives primarily in src/opennews_mcp/: app.py, server.py, __main__.py, and a tools package with news.py, realtime.py, finance.py (804 lines), strategy.py, discovery.py, and free.py. Configuration is read from config.json at the root and the OPENNEWS_TOKEN environment variable. The README lists 85+ sources—Bloomberg, Reuters, CoinDesk, Binance, OKX, and others—organized by engine type.

How It Is Wired

Execution starts at src/opennews_mcp/__main__.py (the uv run opennews-mcp entry point) and src/opennews_mcp/server.py, which instantiates the MCP server. The import graph analysis reports 13 Python modules with zero detected import edges and no circular dependencies, meaning inter‑module wiring is not established via static imports; components are likely composed dynamically or through the MCP framework’s tool registration. The three most connected modules—__init__, __main__, and api_client—each have Ca 0 Ce 0, confirming no module imports another within the analyzed set. The src/opennews_mcp/tools/ modules (news, realtime, finance, etc.) each operate independently; finance.py at 804 lines is the widest‑blast‑radius file, as a change there could affect signal generation broadly without clear isolation.

How To Use It

Setup: Install with uv as documented in the README:

claude mcp add opennews \
  -e OPENNEWS_TOKEN=<your-token> \
  -- uv --directory /path/to/opennews-mcp run opennews-mcp

Alternatively, for OpenClaw: export OPENNEWS_TOKEN="<your-token>" && cp -r openclaw-skill/opennews ~/.openclaw/skills/.

Configuration: The token must be set as OPENNEWS_TOKEN in the environment or in config.json at the project root. The pyproject.toml and openclaw-skill/opennews/package.json declare dependencies mcp, httpx, and websockets; no lockfile is present, so uv lock or pip install will resolve to the latest compatible versions.

Running it: The entry point is src/opennews_mcp/__main__.py invoked via uv run opennews-mcp. No Dockerfile or Makefile exists; the process starts the MCP server, which listens for tool calls and queries the 85+ data sources.

Real-World Use

A quantitative trading team could subscribe to the MCP server’s news and market tools to receive AI‑rated signals. For example, a bot might call the discovery tool to fetch the latest finance articles, then the strategy module to translate impact scores into position sizes. The bilingual summaries allow cross‑language analytics desks to consume the same data without separate translation pipelines.

Code Health & Issues

  • [MEDIUM/clarity] Duplicated code blocks: 5 repeated 6‑line segments appear in src/opennews_mcp/tools/news.py and src/opennews_mcp/tools/realtime.py. Extract shared helpers to DRY the logic.
  • [MEDIUM/cognitive_load] Oversized file: src/opennews_mcp/tools/finance.py contains 804 code lines; holding its responsibility in one head is error‑prone. Split into cohesive units by concern (e.g., price data, on‑chain metrics, sentiment).
  • [Medium/SDLC] No test files detected—untested code paths across the repository.
  • [Medium/SDLC] No CI/CD pipeline—no automated build/test gate in .github/ or equivalent.
  • [Low/Risk] Dependencies declared without a lockfile (openclaw-skill/opennews/package.json, pyproject.toml); builds are non‑reproducible across environments.
  • [Low/Risk] Two declared dependencies are behind the current major version: websockets >=13 (current 17.0.1, 4 majors behind) and mcp >=1.25,<2 (current 2.0.0, 1 major behind).

The Bottom Line

The repo delivers a functional MCP server with broad data coverage and useful AI‑generated signals, but the lack of tests, CI, and a lockfile makes it unsuitable for production pipelines without significant hardening. The duplicated logic and 800‑line finance module are the most immediate technical debt items. Teams comfortable pinning dependencies manually and adding their own test harness can leverage the data sources quickly; others should seek a more automated, reproducible setup.