Skip to main content
Glama
swl007007

sellthenews-mcp

by swl007007

sellthenews-mcp

A read-only MCP (Model Context Protocol) server that wraps 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.

Related MCP server: OpenInsider MCP

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

npm install
npm run build

Run Locally

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:

{
  "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.

Available Tools

5 tools
get_options_chainC

Get full options chain data for a ticker, including GEX, OI, and volume by strike

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. 'MU', 'AAPL', 'TSLA'
expirationNoExpiration date filter, e.g. '2026-04-17'
greeksNoGreek to analyze, e.g. 'gamma'

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions data retrieval but fails to disclose behavioral traits such as rate limits, authentication needs, data freshness, or response format. For a data-fetching tool with no annotations, this leaves significant gaps in understanding its operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and key data elements. Every word earns its place with no redundancy or unnecessary details, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a data retrieval tool with three parameters, the description is incomplete. It lacks information on return values, error handling, or operational constraints, leaving the agent with insufficient context to use the tool effectively beyond basic parameter input.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters (ticker, expiration, greeks). The description adds minimal value beyond the schema by implying the data includes GEX, OI, and volume by strike, but doesn't elaborate on parameter interactions or defaults. Baseline 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get full options chain data') and resource ('for a ticker'), with specific data elements mentioned (GEX, OI, volume by strike). It distinguishes from sibling tools like 'get_options_summary' by emphasizing 'full' data, though not explicitly contrasting them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'get_options_summary' or other siblings. The description implies it's for comprehensive options data but lacks explicit context, prerequisites, or exclusions for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_options_summaryB

Get a concise options exposure summary for a ticker (no per-strike breakdown)

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. 'MU', 'AAPL', 'TSLA'

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the output is 'concise' and excludes 'per-strike breakdown', which adds some behavioral context. However, it doesn't disclose other important traits like whether this is a read-only operation, potential rate limits, authentication needs, or what format the summary returns. For a tool with no annotations, this leaves significant gaps in behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Get a concise options exposure summary for a ticker') and adds a clarifying constraint ('no per-strike breakdown'). There is zero wasted verbiage, and every word earns its place, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 1 parameter with full schema coverage and no output schema, the description provides adequate context for a simple lookup tool. It clarifies the scope ('concise summary', 'no per-strike breakdown'), which helps set expectations. However, with no annotations and no output schema, it could benefit from more details on behavioral aspects or return format to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with the single parameter 'ticker' well-documented in the schema as 'Stock ticker symbol, e.g. 'MU', 'AAPL', 'TSLA''. The description doesn't add any additional parameter semantics beyond what's in the schema. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get a concise options exposure summary for a ticker'. It specifies the verb ('Get'), resource ('options exposure summary'), and scope ('for a ticker'). However, it doesn't explicitly differentiate from its sibling 'get_options_chain' beyond mentioning 'no per-strike breakdown', which is helpful but not a full distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool by stating 'no per-strike breakdown', suggesting it's for a high-level summary rather than detailed strike data. However, it doesn't explicitly name alternatives like 'get_options_chain' or provide clear when-not-to-use guidance. The context is somewhat clear but lacks explicit sibling comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recent_newsB

Fetch the latest news stories from sellthenews.org, including editorially pinned stories

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of stories to return (default: 15)
offsetNoNumber of stories to skip for pagination
langNoLanguage code, e.g. 'en' or 'zh'
sourcesNoSource filter as a comma-separated string or string array
marketOnlyNoSet to true to show only market-related news

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions fetching 'latest news stories' and 'editorially pinned stories', but doesn't cover important aspects like rate limits, authentication needs, pagination behavior beyond the offset parameter, response format, or error handling. For a read operation with 5 parameters, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core purpose without unnecessary words. It's appropriately sized for a tool with good schema documentation and gets straight to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 5 documented parameters but no output schema and no annotations, the description is minimally adequate. It states what the tool does but lacks important context about response format, error conditions, and behavioral constraints that would help an agent use it effectively. The 100% schema coverage helps, but the overall context remains incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema descriptions. The baseline of 3 is appropriate when the schema does the heavy lifting, though the description could have provided context about how parameters interact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('fetch') and resource ('latest news stories from sellthenews.org'), and specifies inclusion of 'editorially pinned stories' which adds useful detail. However, it doesn't explicitly differentiate from sibling tool 'search_news' beyond the 'latest' vs 'search' distinction, which is somewhat implied but not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'search_news'. It doesn't mention prerequisites, constraints, or comparative use cases, leaving the agent to infer usage from the tool name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_wsb_snapshotB

Get the latest Wall Street Bets daily analysis snapshot

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoLanguage code, e.g. 'en' or 'zh'

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves the 'latest' snapshot, implying it's a read-only operation, but doesn't specify if it requires authentication, has rate limits, returns structured data, or details the freshness of 'latest'. This leaves significant behavioral gaps for a tool that likely interacts with external data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy to parse quickly, which is ideal for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (retrieving external data), lack of annotations, and no output schema, the description is minimally adequate. It clarifies the resource but misses behavioral details like response format or constraints. With 100% schema coverage for one parameter, it's not incomplete, but could be more informative for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no parameter-specific information beyond the input schema, which has 100% coverage for the single parameter 'lang'. Since there's only one parameter and the schema fully describes it, the baseline is high. The description doesn't compensate or add value, but with minimal parameters and full schema coverage, this is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('Wall Street Bets daily analysis snapshot'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'get_recent_news' or 'search_news' that might also provide Wall Street Bets content, leaving some ambiguity about uniqueness.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, exclusions, or comparisons to sibling tools like 'get_recent_news' or 'search_news', which could also retrieve related content, leaving the agent without contextual usage cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_newsC

Search news articles by keyword across multiple sources

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesKeyword to search for in news articles
limitNoMax number of results (default: 15)
offsetNoNumber of results to skip for pagination
langNoLanguage code, e.g. 'en' or 'zh'
sourcesNoSource filter as a comma-separated string or string array
sortNoSort order, e.g. 'time'

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'search' but doesn't describe what the search returns (e.g., article metadata, full text, snippets), whether there are rate limits, authentication requirements, or how results are structured. For a search tool with 6 parameters and no annotations, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that communicates the core functionality without waste. It's appropriately sized for a search tool and front-loads the essential information. Every word earns its place in conveying the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, search functionality) and lack of both annotations and output schema, the description is insufficiently complete. It doesn't explain what the search returns, how results are formatted, or any behavioral constraints. For a search tool with multiple filtering options and no structured output documentation, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds no parameter-specific information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description, which applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search news articles by keyword across multiple sources' - a specific verb ('search') and resource ('news articles') with scope ('across multiple sources'). It distinguishes from sibling tools like 'get_recent_news' by emphasizing keyword search rather than recency. However, it doesn't explicitly contrast with all siblings, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_recent_news' or other siblings. It doesn't mention prerequisites, constraints, or comparative contexts. The agent must infer usage solely from the tool name and description without explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv0.1.0
    • First observedget_options_chain
    • First observedget_options_summary
    • First observedget_recent_news
    • First observedget_wsb_snapshot
    • First observedsearch_news

TDQS

B3.4/5.0
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 issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A read-only MCP server that provides access to Charles Schwab account data and market information, including portfolio positions, real-time quotes, options chains, price history, and account balances through AI assistants.
    9
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that exposes 16 free investment-research signals (insider trades, SEC filings, short data, and live quotes) to any MCP-compatible LLM.
    36
    98
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Comprehensive MCP server for real-time stock, cryptocurrency, options, and fundamental analysis, including SEC filings and insider trading data.
    26
    33
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that provides access to SiftingIO market data, including live prices, SEC filings, OHLCV bars, 13F holdings, market status, and economic calendar tools for AI assistants.
    36
    43
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/swl007007/sellthenews_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server