Skip to main content
Glama
sellthenews-mcp

sellthenews-mcp

by swl007007
README.md
# sellthenews-mcp

A read-only MCP (Model Context Protocol) server that wraps [sellthenews.org](https://sellthenews.org) API endpoints, making financial news and options data available as tools for LLMs like Claude.

## Architecture

```
sellthenews.org API  →  Adapters  →  Services  →  MCP Tools & Resources
```

**Four layers, each with one job:**

| Layer | What it does | Files |
|-------|-------------|-------|
| **Domain** | Defines TypeScript types for all data shapes | `src/domain/*.types.ts` |
| **Adapters** | Fetch raw JSON from upstream APIs (no processing) | `src/adapters/*.adapters.ts` |
| **Services** | Normalize raw data into clean domain objects | `src/services/*.service.ts` |
| **MCP** | Expose tools and resources to LLM clients | `src/mcp/*.tools.ts` |

Data flows left to right: the MCP layer calls services, services call adapters, adapters call the HTTP client.

## Upstream APIs

| Endpoint | Description |
|----------|-------------|
| `GET /api/live/recent` | Latest news feed with pinned stories |
| `GET /api/wsb/latest` | Wall Street Bets daily analysis snapshot |
| `GET /api/search` | Keyword-based news search |
| `GET /api/options/chain` | Options chain, GEX, and greek exposure |

## MCP Tools

| Tool | Description | Key inputs |
|------|-------------|------------|
| `get_recent_news` | Latest news stories | `limit`, `offset`, `lang`, `sources`, `marketOnly` |
| `get_wsb_snapshot` | WSB daily analysis | `lang` |
| `search_news` | Search news by keyword | `query`, `limit`, `offset`, `lang`, `sources`, `sort` |
| `get_options_chain` | Full options chain for a ticker | `ticker`, `expiration`, `greeks` |
| `get_options_summary` | Concise options exposure summary | `ticker` |

## MCP Resources

| URI | Description |
|-----|-------------|
| `sellthenews://news/recent` | Latest news feed (ambient context) |
| `sellthenews://wsb/latest` | Latest WSB snapshot (ambient context) |

## Setup

```bash
npm install
npm run build
```

## Run Locally

```bash
npm start
```

The server runs over stdio, so it is meant to be launched by an MCP client such as Claude Desktop or an MCP inspector rather than opened in a browser.

For private single-user compatibility testing, the HTTP client can also read `SELLTHENEWS_USER_AGENT`, `SELLTHENEWS_COOKIE`, `SELLTHENEWS_ACCEPT_LANGUAGE`, and `SELLTHENEWS_REFERER` from the environment and forward them as request headers when present.

## Usage with Claude Desktop

Add this to your Claude Desktop MCP config file. On macOS it's at `~/Library/Application Support/Claude/claude_desktop_config.json`, on Windows it's at `%APPDATA%\Claude\claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "sellthenews": {
      "command": "node",
      "args": ["/REPLACE/WITH/YOUR/ACTUAL/PATH/sellthenews_MCP/dist/index.js"]
    }
  }
}
```

> **Important:** Replace the path above with the actual absolute path to `dist/index.js` on your machine. For example, on Windows it might be `C:\\Users\\yourname\\Desktop\\sellthenews_MCP\\dist\\index.js`.

## Project Structure

```
src/
  domain/
    shared.types.ts       # Common types (SourceInfo, TickerMention, etc.)
    news.types.ts         # News domain: raw API types + clean domain types
    options.types.ts      # Options domain: raw API types + clean domain types
  infra/
    http-client.ts        # HTTP client wrapping fetch()
  adapters/
    news.adapters.ts      # 3 news adapters (live/recent, wsb, search)
    options.adapters.ts   # 1 options adapter (options/chain)
  services/
    news.service.ts       # News normalization logic
    options.service.ts    # Options normalization logic
  mcp/
    news.tools.ts         # News MCP tools + resources + Zod schemas
    options.tools.ts      # Options MCP tools + Zod schemas
  index.ts                # Entry point: wires layers, starts server
```

## Current Status

Stage 2A is complete. The repository now performs real upstream GET requests, normalizes raw responses into domain objects, and exposes live MCP tools/resources that return consistent JSON text.

**Implemented now:**
1. `HttpClient.get()` with URL building, timeout handling, JSON parsing, and clearer error messages
2. Real adapters for all four identified sellthenews endpoints
3. Service-layer normalization for news feeds, WSB snapshots, options chains, and options summaries
4. Live MCP tool and resource handlers wired to the service layer
5. Optional env-driven compatibility headers for private single-user testing when plain server-side requests hit upstream protection

**Still pending:**
1. Automated tests for adapters, services, and MCP smoke coverage
2. Better operational hardening if upstream failures or Cloudflare issues show up in practice
3. Stage 3 concerns such as caching, rate limiting, and production logging

## Quick Smoke Check

1. Run `npm run build`
2. Run `npm start`
3. Connect the server from Claude Desktop or an MCP inspector
4. Call `get_recent_news` with `{ "limit": 2 }` or `get_options_summary` with `{ "ticker": "MU" }`

If upstream access works, the response should be pretty-printed JSON instead of placeholder text.

If upstream blocks plain server-side requests, retry your local run with `SELLTHENEWS_USER_AGENT`, `SELLTHENEWS_COOKIE`, `SELLTHENEWS_ACCEPT_LANGUAGE`, and `SELLTHENEWS_REFERER` set in the environment as needed.

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation4/5

Most tools have distinct purposes: options chain vs. summary, recent news vs. search, and WSB snapshot. However, 'get_recent_news' and 'search_news' could overlap if an agent wants recent news on a specific topic, as both handle news retrieval but with different approaches (time-based vs. keyword-based).

Naming Consistency5/5

All tools follow a consistent 'verb_noun' pattern with 'get_' or 'search_' prefixes, using snake_case uniformly. This predictable naming makes it easy for agents to understand and select tools without confusion.

Tool Count5/5

With 5 tools, this server is well-scoped for its financial/news domain. Each tool serves a clear, non-redundant function, covering options data, news retrieval, and WSB analysis, which is appropriate for a focused set of operations.

Completeness4/5

The toolset covers key areas like options analysis and news retrieval effectively, with no obvious dead ends. A minor gap is the lack of historical data tools (e.g., for options or news trends), but agents can still perform core tasks with the provided tools.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues