# StoQuant — Quantitative Stock Research (npm · stoquant-mcp)

StoQuant: 61 tools — Q-Score, ML, screeners, alt-data, portfolio, backtest, strategy.

- Trust score: 73/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `stoquant-mcp`: 73/100 (this document), [markdown](https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp.md), [page](https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp)

## Channel facts

- Registry: `npm`
- Package: `stoquant-mcp`
- Version: `0.6.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 81/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available.
  - No install/post-install scripts declared.
  - 30 of 93 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 64 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 7692 tokens (~120/item across 64 items; 61 tools + 3 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 60/100
  - Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 88/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 63% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 61 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 63 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the StoQuant — Quantitative Stock Research MCP server?

StoQuant — Quantitative Stock Research runs locally as an npm package, launched with npx -y stoquant-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add ohadf2015-stoquant-mcp -- npx -y stoquant-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "ohadf2015-stoquant-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "stoquant-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ohadf2015-stoquant-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "stoquant-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add ohadf2015-stoquant-mcp -- npx -y stoquant-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ohadf2015-stoquant-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "stoquant-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ohadf2015-stoquant-mcp --command npx --arg -y --arg stoquant-mcp
```

### Hermes

```yaml
mcp_servers:
  ohadf2015-stoquant-mcp:
    command: "npx"
    args: ["-y", "stoquant-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "ohadf2015-stoquant-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "stoquant-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add ohadf2015-stoquant-mcp -t stdio -c npx -a -y stoquant-mcp
```

### Other

```json
{
  "mcpServers": {
    "ohadf2015-stoquant-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "stoquant-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 72, 0)

- [functional regression] Security disclosure: unverified → fail

### 2026-11-01 (score 72, +1)

- [functional regression] Security disclosure: fail → unverified

### 2026-10-30 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 68, −4)

- [security regression] CVE-2023-54404 affects this package: high
- [security regression] Known CVEs: pass → fail

### 2026-10-22 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (61)

### `stoquant_get_quote` (~98 tokens)

Get stock quote

Real-time quote for ONE ticker: last price, day change (absolute and percent), bid/ask, day high/low, and volume. Use for a single symbol; for 2+ symbols use stoquant_get_quotes_batch (one call, far fewer requests). Prices are delayed per the data vendor, not tick-by-tick.

Input parameters:

- `ticker` (string, required): Stock ticker symbol, e.g. AAPL or BRK.B

### `stoquant_get_quotes_batch` (~75 tokens)

Get quotes (batch)

Current quotes for up to 50 tickers in a single call. Preferred over calling stoquant_get_quote in a loop — same data, one request, stays well under rate limits. Returns one quote object per ticker (price, change, volume).

Input parameters:

- `tickers` (array, required): Up to 50 ticker symbols

### `stoquant_get_extended_quote` (~100 tokens)

Get quote with technicals

Quote plus computed technical indicators for one ticker: RSI(14), MACD, Bollinger Bands, and moving-average context. Use when you need momentum/overbought-oversold context, not just price. Heavier than stoquant_get_quote; can occasionally time out on cold cache — retry once if so.

Input parameters:

- `ticker` (string, required)
- `timezone` (string): IANA timezone, e.g. America/New_York

### `stoquant_get_sparklines` (~89 tokens)

Get price history (sparklines)

Historical price series (~90 days) for up to 50 tickers, for charting or trend/return computation. interval controls granularity (1d daily, 1wk weekly, 1mo monthly). Returns an array of close prices per ticker, not full OHLCV.

Input parameters:

- `interval` (string): Bar granularity
- `tickers` (array, required)

### `stoquant_get_benchmarks` (~86 tokens)

Get index benchmarks

Current performance of major index ETFs (SPY, QQQ, IWM, and peers): 1-day and year-to-date return. Use to frame an individual stock against the market. Early in the trading day the response may be `{error:'Benchmarks not yet computed'}` until the daily compute runs — treat that as 'not ready', not a failure.

### `stoquant_get_sector_performers` (~117 tokens)

Get sector leaders/laggards

Top and bottom performing stocks within a GICS sector, by recent return. Use to find what is leading or lagging inside a sector. sector must be a full GICS name (see stoquant_get_macro_dashboard sectorRotation for valid names), e.g. 'Technology', 'Health Care', 'Financials'.

Input parameters:

- `limit` (integer): Max performers per side (default 10, max 50)
- `sector` (string, required): GICS sector name, e.g. 'Technology' or 'Health Care'

### `stoquant_get_qscore` (~240 tokens)

Get Q-Score

The Q-Score is StoQuant's headline 0-100 composite for a ticker, blending fundamentals, momentum/technicals, ML, analyst, and 'hidden gem' value dimensions on SECTOR-RESIDUALIZED forward returns (sector beta removed). Returns: score (0-100), signal ('strong_buy'|'buy'|'hold'|'sell'|'strong_sell'|'unrated'), per-dimension `components` (each with rawValue, normalizedScore, weight, and an `available` flag — unavailable dims contribute 0), `confidence`/`confidenceInterval`, `dimensionContributions`, a `verdict` and `plainLanguage` summary, and `riskAlerts`. This is the best single tool for 'is this a good stock right now'. period selects the scoring horizon. Note: early in the US trading day (before ~10am ET), the score may not yet be refreshed with intraday data — a `null` or empty score should be treated as 'not yet computed' rather than an error.

Input parameters:

- `period` (string): Scoring horizon
- `ticker` (string, required)

### `stoquant_get_signals_v2` (~86 tokens)

Get stage-adjusted signals

Returns both the raw Q-Score (`originalQScore`) and a `stage`/regime-adjusted variant (`adjusted`) for a ticker. Use this when you want the score adjusted for the stock's lifecycle stage and current market regime rather than the raw composite. For the full breakdown use stoquant_get_qscore.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_ml_prediction` (~215 tokens)

Get ML outperformance prediction

ML model's probability that the ticker will OUTPERFORM the S&P 500 over the horizon (NOT a buy/hold/sell call). Returns `data.prediction` with: `probability` (0-1, chance of outperformance), `classification` ('bull' = predicted to outperform, 'bear' = underperform), `modelVersion`, `modelAuc`, `plainLanguage` (headline/summary/topDrivers), and `isHeuristic` (true when the trained model is gated for distribution drift and a heuristic fallback is used — weight it less). Use stoquant_explain_ml_prediction for the feature-level 'why'. horizon is in trading days. Note: early in the US trading day (before ~10am ET), the prediction may not yet be refreshed with intraday data — a `null` or empty prediction should be treated as 'not yet computed' rather than an error.

Input parameters:

- `horizon` (string): Forecast horizon in trading days
- `ticker` (string, required)

### `stoquant_explain_ml_prediction` (~101 tokens)

Explain ML prediction

Top feature contributions behind a ticker's ML outperformance prediction — which signals pushed the probability up or down, with signed magnitudes. Use after stoquant_get_ml_prediction when the user asks WHY the model is bullish/bearish. horizon must match the prediction you are explaining.

Input parameters:

- `horizon` (string)
- `ticker` (string, required)
- `top` (integer): Top N features to return (default 10, max 50)

### `stoquant_get_strategic_edges` (~81 tokens)

Get competitive intelligence

Qualitative competitive intelligence for a ticker: economic moats, structural weaknesses, upcoming catalysts, and peer comparison. Best for mid/small-caps; mega-caps and thinly-covered names may return `{data:null}` (no edges computed) — treat that as 'no data', not an error.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_quant_analytics` (~70 tokens)

Get quant analytics

Quantitative analytics for a ticker under `data`: factor exposures, correlation/quality metrics, and risk decomposition. Use for portfolio-construction and factor-tilt questions. Complements stoquant_get_qscore (verdict) with the underlying quant detail.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_evidence` (~201 tokens)

Get named evidence (bull/bear case)

The named, two-sided evidence behind a ticker's Q-Score — the 'bull case vs bear case' as concrete facts rather than scores. Returns five grids (`momentum`, `sentiment`, `earnings`, `valuation`, `risk`), each with `cells`: every cell has a human-readable `label` (e.g. 'Price above 50-day average', 'Short interest'), a formatted `value`, and a `tone` ('bullish'|'bearish'|'neutral'|'unknown'). To assemble a balanced case, collect cells with tone 'bullish' (the bull case) and 'bearish' (the bear case) across all five grids. Use this AFTER stoquant_get_qscore when the user asks WHY the score is what it is, or wants the specific positives and negatives to weigh — it is the evidence layer the research page shows above the dimension breakdown.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_market_regime` (~91 tokens)

Get market regime

Current market-regime classification from the Hidden Markov Model over S&P 500 returns: regime label (e.g. Bull/Range/Bear) and the probability vector across states. Use to set top-down context before stock-level calls. If the model reports it could not fit, probabilities fall back to roughly uniform — read that as 'regime undetermined', not a confident Range call.

### `stoquant_get_signal_accuracy` (~81 tokens)

Get signal hit-rates

Historical track record per signal type: an array of records with `signalType`, `hitRate` (0-1), `totalObservations`, `avgReturnPercent`, `precision`, and `windowDays`. Use to weight how much to trust a given signal before acting on it — prefer signals with high hitRate AND large totalObservations.

### `stoquant_get_accuracy_summary` (~199 tokens)

Get platform accuracy summary

Public, unauthenticated platform scorecard from /public/accuracy/summary (no Pro gate). Key fields: letter `grade`, `hitRate` (do NOT treat hitRate as skill — a high hit-rate on a negatively-skewed book still loses money), `excessSpreadPp` (top-minus-bottom quintile 90-day *alpha*; this is the real edge), `spreadPp` (raw return spread, not alpha), `dataSufficient` (false = sample too small, ignore the grade), `independentWindows` (independent 90-day windows behind the Wilson CI), `sampleSize`, Wilson CI. When `dataSufficient` is true AND `excessSpreadPp` < 0 the live book has an inverted tail — auto-portfolio BUY recommendations are suppressed with gateReason `no_edge`. Call this before any buy-oriented auto-portfolio or optimizer read.

### `stoquant_get_top_conviction` (~81 tokens)

Get top-conviction picks

StoQuant's current highest-conviction names: the stocks with the strongest Q-Scores backed by multiple corroborating signals. Use as the starting point for 'what does the platform like right now'. May be empty between scans (`{stocks:{}}`).

Input parameters:

- `limit` (integer): Max results (default 10, max 50)

### `stoquant_get_hidden_gems` (~147 tokens)

Get hidden gems

Undervalued small-caps with confirming signals (the 'hidden gem' screen: low valuation, healthy balance sheet, low analyst coverage, plus momentum/ML/insider confirmation). Returns `{gems:[...], totalCount, lastScanAt}`. freshness filters by how recently a gem's signals fired. Use for value-oriented idea generation distinct from momentum.

Input parameters:

- `freshness` (string): Filter by signal age: 'fresh' (within 2 hours), 'aging' (within 24 hours), 'stale' (24+ hours). Omit to exclude stale gems.
- `limit` (integer): Max results (default 20, max 100)

### `stoquant_get_multibagger_candidates` (~72 tokens)

Get multibagger candidates

Small/mid-caps flagged with high (>5x) upside potential: revenue acceleration, improving fundamentals, and pre-discovery setups. Higher risk/variance than hidden gems. Use for aggressive growth idea generation.

Input parameters:

- `limit` (integer): Max results (default 20, max 100)

### `stoquant_get_related_stocks` (~121 tokens)

Get related/peer stocks

Find peers of a ticker under `peers`, each with qScore, quote, and market cap. `by` selects the relation: 'sector' (same sector), 'tag' (shared thematic tags), 'setup' (same technical setup firing), or 'correlation' (highest 60-day return correlation). Use to build a comparison set or find alternatives to a name.

Input parameters:

- `by` (string)
- `limit` (integer): Max peers (default 12, max 25)
- `ticker` (string, required)

### `stoquant_get_signal_accuracy_heatmap` (~84 tokens)

Get accuracy heatmap

Hit-rate heatmap of signals over time/ticker for a date range — which signal types worked when. Use for backtest-style 'has this signal been reliable lately' questions. Dates are YYYY-MM-DD; omit for the default recent window.

Input parameters:

- `endDate` (string): YYYY-MM-DD
- `startDate` (string): YYYY-MM-DD

### `stoquant_list_prebuilt_screens` (~169 tokens)

List prebuilt screens

List the curated prebuilt screens with their id, name, and description. Available screens: 'undervalued-gems' (low P/E, P/B value plays), 'momentum-leaders' (strong price momentum), 'oversold-bounce' (RSI reversal setup), 'ml-outperform' (ML-predicted S&P 500 outperformance), 'hidden-gems' (small-cap value with confirmation signals), 'growth-explosion' (high-growth micro/mid-caps before discovery), 'pre-explosion' (multibagger pattern: revenue acceleration + insider + fundamentals). Call this first, then run one with stoquant_run_prebuilt_screen — it is faster and better-tuned than hand-built filters.

Input parameters:

- `universe` (string)

### `stoquant_run_prebuilt_screen` (~131 tokens)

Run a prebuilt screen

Run one curated screen by its id (from stoquant_list_prebuilt_screens) and get the ranked matching stocks. Prefer this over stoquant_run_screener for common intents (value, momentum, oversold, ML picks, hidden gems, growth) — the filters are pre-tuned. universe defaults to sp500; use 'full' for the broadest set. Result count is fixed by the screen definition.

Input parameters:

- `screenId` (string, required): Screen id, e.g. 'undervalued-gems' or 'momentum-leaders'
- `universe` (string)

### `stoquant_run_screener` (~406 tokens)

Run a custom screen

Run a custom stock screen. Read-only — nothing is mutated. All filters are AND-combined; returns an ARRAY of matching stocks (ticker, name, price, plus the requested metrics and overlays like valueScore/qScore/mlProbability). Valid filter fields (camelCase, case-sensitive): trailingPE, forwardPE, priceToBook, marketCap, epsTrailingTwelveMonths, dividendYield, bookValue, regularMarketPrice, fiftyDayAverage, twoHundredDayAverage, fiftyDayAverageChangePercent, twoHundredDayAverageChangePercent, regularMarketChangePercent, fiftyTwoWeekHighChangePercent, regularMarketVolume, averageDailyVolume3Month, sector, industry, rsi14, twentyDayAverageChangePercent, oneHundredFiftyDayAverageChangePercent, shortPercentOfFloat, grossMargins, operatingMargins, profitMargins, returnOnEquity, returnOnAssets, debtToEquity, revenueGrowth, earningsGrowth, pegRatio, currentRatio, numberOfAnalystOpinions. Additional sort-only fields: valueScore, qScore, marginOfSafety, mlProbability. Margins/growth are decimals (0.25 = 25%); marketCap is raw USD (250M = 250000000). An unknown field is rejected with a suggestion (it would otherwise silently return zero matches). For per-field units and typical ranges, read the stoquant://screener-fields resource. Tip: a full-universe scan can be slow and time out — prefer universe='sp500' and a handful of filters, or use stoquant_run_prebuilt_screen.

Input parameters:

- `filters` (array, required): Filter conditions, all must match (AND)
- `limit` (integer): Max results (default 50, max 100)
- `sortDirection` (string)
- `sortField` (string): Field to sort by (any valid field, or valueScore/qScore/marginOfSafety)
- `universe` (string)

### `stoquant_get_insider_trades` (~78 tokens)

Get insider trades

Recent insider (Form 4) transactions for a ticker under `data`, plus a `summary` (net buy/sell counts and dollar value). Cluster buying by officers/directors — especially large dollar buys — is a notable bullish signal. Use to check whether insiders are accumulating or distributing.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_institutional_holders` (~50 tokens)

Get institutional holders

Top institutional holders for a ticker: organization name, shares held, and percent ownership. Use to gauge institutional concentration and who the big holders are.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_institutional_ratings` (~55 tokens)

Get institutional sentiment

Aggregated institutional sentiment for a ticker: holder additions vs reductions and a net `signal` direction. Use as a 'smart money' flow read distinct from analyst ratings.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_analyst_estimates` (~80 tokens)

Get analyst estimates

Sell-side analyst forward estimates for a ticker under `data` (per fiscal period: estimated EPS avg/high/low, estimated revenue avg/high/low, number of analysts) with a `count`. Use for consensus expectations and dispersion. Some future periods may have null estimates until coverage fills in.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_analyst_price_targets` (~71 tokens)

Get analyst price targets

Analyst price targets for a ticker with a `consensus` block (avgTarget, highTarget, lowTarget, numAnalysts) and the underlying `data`. Use to gauge implied upside/downside vs the current price and the dispersion of targets.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_analyst_changes` (~70 tokens)

Get analyst upgrades/downgrades

Recent analyst rating changes for a ticker — upgrades, downgrades, reiterations, and initiations — with a 90-day action breakdown. Use to see the direction of sell-side revisions (momentum in sentiment), not just the static consensus.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_short_interest` (~81 tokens)

Get short interest

Short-interest history for a ticker: append-only `snapshots` plus a `summary` (latestFloat = % of float short, latestRatio = days-to-cover, and window deltas). Rising short interest with a price squeeze can signal a short squeeze; falling can signal covering. Use for crowded-short reads.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_insider_cluster` (~99 tokens)

Get insider cluster metrics

Insider-buying cluster metrics for a ticker under `data`: distinctFilers14d, officerCount14d, purchaseCount90d, totalValue90d, clusterScore, and a clusterMomentum flag. Cluster buying by multiple insiders (especially officers, large dollar value) is a strong bullish signal — this scores it. Pairs with stoquant_get_insider_trades (the raw transactions).

Input parameters:

- `ticker` (string, required)

### `stoquant_get_big_insider_buys` (~123 tokens)

Get big insider buys (market-wide)

Market-wide list of tickers with large recent insider purchases (default >= $1M) under `items`, each with the buy detail plus a current quote and Q-Score. Use for 'where are insiders putting real money right now' discovery across the whole market.

Input parameters:

- `days` (integer): Lookback window in days (default 30)
- `limit` (integer): Max tickers (default 20, max 50)
- `minValue` (integer): Minimum total buy value in USD (default 1000000)

### `stoquant_get_macro_indicator` (~142 tokens)

Get macro indicator (FRED)

Latest values for one FRED macro series under `data` (recent observations) with a `count`. Common ids: DGS10 (10y Treasury yield), DGS2 (2y), T10Y2Y (10y-2y spread), UNRATE (unemployment), CPIAUCSL (CPI), VIXCLS (VIX), FEDFUNDS (fed funds). Use for a single specific indicator; for the full picture use stoquant_get_macro_dashboard.

Input parameters:

- `seriesId` (string, required): FRED series id, e.g. DGS10, UNRATE, VIXCLS, T10Y2Y

### `stoquant_get_macro_dashboard` (~79 tokens)

Get macro dashboard

Full top-down macro picture in one call: `regime` classification, key `indicators`, `macroStress` gauge, `sectorRotation` (which sectors are favored, with valid GICS sector names), forward `calendar`, and current `themes`. Best first call for 'what's the macro backdrop' before drilling into stocks.

### `stoquant_get_macro_calendar` (~53 tokens)

Get economic calendar

Forward (~14 day) economic calendar: scheduled releases with forecast, prior value, and expected market impact. Use to flag upcoming macro events (CPI, FOMC, jobs) that could move positions.

### `stoquant_get_macro_themes` (~49 tokens)

Get macro themes

Current macro investment themes with their related sectors — the narrative layer (e.g. rate-cut beneficiaries, AI capex). Use for thematic idea generation that ties stocks to a macro thesis.

### `stoquant_get_sec_filings` (~180 tokens)

Get SEC filings

Recent SEC filings for a ticker under `items` (with `count`/`total`), unioning the whole suite: 8-K events (with item labels like 'Item 2.02 Results of Operations'), NT-10K/Q late filings, 13D/13G activist/passive ownership, S-1/S-3/424B dilution, DEF 14A / Form 25 / Form 15 governance, and Form 144/3 insider intent. Each item has accession, formType, filedDate, category, and a human-readable label. Use to read the actual regulatory record behind a thesis.

Input parameters:

- `days` (integer): Lookback window in days (default 365)
- `limit` (integer): Max filings (default 50, max 200)
- `ticker` (string, required)

### `stoquant_get_news` (~104 tokens)

Get news headlines

Recent news headlines for a ticker under `items`: each with publishedAt, headline, source/provider, category, and a sentiment label. Use for the latest narrative around a stock. For news plus filings plus earnings in one combined view, use stoquant_get_news_events.

Input parameters:

- `days` (integer): Lookback window in days (default 14)
- `limit` (integer): Max articles (default 30, max 50)
- `ticker` (string, required)

### `stoquant_get_news_events` (~79 tokens)

Get news, filings & earnings

Combined event view for a ticker under `data`: `news` (headlines), `filings` (SEC), and `earnings` (calendar). The single best call for 'what is happening with this stock' — recent coverage, regulatory activity, and upcoming/just-reported earnings together.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_social_sentiment` (~87 tokens)

Get social sentiment

Current social-media buzz for a ticker: `totalMentions`, `recentPostCount24h`, `sentimentBreakdown` (bullish/bearish/neutral), `topPlatforms`, and a sample of `recentPosts`. Use to read retail attention and crowd sentiment. Sources are credibility-weighted platform aggregates, not raw noise.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_social_trend` (~55 tokens)

Get social sentiment trend

Daily social mention-volume and sentiment trend for a ticker over the last ~30 days. Use to see whether attention and bullishness are building or fading, not just the current snapshot.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_trending_social` (~64 tokens)

Get trending tickers (social)

Most-mentioned tickers across social platforms in the last few hours, each with mentionCount, prevMentionCount, deltaPercent, velocityScore, bullishPct, and platforms. Use for market-wide 'what is retail talking about right now' discovery and early momentum.

### `stoquant_get_social_momentum` (~64 tokens)

Get social momentum surges

Tickers with a sharp (2x+) surge in social mentions in the last hour vs the prior hour — the earliest social-momentum signal, with sentiment and a recent post snippet per name. Use to catch breakouts in attention before they are widely noticed.

### `stoquant_get_source_credibility` (~75 tokens)

Get social source credibility

Leaderboard of social sources ranked by true directional accuracy (Wilson lower-bound on their calls). Use to judge how much weight to give a platform or author's sentiment — high-credibility sources earn more trust than raw mention volume.

Input parameters:

- `limit` (integer): Max sources (default 25, max 100)

### `stoquant_get_catalysts` (~118 tokens)

Get catalysts

Upcoming and recent catalysts under `data`, each with ticker, type (e.g. earnings_soon, activist_stake, dilution, fda), date, label, direction (bullish/bearish/neutral), and source. Omit ticker for the market-wide feed; pass a ticker to filter to one name (may be empty if that stock has no tracked catalysts right now). Use to find date-driven, event-based opportunities.

Input parameters:

- `ticker` (string): Filter to one ticker; omit for the market-wide feed

### `stoquant_get_alt_signals` (~247 tokens)

Get alternative-data signals

The full alternative-data dossier for a ticker in one call, under `data`. Aggregates 15 sources: sec8k (8-K event items + counts), secLate (NT-10K/Q late filings), sec13dg (13D/13G activist/passive ownership), secDilution (S-1/S-3/424B shelf + active-dilution flag), secGovernance (DEF 14A, Form 25 delisting, Form 15 deregistration flags), secInsiderIntent (Form 144/Form 3 counts), secS8 (employee stock plans), fdaEnforcement (Class I/II/III actions), cpscRecalls (consumer recalls), clinicalTrials (phase/recruiting — biotech), github (stars/forks/issues/push activity), appStore (iOS rank deltas), hackerNews (story velocity), gdelt (news tone). Sources with no recent activity for the ticker are null (e.g. clinicalTrials for a non-biotech). This is the platform's differentiated edge — use it to surface catalysts and red flags an ordinary data feed misses.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_alt_data` (~96 tokens)

Get web alt-data (trends, IV, pageviews)

Generic cached alternative-data for a ticker under `data`, keyed by source: google_trends (search interest), wikipedia_pageviews (attention), options_iv (implied-vol metrics), openinsider (insider feed), edgar_8k. Each source carries its latest values and fetchedAt. Complements stoquant_get_alt_signals with retail-attention and options-positioning reads.

Input parameters:

- `ticker` (string, required)

### `stoquant_get_catalyst_watch` (~70 tokens)

Get catalyst watch (market-wide)

Cross-ticker hot list of the highest-impact near-term catalysts the platform is tracking (FDA decisions, activist stakes, dilution events, clinical readouts, etc.). Use for market-wide 'what's about to move' discovery, distinct from per-ticker stoquant_get_catalysts.

### `stoquant_get_unusual_options` (~258 tokens)

Get unusual options activity

