SentimentFX

FinBERT news sentiment and price history for 42 crypto, FX, stock, ETF and commodity tickers.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
63%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,095Tokens (tool definitions)
~639 BTypical response size
Moderate attention impact (0.86% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "market-sentiment": {
      "url": "https://api.sentimentfx.org/mcp"
    }
  }
}

Remote endpoints

https://api.sentimentfx.org/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_tickers

List every asset SentimentFX tracks. Cheap (free — doesn't hit the billing meter). Returns two groups: `primary` (5 crypto + 7 FX pairs — the ones with full sentiment coverage across the primary RSS feeds), and `background` (US equities, ETFs, commodity futures — coverage is thinner but real). Use the exact ticker string from either group as the `ticker` arg to the other tools.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "list_tickersArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "list_tickersDictOutput"
}
🟡get_usage

Introspect your API key: calls used this month, included allowance, remaining credits, and when the counter resets. Free — doesn't hit the billing meter. Mirrors `GET /v1/usage` (MCP_MIRRORS_V1: change both together). Useful before a large batch of `get_sentiment`/`get_summary` calls to check you have credit headroom.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "get_usageArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_usageDictOutput"
}
🟢get_sentiment(ticker, limit)

Return the most recent FinBERT-scored headlines for `ticker`. Each headline has a `sentiment_score` in [-1, +1] (positive_prob - negative_prob) and a categorical `sentiment_label`. Costs 1 API credit per 25 headlines actually returned — same billing as GET /v1/sentiment/{ticker}. An empty result costs nothing. `limit` is capped at 100. Titles come back reverse-chronological so the first item is the freshest.

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "title": "Ticker",
      "type": "string"
    },
    "limit": {
      "default": 25,
      "title": "Limit",
      "type": "integer"
    }
  },
  "required": [
    "ticker"
  ],
  "title": "get_sentimentArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_sentimentDictOutput"
}
🟢get_summary(ticker, days)

Return daily aggregated sentiment for `ticker` over the last `days`. Each entry has `avg_sentiment` (unweighted mean of that day's scores), `article_count`, and a directional `label` (positive / negative / neutral, thresholded at ±0.1). Costs 1 API credit per day actually returned — same as GET /v1/summary/{ticker}. A window with no coverage costs nothing.

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "title": "Ticker",
      "type": "string"
    },
    "days": {
      "default": 30,
      "title": "Days",
      "type": "integer"
    }
  },
  "required": [
    "ticker"
  ],
  "title": "get_summaryArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_summaryDictOutput"
}
🟢get_prices(ticker, days)

Return daily close prices for `ticker` over the last `days`, in the ticker's native currency -- see the `currency` field on the response. Costs 1 API credit per day actually returned — same as GET /v1/prices/{ticker}. Prices come back reverse-chronological. Crypto is GBP (yfinance BTC-GBP etc.), FX pairs are a raw exchange rate in the pair's native convention (e.g. USDJPY is yen per dollar), and everything else (stocks/ETFs/commodity futures) is native USD -- there is no currency conversion.

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "title": "Ticker",
      "type": "string"
    },
    "days": {
      "default": 30,
      "title": "Days",
      "type": "integer"
    }
  },
  "required": [
    "ticker"
  ],
  "title": "get_pricesArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_pricesDictOutput"
}
🟢get_correlation(ticker)

180-day Pearson correlation between daily sentiment shifts and next-day price returns for `ticker`. Returns Pearson `r`, `p_value`, `n_days` overlapping, a 95% confidence interval (Fisher z), and a categorical `strength` (strong / weak / inconclusive). Costs 1 API credit — same as GET /v1/correlation/{ticker}. Requires ≥30 overlapping day-pairs. Under that, returns a `note` field explaining what's missing so a caller can suggest waiting or switching to a higher-coverage ticker.

Input Schema

{
  "type": "object",
  "properties": {
    "ticker": {
      "title": "Ticker",
      "type": "string"
    }
  },
  "required": [
    "ticker"
  ],
  "title": "get_correlationArguments"
}

Output Schema

{
  "type": "object",
  "additionalProperties": true,
  "title": "get_correlationDictOutput"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools