{"serverId":"mcp-registry/org.sentimentfx/market-sentiment","tools":[{"name":"get_correlation","fixed":{"name":"get_correlation","description":"180-day Pearson correlation between daily sentiment shifts and next-day\n    price returns for `ticker`.\n\n    Returns Pearson `r`, `p_value`, `n_days` overlapping, a 95% confidence\n    interval (Fisher z), and a categorical `strength` (strong / weak /\n    inconclusive).  Costs 1 API credit — same as GET /v1/correlation/{ticker}.\n\n    Requires ≥30 overlapping day-pairs.  Under that, returns a `note` field\n    explaining what's missing so a caller can suggest waiting or switching\n    to a higher-co","inputSchema":{"type":"object","title":"get_correlationArguments","required":["ticker"],"properties":{"ticker":{"type":"string","title":"Ticker"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":195,"tokensAfter":195},{"name":"get_prices","fixed":{"name":"get_prices","description":"Return daily close prices for `ticker` over the last `days`, in the\n    ticker's native currency -- see the `currency` field on the response.\n\n    Costs 1 API credit per day actually returned — same as\n    GET /v1/prices/{ticker}.  Prices come\n    back reverse-chronological.  Crypto is GBP (yfinance BTC-GBP etc.), FX\n    pairs are a raw exchange rate in the pair's native convention (e.g.\n    USDJPY is yen per dollar), and everything else (stocks/ETFs/commodity\n    futures) is native USD -- there","inputSchema":{"type":"object","title":"get_pricesArguments","required":["ticker"],"properties":{"days":{"type":"integer","title":"Days","default":30},"ticker":{"type":"string","title":"Ticker"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":207,"tokensAfter":207},{"name":"get_sentiment","fixed":{"name":"get_sentiment","description":"Return the most recent FinBERT-scored news headlines for `ticker`.\n\n    Each headline has a `sentiment_score` in [-1, +1] (positive_prob -\n    negative_prob), a categorical `sentiment_label`, and a `source_kind`\n    (news / reddit / stocktwits / x / youtube).  Costs 1 API credit per 25\n    headlines actually returned — same billing as GET /v1/sentiment/{ticker}.\n    An empty result costs nothing.\n\n    `limit` is capped at 100.  Social posts are kept separate from news:\n    the default `sources=\"","inputSchema":{"type":"object","title":"get_sentimentArguments","required":["ticker"],"properties":{"limit":{"type":"integer","title":"Limit","default":25},"ticker":{"type":"string","title":"Ticker"},"sources":{"enum":["news","social","all"],"type":"string","title":"Sources","default":"news"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":236,"tokensAfter":236},{"name":"get_summary","fixed":{"name":"get_summary","description":"Return daily aggregated news sentiment for `ticker` over the last `days`.\n\n    Each entry has `avg_sentiment` (unweighted mean of that day's scores),\n    `article_count`, and a directional `label` (positive / negative /\n    neutral, thresholded at ±0.1).  `sources=\"social\"` returns a separate\n    daily average of Reddit, StockTwits and X posts; news and social are\n    never averaged together.  Costs 1 API credit per day actually returned —\n    same as GET /v1/summary/{ticker}.  A window with no ","inputSchema":{"type":"object","title":"get_summaryArguments","required":["ticker"],"properties":{"days":{"type":"integer","title":"Days","default":30},"ticker":{"type":"string","title":"Ticker"},"sources":{"enum":["news","social"],"type":"string","title":"Sources","default":"news"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"get_usage","fixed":{"name":"get_usage","description":"Introspect your API key: included allowance, remaining credits, and\n    when they refill.\n\n    Free keys get 1,000 calls per 30-day window starting at their first\n    billable call (`resets_at` is null when no window is running); paid plans\n    refill on the 1st of each month.  Free — doesn't hit the billing meter.\n    Useful before a large batch of `get_sentiment`/`get_summary` calls to check\n    you have credit headroom.\n    ","inputSchema":{"type":"object","title":"get_usageArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"list_tickers","fixed":{"name":"list_tickers","description":"List every asset SentimentFX tracks.\n\n    Cheap (free — doesn't hit the billing meter).  Returns two groups:\n    `primary` (5 crypto + 7 FX pairs — the ones with full sentiment coverage\n    across the primary RSS feeds), and `background` (US equities, ETFs,\n    commodity futures — coverage is thinner but real).  Use the exact ticker\n    string from either group as the `ticker` arg to the other tools.\n    ","inputSchema":{"type":"object","title":"list_tickersArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":149,"tokensAfter":149}],"toolsChanged":6,"tokensSaved":0,"todo":[{"tool":"get_correlation","params":["ticker"]},{"tool":"get_prices","params":["days","ticker"]},{"tool":"get_sentiment","params":["limit","ticker","sources"]},{"tool":"get_summary","params":["days","ticker","sources"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}