Options contracts trading far above their open interest, ranked by notional (volume x price x 100). Each row under `data.rows` has ticker, optType (call/put), strike, expiry, dte, volume, openInterest, volOi, newPosition (open interest was 0), notional, priceSource (mid/last), lastVsMid and ageHours. IMPORTANT: this is a delayed QUOTE snapshot, front-month expiry only — there is no trade tape, so no buyer/seller side and no sweep detection; `lastVsMid` is only where the last print sat between bid (0) and ask (1). Open interest is published next day, so volume/OI compares today against yesterday. Descriptive, not a buy or sell signal.

Input parameters:

- `limit` (number): Max rows, default 100, cap 500
- `minNotional` (number): Minimum dollars traded, e.g. 250000
- `newPositionsOnly` (boolean): Only contracts where open interest was 0
- `ticker` (string): Filter to one ticker; omit for the market-wide feed
- `type` (string): Contract side (NOT the side of the trade)

### `stoquant_get_auto_portfolio_status` (~198 tokens)

Get auto-portfolio status (last eval + holdings)

Read-only snapshot of an auto-portfolio: last evaluation (`evalStatus.lastEvalResult`, `lastEvalAt`, `recsGenerated`) plus diagnostics (cash, holdings tickers, cascade/drawdown breakers, risk params, recent recommendations). `lastEvalResult` is `success` or `gated:<reason>`. Important gate: `gated:no_edge` means the public accuracy scorecard has dataSufficient && excessSpreadPp < 0, so BUY recommendations were suppressed — do not treat that as a buy signal. Other gates include `static_snapshot`, `health_critical`, `cascade_breaker_paused`, `no_cash_buys_suppressed`, `no_changes`. Requires Power-tier API key and ownership of portfolioId. This does NOT run a new evaluation and does NOT place orders.

Input parameters:

- `portfolioId` (integer): Portfolio id (required by the API; default 1)

### `stoquant_get_auto_portfolio_history` (~95 tokens)

Get auto-portfolio recommendation history

Read-only recommendation history for an auto-portfolio (ticker, action, status, timestamps). Use to inspect what the engine last proposed — including rows that stayed pending or were gated. Does not execute or cancel anything. Power-tier; requires portfolio ownership.

Input parameters:

- `limit` (integer): Max rows (default 100, max 1000)
- `portfolioId` (integer): Portfolio id (default 1)

### `stoquant_get_portfolio_health` (~61 tokens)

Get portfolio-engine health report

System-wide auto-portfolio health report (subsystem statuses, degraded mode, last check time). Use to see whether the engine is healthy before trusting a last-eval snapshot. Read-only — does not trigger healing or reset the drawdown breaker.

### `stoquant_optimize_portfolio` (~174 tokens)

Optimize portfolio weights (Black-Litterman)

Compute target weights via Black-Litterman (HRP blend fallback). Returns an `optimization` object with weights — it does NOT place orders, rebalance, or move cash. If `predictions` is omitted the server fills views from ML forecasts (up to 20 tickers). Pro/Power tier. Use the weights as a recommendation; call stoquant_get_accuracy_summary first and do not size into buys while excessSpreadPp is negative and dataSufficient is true.

Input parameters:

- `initialCapital` (number): Starting capital in USD (informational)
- `method` (string): Optimizer method (only black-litterman is supported)
- `predictions` (object): Optional views keyed by ticker. Omit to auto-fetch ML predictions.
- `tickers` (array, required): Universe to allocate across

### `stoquant_list_backtest_templates` (~83 tokens)

List backtest strategy templates

The pre-built strategy templates you can backtest (`id`, name, parameters). Known ids include `momentum`, `growth_chaser`, `value`, `insider_follower`, `gem_composite`, and `research_*` variants. Call this before stoquant_run_backtest so you pass a real strategyId. Power-tier. Read-only.

### `stoquant_run_backtest` (~189 tokens)

Run a historical backtest

Run a historical backtest for a strategy template over [startDate, endDate]. Returns the full run (metrics at 0% slippage plus bias disclosure: Deflated Sharpe, iteration count). This is a simulation — it does NOT place live or paper orders. It does persist a run record you can reload with stoquant_get_backtest. Power-tier; computationally expensive (this call can take tens of seconds). Prefer universe=sp500. Dates are YYYY-MM-DD.

Input parameters:

- `endDate` (string, required): YYYY-MM-DD inclusive end
- `initialCapital` (number): Starting capital USD (default 100000)
- `startDate` (string, required): YYYY-MM-DD inclusive start
- `strategyId` (string, required): Template id from stoquant_list_backtest_templates, e.g. momentum, value, gem_composite
- `universe` (string): Default sp500

### `stoquant_get_backtest` (~64 tokens)

Get a saved backtest run

Reload a previously stored backtest run by numeric id, including metrics and bias disclosure. Use after stoquant_run_backtest or to inspect history. Power-tier. Read-only.

Input parameters:

- `id` (integer, required): Backtest run id returned by stoquant_run_backtest

### `stoquant_get_backtest_history` (~72 tokens)

List past backtest runs

Metadata for past backtest runs (ids, strategy, dates) without the full equity curve. Filter by strategyId. Power-tier. Read-only.

Input parameters:

- `limit` (integer): Max rows (default 20, max 100)
- `strategyId` (string): Filter to one template id

### `stoquant_get_strategy_performance` (~132 tokens)

Get strategy performance

Read-only strategy performance for a portfolio. `view` selects the slice: `kpis` (headline returns), `equity-curve` (vs SPY, normalized to 100), `monthly-returns`, `risk-metrics` (Sharpe/Sortino/max drawdown/capture), `attribution` (P/L by signal type), `comparison` (all active portfolios). Pro-tier. Does not trade.

Input parameters:

- `portfolioId` (integer): Portfolio id (default 1; ignored for comparison)
- `view` (string): Which slice to return (default kpis)

### `stoquant_list_strategy_presets` (~58 tokens)

List themed strategy presets

Themed strategy presets (social / insider / congress, etc.) with customization knobs. Read-only signal catalog — does not create a portfolio. Use stoquant_get_strategy_preset_candidates to see the current ranked basket for one preset.

### `stoquant_get_strategy_preset_candidates` (~86 tokens)

Get ranked candidates for a strategy preset

Current ranked candidate tickers and target-weight basket for a themed preset (`social`, `insider`, `congress`, …). Returns `{preset, appliedOptions, candidates, basket}`. This is a signal read — it does NOT create or rebalance a paper portfolio.

Input parameters:

- `presetId` (string, required): Preset id from stoquant_list_strategy_presets

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp#diagnostics

## Score history

- 2026-11-05: 73
- 2026-11-04: 73
- 2026-11-03: 72
- 2026-11-02: 72
- 2026-11-01: 72
- 2026-10-31: 71
- 2026-10-30: 71
- 2026-10-29: 70
- 2026-10-28: 70
- 2026-10-27: 69
- 2026-10-26: 69
- 2026-10-25: 68
- 2026-10-24: 68
- 2026-10-23: 72
- 2026-10-22: 72
- 2026-10-21: 71
- 2026-10-20: 71
- 2026-10-19: 70
- 2026-10-18: 70

## Common questions

### What is the StoQuant — Quantitative Stock Research MCP server?

StoQuant — Quantitative Stock Research is an MCP server listed in the public MCP registry as io.github.ohadf2015/stoquant-mcp. StoQuant: 61 tools, Q-Score, ML, screeners, alt-data, portfolio, backtest, strategy. This page covers its npm package (stoquant-mcp).

### Is the StoQuant — Quantitative Stock Research MCP server safe to use?

StoQuant — Quantitative Stock Research scores 73 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the StoQuant — Quantitative Stock Research MCP server expose?

StoQuant — Quantitative Stock Research exposes 61 tools: stoquant_get_quote, stoquant_get_quotes_batch, stoquant_get_extended_quote, stoquant_get_sparklines, stoquant_get_benchmarks, and 56 more. Their descriptions and schemas cost roughly 6,880 tokens of context every time the server is loaded.

### Is the StoQuant — Quantitative Stock Research MCP server still maintained?

StoQuant — Quantitative Stock Research is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the StoQuant — Quantitative Stock Research MCP server under?

StoQuant — Quantitative Stock Research declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/stoquant-mcp
- Socket report: https://socket.dev/npm/package/stoquant-mcp
- Repository: https://github.com/ohadf2015/stoquant-mcp
- Website: https://stoquant.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp.json
- HTML version of this page: https://verifymcp.io/servers/ohadf2015-stoquant-mcp/stoquant-mcp
