StoQuant MCP for Claude Desktop
The stoquant-mcp Model Context Protocol server gives Claude Desktop, Claude Code, and any other MCP-compatible client direct, read-only access to StoQuant’s quantitative stock-research stack — 71 tools across 15 categories. Any StoQuant account can use it: free accounts get 100 requests/day, Pro gets 5,000/day, Power is unlimited.
One-command install
In a terminal, run npx -y stoquant-mcp install. The installer prompts for your StoQuant API key (mint one free at /account/api-keys), writes the right claude_desktop_config.json for your operating system, and backs up any existing config. Fully quit and relaunch Claude Desktop, then ask Claude to list available tools to confirm the stoquant_* tools are loaded.
Tool catalog
All 71 tools, grouped into 15 categories. Read-only -- no order placement. Tools marked (free) work on a free API key; the rest require Pro or Power.
Prices (6 tools)
get_quote (free) — params: ticker
- 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.
get_quotes_batch (free) — params: tickers
- 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).
get_extended_quote (free) — params: ticker, timezone?
- 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.
get_sparklines (free) — params: tickers, interval?
- 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.
get_benchmarks (free)
- 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.
get_sector_performers (free) — params: sector, limit?
- 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'.
Research (11 tools)
get_qscore — params: ticker, period?
- 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'. CANONICAL FIELD: `qScore.score` is THE headline score — the same number the website's watchlist, screener, and homepage rankings show. Two other numbers in the payload are NOT the score: `confidenceInterval.mid` is a hypothetical complete-data estimate (shown on the site as 'Plausible range L–H'), and `percentile` is the score's cross-sectional rank vs the universe (the research page hero's display basis). If you need a lifecycle-stage/regime-adjusted variant, use stoquant_get_signals_v2 — do not mix its adjusted value with this score. HORIZON: the score is always computed on a fixed 30-day residualized horizon; `period` is accepted for forward compatibility but currently has NO effect. 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.
score_ticker — params: ticker
- Own StoQuant Q-Score for a ticker PLUS the live /proof honesty banner in one response. OWN signals only — never TipRanks Smart Score or street consensus (use stoquant_compare_signal for own-Q vs street). Returns `score` / `signal` / `percentile` / `confidence`, `ownSignalsOnly: true`, `note`, and `honesty` (`grade`, `excessSpreadPp`, `dataSufficient`, `gatedNoEdge`, `banner`). While honesty.gatedNoEdge (dataSufficient && excessSpreadPp < 0), treat the score as descriptive research — not TipRanks skill claims, not proven ranking edge. Requires Pro or Power (same as stoquant_get_qscore).
compare_two_tickers — params: tickerA, tickerB
- Side-by-side own StoQuant Q-Scores for two tickers PLUS the live /proof honesty banner. OWN signals only — never TipRanks Smart Score or street consensus. Returns `a` / `b` (`score` / `signal` / `percentile` / `confidence`), `comparison` (`scoreDelta`, `higherScore`, `signalRelation`, `summary`), `ownSignalsOnly: true`, `note`, and `honesty` (`grade`, `excessSpreadPp`, `dataSufficient`, `gatedNoEdge`, `banner`). While honesty.gatedNoEdge (dataSufficient && excessSpreadPp < 0), treat both sides as descriptive research — not TipRanks skill claims, not proven ranking edge, not a buy pick. Requires Pro or Power (same as stoquant_get_qscore).
earnings_brief — params: ticker
- Own-signal earnings companion foil: StoQuant Q-Score PLUS own earnings_history calendar/surprises PLUS the live /proof honesty banner. OWN signals only — TipRanks earnings-companion foil (never TipRanks Smart Score or TipRanks earnings skill). Returns `stoquant` / `nextEarnings` / `recentPrints` / `beatMiss` / `summary` / `ownSignalsOnly: true` / `note` / `honesty`. Descriptive discovery around an earnings date — not a buy rating, not proven ranking edge. While honesty.gatedNoEdge, treat as descriptive only. Requires Pro or Power (same as stoquant_get_qscore).
compare_signal — params: ticker
- StoQuant Q-Score AND street analyst consensus in one response — the TipRanks MCP differentiator. TipRanks MCP is consensus-only; this returns StoQuant's own predictive score (`stoquant.score` / `stoquant.signal`) beside street `rating` / `consensusScore`, price target, upside, analystCount, and a `divergence` summary so an agent can spot disagreement without a second round-trip. Requires Pro or Power (same as stoquant_get_qscore).
get_signals_v2 — params: ticker
- 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. The adjusted value is a DIFFERENT flavor of the score and can differ from the headline by a large margin (e.g. raw 31 vs adjusted 50 on a mature value stock) — always say which one you are quoting, and never compare `adjusted` against the raw score another surface shows. For the full breakdown use stoquant_get_qscore.
get_ml_prediction — params: ticker, horizon?
- 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.
explain_ml_prediction — params: ticker, horizon?, top?
- 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.
get_strategic_edges — params: ticker
- 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.
get_quant_analytics — params: ticker
- 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.
get_evidence — params: ticker
- 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.
Signals (3 tools)
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.
get_signal_accuracy
- 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.
get_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.
Discovery (9 tools)
get_top_conviction — params: limit?
- 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:{}}`).
get_hidden_gems — params: limit?, freshness?
- 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.
get_multibagger_candidates — params: limit?
- 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.
get_signal_stacks — params: minSetups?, limit?
- Tickers where MULTIPLE named setups fired on the same day — StoQuant's convergence view, and the only tool that exposes the daily setup-fire history. Returns `{tickers:[{ticker, qScore, marketCap, stackScore, firedSetups:[{id, name, headline, confidence}]}]}`, sorted by stackScore (the sum of the fired setups' confidences). Use this for 'what is worth a look today' when you want corroboration rather than a single score: two independent setups agreeing on one name is a stronger read than one high Q-Score. Complements stoquant_get_top_conviction (score-first) and stoquant_get_hidden_gems (valuation-first). Empty `{tickers:[]}` is a normal answer before the day's scan completes or when nothing converged — it is not an error.
get_related_stocks — params: ticker, by?, limit?
- 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.
get_signal_accuracy_heatmap — params: startDate?, endDate?
- 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.
get_demand_zone — params: limit?
- Descriptive demand-zone setup screener (NOT a buy rating) PLUS live /proof honesty banner: liquid commons 0–3% above rising SMA200 (else SMA50) with RSI(14) 35–55. Returns `{asOf, items:[...], notes, ownSignalsOnly: true, note, honesty}`. Own StoQuant evaluateDemandZone only — not TipRanks Smart Score / TipRanks skill. While honesty.gatedNoEdge, treat as descriptive only. Landing + share card: https://stoquant.com/demand-zone. Pro/Power.
get_morning_brief
- Descriptive own-signal pre-market morning brief (NOT a buy rating; TipRanks due-diligence-agent FOIL) PLUS live /proof honesty banner: regime, VIX, SPY/QQQ/IWM moves, earnings reporting today, optional gem spotlight. Returns `{asOf, sessionDate, regime, vix, indices, reportingToday, spotlight, summary, notes, ownSignalsOnly: true, note, honesty}`. Own StoQuant signals only — never TipRanks Smart Score / TipRanks skill. While honesty.gatedNoEdge, treat as descriptive only. Landing + share card: https://stoquant.com/morning-brief. Pro/Power.
get_enablers — params: seeds?, sector?, limit?
- Descriptive thematic/co-mover screener (NOT a buy rating, NOT a verified supply-chain bottleneck graph): finds tickers near a set of seeds via tag overlap and 60-day return correlation. Provide `seeds` (1-10 tickers) or `sector` (top gainers become the seeds). Returns `{asOf, seeds, items:[{ticker, marketCap, reasons:{tagOverlap:{count,shared}, correlation:{vsSeed,r}|null, relativeStrength}, seedLinks, qScore}], notes}`. Candidates capped to $300M-$20B market cap; index ETFs and warrants excluded. Not a Q-Score dimension and does not drive autopilot buys. Pro/Power.
Screener (3 tools)
list_prebuilt_screens (free) — params: universe?
- 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.
run_prebuilt_screen (free) — params: screenId, universe?
- 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. Omit universe and each screen runs against the one it was designed for (the small-cap screens 'hidden-gems' and 'growth-explosion' use the full universe; the rest use sp500) — pass it only to override. Result count is fixed by the screen definition.
run_screener (free) — params: filters, sortField?, sortDirection?, universe?, limit?
- 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). " + FIELD_HELP + " 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.
Ownership (10 tools)
get_insider_trades — params: ticker
- 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.
get_institutional_holders — params: ticker
- Top institutional holders for a ticker: organization name, shares held, and percent ownership. Use to gauge institutional concentration and who the big holders are.
get_institutional_ratings — params: ticker
- 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.
get_analyst_estimates — params: ticker
- 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.
get_analyst_price_targets — params: ticker
- 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.
get_analyst_changes — params: ticker
- 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.
get_short_interest — params: ticker
- 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.
get_insider_cluster — params: ticker
- 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).
get_smart_money_verdict — params: ticker
- Who's backing a ticker and whether they've actually been right: analyst firms, institutions (incl. new entrants this quarter), insiders, and social voices, each with a MEASURED directional accuracy (Wilson lower-bound hit rate, avg 30d excess return, letter grade) and a credibility-weighted net stance (`consensus.netTilt`, -1 bearish to +1 bullish) per category. Sources with too few matured calls are marked `gated` (accruing, not yet trustworthy) rather than silently counted at full weight. Use this instead of raw insider/institutional/analyst tools when the question is 'is anyone credible actually backing this, and are they usually right' rather than just 'who holds it'.
get_big_insider_buys — params: minValue?, days?, limit?
- 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.
Macro (4 tools)
get_macro_indicator — params: seriesId
- 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.
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.
get_macro_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.
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.
Filings & news (3 tools)
get_sec_filings — params: ticker, days?, limit?
- 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.
get_news — params: ticker, days?, limit?
- 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.
get_news_events — params: ticker
- 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.
Social (5 tools)
get_social_sentiment — params: ticker
- 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.
get_social_trend — params: ticker
- 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.
get_trending_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.
get_social_momentum
- 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.
get_source_credibility — params: limit?
- 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.
Catalysts (1 tools)
get_catalysts — params: ticker?
- 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.
Options flow (1 tools)
get_unusual_options — params: ticker?, type?, newPositionsOnly?, minNotional?, limit?
- 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.
Alt-data (3 tools)
get_alt_signals — params: ticker
- 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), clinicalReadiness (biotech pivotal-trial detail: fully-enrolled Phase 3s, days accruing endpoint events since enrollment close, how many are past the measured 269-day median dwell, partner-led trials where the ticker is only a collaborator, terminations, and per-trial registry changes), 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. IMPORTANT on clinicalReadiness: it is DESCRIPTIVE, not predictive. It says a readout is capable of firing soon, never that it will succeed — published Phase 3→approval odds in oncology are ~35%, and roughly 25% of fully-enrolled Phase 3s exit that state within 90 days. Do not present it as a probability of success or as a recommendation.
get_alt_data — params: ticker
- 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.
get_catalyst_watch
- 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.
Portfolio (5 tools)
portfolio_risk — params: portfolioId?
- Own StoQuant portfolio risk metrics (Sortino, Sharpe, VaR/CVaR, max drawdown, Calmar, downside deviation) PLUS the live /proof honesty banner. OWN risk analytics only — not TipRanks portfolio analysis. Returns `risk`, `observationCount`, `ownSignalsOnly: true`, `note`, and `honesty`. While honesty.gatedNoEdge, do not size into buys as if the live book has edge. Requires Pro or Power and ownership of portfolioId. Read-only — does not place orders.
get_auto_portfolio_status — params: portfolioId?
- 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.
get_auto_portfolio_history — params: portfolioId?, limit?
- 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.
get_portfolio_health
- 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.
optimize_portfolio — params: tickers, method?, initialCapital?, predictions?
- 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.
Backtest (4 tools)
list_backtest_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.
run_backtest — params: strategyId, startDate, endDate, universe?, initialCapital?
- 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.
get_backtest — params: id
- 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.
get_backtest_history — params: strategyId?, limit?
- Metadata for past backtest runs (ids, strategy, dates) without the full equity curve. Filter by strategyId. Power-tier. Read-only.
Strategy (3 tools)
get_strategy_performance — params: portfolioId?, view?
- 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.
list_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.
get_strategy_preset_candidates — params: presetId
- 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.
Security model
Read-only by design. HTTPS only. API key in the Authorization header, never logged. Client-side rate limit 200 req/min, 15-second per-request timeout. Server-side, API keys are hashed (SHA-256) at rest and timing-safe-compared on verify. Revoke any key from /account/api-keys.
CLI and hosted endpoint
The npm CLI only supports install, serve, and --help — not per-tool subcommands. The hosted endpoint is POST https://stoquant.com/api/mcp and exposes 21 read-only tools (Bearer key). Dry-run evaluate is available; live execute is not.
Requirements
A free StoQuant account (100 requests/day) or higher. Node.js installed locally (the installer uses npx). Compatible with Claude Desktop, Claude Code, and any other MCP-compatible client.