Stocklake — AI Stock Intelligence
Server Details
AI stock intelligence: prices, fundamentals, technicals, news, macro regime, and sector signals.
- Status
- Healthy
- Uptime
- 99.8% over 52 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 19 tools
Most tools target clearly distinct resources (stock, market, sector, news, signals). A few near-overlaps exist—get_earnings_calendar vs get_earnings_intelligence and get_stock vs get_stock_research—but the descriptions explicitly differentiate them by content and tier. An agent could still occasionally pick the wrong one without reading carefully, so not a perfect 5.
Every tool follows the same verb_noun pattern with get_ and snake_case. Names like get_stock, get_stocks, get_stock_financials, and get_stock_research are predictable and consistently structured. No mixed conventions or arbitrary verbs.
At 19 tools, the set is on the heavy side for an agent to browse, falling in the 16–25 range the calibration flags as borderline. Each tool has a genuine purpose, but some could be consolidated (e.g., earnings calendar vs intelligence, or stock vs research). The count isn't extreme, but it exceeds the ideal 3–15 sweet spot.
The surface covers the stock intelligence domain well: single/batch quotes, fundamentals, history, AI research, news, insider activity, signals, market overview, sector intelligence, earnings/economic calendars, screening, and watchlist. There are minor gaps like no dedicated historical earnings or options data, but the core workflows are well supported and interlinked.
Available Tools
20 toolsget_analyst_trendGet Analyst TrendRead-onlyIdempotentInspect
How analyst consensus on a stock has moved over time - the trajectory of the rating and price targets, not just today's value. Answers "are analysts getting more or less bullish on this name?", which get_stock's single current analyst_rating / analyst_target cannot.
Returns one row per day, oldest to newest, up to days (max 365, default 90):
date: YYYY-MM-DD
analyst_rating: consensus label (strong_buy/buy/hold/underperform/sell/strong_sell) or null
analyst_rating_score: numeric consensus, 1.0 (strong buy) to 5.0 (sell)
LOWER is more bullish. The same scale as get_stock's analyst_rating_score.
analyst_count: number of analysts contributing
analyst_target: mean price target
analyst_target_high / analyst_target_low / analyst_target_median: target spread
price: the stock's price on the snapshot date, so the target can be read against where the stock actually traded
Snapshots are taken once per weekday, so a 90-day window is roughly 60 rows.
A field is null on a day where the source reported none - analyst_rating in
particular can be null on a day when the price targets are present. A weekday
can be missing entirely if the daily snapshot did not run; such days are not
reconstructed, the date is simply absent. Coverage: most of the
tracked universe has a usable history; a symbol with fewer than 2 snapshots
returns an empty snapshots list with a note rather than a single stranded point.
History begins July 2026 and grows daily.
For the current analyst view alone, get_stock is enough. For price/indicator history, see get_indicator_history - this tool is analyst consensus only.
Pro tier only. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of daily analyst snapshots to return (max 365, default 90). Returns an empty list with a note if fewer than 2 snapshots exist in the window. | |
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_earnings_calendarGet Earnings CalendarRead-onlyIdempotentInspect
Upcoming earnings dates for stocks in the Stocklake universe.
days: look-ahead window in days (default 7, max 30)
Returns: { window_days, from_date, to_date, count, results[] }
Each result: symbol, name, sector, market_cap, price, rsi, earnings_date (ISO UTC), is_estimate, eps_trailing, eps_forward
Sorted by earnings_date ascending.
Dates sourced from market data - treat is_estimate=true dates as approximate. Available to all tiers.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-ahead window in days (default 7, max 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_earnings_intelligenceGet Earnings IntelligenceRead-onlyIdempotentInspect
Upcoming earnings with AI context - AI scores, verdicts, and risk factors per stock. Combines the earnings calendar with AI pipeline data to surface which upcoming earnings events are worth monitoring.
Parameters:
days_ahead: look-ahead window in days (default 14, max 30)
sector: filter to one sector (e.g. "Technology")
min_ai_score: only return stocks with AI score >= this value, 0-100 (optional). Gates on the same ai_score field the response returns. Applied server-side before
limittruncates the result - a stock with a qualifying score always counts againstlimitahead of one without, rather than being cut off first for reporting later in the earnings window.limit: max results to return (default 25, max 25). Each returned ticker counts as one call toward your daily limit - see the docs' rate-limit section.
Returns per stock (sorted by earnings_date ascending):
earnings_date: ISO UTC timestamp · is_estimate: whether date is estimated
symbol, name, sector, price, rsi, market_cap
eps_trailing, eps_forward (earnings expectations context)
ai_verdict (positive/neutral/negative, from nightly AI pipeline)
ai_score (0-100) / ai_score_band (Weak/Moderate/Strong/Very Strong) - the AI research composite score, same 0-100 scale and bands as signal_score but a separate score; null if this stock has no AI summary yet.
ai_risks: top 2 AI-identified risk factors
analyst_rating, analyst_target
Pro tier only - AI pipeline cost attached. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 25, max 25). Each returned ticker counts as one call toward your daily limit. | |
| sector | No | Filter to one sector, e.g. "Technology". | |
| days_ahead | No | Look-ahead window in days (default 14, max 30). | |
| min_ai_score | No | Only return stocks with AI score >= this value, 0-100 (optional). Gates on the same ai_score field the response returns. Applied server-side before limit truncates the result, so a qualifying stock always counts against limit ahead of one without. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_economic_calendarGet Economic CalendarRead-onlyIdempotentInspect
Upcoming and recently-released macro/economic events -- interest rate decisions, CPI, GDP, PMI, unemployment, payrolls, retail sales, and more.
Two buckets:
released_recent: events with a real reported value, within the last
lookback_daysdays. Every item here carries a realactualvalue (never blank) plusdiff(actual minus previous -- a plain arithmetic difference, never a beat/miss or consensus judgment; point-in-time consensus is not available).upcoming: not-yet-released events within
days. No item here ever carries anactualvalue.
Every item in both buckets carries key_event: true for the handful of
event types that reliably move markets on their own (rate decisions, CPI,
GDP, headline Non-Farm Payrolls) -- an event-TYPE flag only, never a
beat/miss or directional judgment on the number itself. Set
key_events_only=true to filter to just these, or major_only=true to
restrict to the 8 largest economies.
Both buckets sort major-economy-first, then by recency -- truncating to
limit should never lose a US/EU/UK/JP/CN/DE/FR/CA print to an older or
thinner-economy one.
All tiers. Guest and free: days max 7, lookback_days max 2, limit max 20.
Pro: days max 14, lookback_days max 7, limit max 50. When a guest/free
value is above its cap, the response is served at the cap and carries
capped ({param: {requested, served}}) plus a pro_unlocks note.
For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-ahead window in days for upcoming events (default 3). Max 7 for guest and free, 14 for Pro. | |
| limit | No | Max results per bucket, released_recent and upcoming each capped independently (default 20). Max 20 for guest and free, 50 for Pro. | |
| major_only | No | Restrict to the 8 largest economies (United States, Euro Area, United Kingdom, Japan, China, Germany, France, Canada). Default false returns all countries. | |
| lookback_days | No | Look-back window in days for recently-released events (default 2). Max 2 for guest and free, 7 for Pro. Actual values arrive with about a 1-day reporting lag, so a same-day-only window misses real releases -- keep this at 2+ to reliably see them. | |
| key_events_only | No | Restrict to the small subset of event types that reliably move markets on their own: interest rate/rate decisions, CPI, GDP, and headline Non-Farm Payrolls. Default false returns every event matching the broader base filter (also includes PMI, unemployment, other payrolls components, retail sales, ADP, inflation). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_indicator_historyGet Indicator HistoryRead-onlyIdempotentInspect
Historical daily indicator snapshots for a stock - ideal for charting and trend detection.
Returns up to days days of data (max 730, default 90) from the stock_indicator_snapshots
collection which is populated daily by the indicator pipeline.
Every snapshot row contains:
recorded_at: ISO date string
price: closing price at snapshot time
rsi: RSI(14) value (0-100)
macd_histogram: MACD histogram value (positive = bullish momentum)
bb_pct: Bollinger Band % position (0 = at lower, 100 = at upper band)
sma20 / sma200: 20-day and 200-day simple moving averages
With full=true, each row also gets:
williams_r: Williams %R (0 to -100; >-20 overbought, <-80 oversold)
ultimate_osc: Ultimate Oscillator (0-100; >70 overbought, <30 oversold)
vix_fix_value: Williams VIX Fix synthetic fear gauge (higher = more fear)
williams_ad_trend: Accumulation/Distribution trend (rising/falling/flat)
td_signal: DeMark TD Sequential count, named for the move that is running out (DOWNTREND_EXHAUSTION_SETUP / UPTREND_EXHAUSTION_SETUP / DOWNTREND_EXHAUSTION_COUNTDOWN / UPTREND_EXHAUSTION_COUNTDOWN / null)
td_phase: DeMark phase (setup_active/setup_complete/countdown_active/countdown_done/null)
analyst_rating: analyst consensus (buy/outperform/hold/underperform/sell or null)
analyst_target: mean analyst price target or null
Returns {} if fewer than 3 snapshots found. Pro tier only. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days of historical daily indicator snapshots to return (max 730, default 90). Returns {} if fewer than 3 snapshots are found in the window. | |
| full | No | False (default) returns only recorded_at/price/rsi/macd_histogram/bb_pct/sma20/sma200 per day - enough for most charting/trend use. True adds the specialized indicators (williams_r, ultimate_osc, vix_fix_value, williams_ad_trend, td_signal, td_phase) plus analyst_rating/analyst_target, which barely change day to day and roughly double response size over a long window. | |
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_insider_activityGet Insider ActivityRead-onlyIdempotentInspect
Get insider transactions (regulatory insider filings for the US and several European markets) and, on Pro, the AI read plus institutional holdings for a stock.
Every tier (guest/free/pro) gets the filing facts: insider_buys and insider_sells over the window (echoed as window_days), transactions (the individual rows behind those counts, newest first, each with date/name/role/type/shares/price/value), summary (a one-line factual readout computed from those same rows -- counts, dollar totals, date range -- so it can never disagree with them), source/source_name (which filing feed was used), and updated_at (when the filings were last fetched).
Free/guest: a 90-day window (a larger days is capped at 90, see
days_note), the 5 most recent rows (transactions_note says how many more
there are), and pro_unlocks describing what Pro adds. No AI fields and no
institutional holders.
Pro: days up to 365, up to 50 rows, plus signal (POSITIVE/NEGATIVE/
NEUTRAL etc.), signal_score (0-100, higher = stronger/more notable - the
exact same field, formula, scale and bands as get_signals()'s
signal_score) with signal_score_band, insider_signal/inst_signal,
ai_commentary (a separately-generated AI narrative on its own refresh
cadence, with ai_commentary_as_of - it can lag the transactions; trust
summary/the rows if they disagree), top_holders (a union of multiple
data sources, up to 15, each with name/shares/pct_held/sources/
share_counts_by_source - the last two show which source(s) contributed
to a merged row and each one's own reported share count), holder_count_
divergence (null unless every matched holder disagrees by the same
systemic multiplier across sources - e.g. an unrecorded reverse split -
a signal top_holders.shares may be unreliable for this symbol),
inst_ownership (0-100%), and total_holders.
For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Insider-transaction window in days (default 90, max 365 on Pro; free/guest calls are capped at 90). Applies to transactions, insider_buys and insider_sells. | |
| symbol | Yes | Stock ticker symbol to fetch insider-filing and institutional-holdings activity for. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_market_assessmentGet Market AssessmentRead-onlyIdempotentInspect
Combined AI market assessment: macro regime + market outlook in a single call. Refreshed ~4x/day, weekdays only, during market hours (~2h apart) - dead overnight and on weekends, not a continuous 4-hourly cadence. Check regime_stale/outlook_stale below (which already account for the weekend gap) before treating either as current, especially on a Monday morning.
Two distinct perspectives returned together:
REGIME (RISK_OFF/CAUTIOUS/NEUTRAL/AGGRESSIVE): answers "how much equity risk to take" → use for position sizing and asset allocation decisions
OUTLOOK (POSITIVE/NEUTRAL/NEGATIVE): answers "which direction and sectors to trade" → use for sector preference and directional bias
Both share the same pipeline run so they are always in sync.
history_count: include last N prior assessments for each (0-3, default 0)
regime_*: risk posture fields - regime, risk_appetite_score (0-100 re-expression of regime, higher = current conditions support more risk-taking), regime_bias, regime_bias_note (plain sentence on whether current conditions favor long or short setups, or neither), regime_confidence, regime_rationale, key_risks, watch_for, vix_at_assessment, regime_updated_at, regime_stale
macro_score / regime_strength: macro_score is a real, continuous 0-100 read on how much risk the current environment supports (0=RISK_OFF/capital preservation, 100=AGGRESSIVE/risk-on) - the same underlying number
regimebuckets into 4 discrete categories, blending arithmetic inputs (VIX level, breadth oversold/overbought skew, SKEW-vs-VIX divergence, TD-exhaustion ratio) with regime_strength, the AI's own 1-10 read of regime conviction. Distinct from risk_appetite_score (a coarse 4-value lookup onregimealone) - macro_score is the real underlying number. Null on a pre-2026-08-26 assessment that predates this field. Not a call on any one stock.macro_score_trend: {change_7d, change_30d, direction} - whether macro_score itself is improving/deteriorating/stable over the trailing 7/30 days, computed automatically (no history_count needed). A bare 33 doesn't tell you whether the environment is getting worse or just stabilized after a worse reading; this does. Either leg is null without enough history yet.
regime_stale / outlook_stale: true if that assessment is >72h old (the pipeline runs weekdays only, so a normal Fri→Mon gap does not trip this - only a genuinely broken/stuck pipeline does). null if the timestamp itself is missing.
indicators.macro_data: macro data (yield curve, Fed funds, cpi_index, unemployment, M2)
indicators.volatility_term_structure: VIX spot/3M/6M term structure + contango signal
indicators.market_sentiment: Fear & Greed index value and label
market_context: price/RSI/SMA200/perf snapshot of SPY/QQQ/IWM/TLT/GLD/VIX/TNX + sectors NOTE: point-in-time snapshot recorded when AI ran - not live prices (use get_market_pulse for live)
outlook_*: directional fields - outlook, outlook_conviction, equity_view, preferred_sectors, avoided_sectors, catalyst, outlook_key_risk, outlook_rationale, outlook_updated_at, outlook_stale
Pro tier only - AI pipeline cost attached. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| history_count | No | Include the last N prior assessments for each of regime and outlook (0-3, default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_market_moversGet Market MoversRead-onlyIdempotentInspect
Top market movers from the Stocklake universe - gainers, losers, most active.
category: "gainers" | "losers" | "most_active" | "all" (default "all" = all 3 categories)
limit: results per category (default 10, max 20). Each returned stock counts as one call toward your daily limit - a symbol appearing in more than one category (e.g. both "gainers" and "most_active") counts once per category it appears in.
min_market_cap_b: filter to stocks above this market cap in billions of US dollars (e.g. 1.0 = $1B+), compared against market_cap_usd
Returns per stock: symbol, name, sector, price, change_pct, volume, rsi, market_cap (listing currency), market_cap_usd, currency, analyst_rating, atr_pct (atr_pct omitted when the underlying volatility reading is missing or corrupted). Available to all tiers.
Pro tier adds the minimum AI-narrative slice (ai_verdict, ai_headline, ai_score 0-100, ai_score_band) - precomputed, no extra AI cost. A big mover's price/volume/RSI alone doesn't say whether the move matters; the one-line headline does. For the full research bundle on any one mover, call get_stock_research(symbol).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Results per category (default 10, max 20). Each returned stock counts as one call toward your daily limit - a symbol appearing in more than one category (e.g. both "gainers" and "most_active") counts once per category it appears in. | |
| category | No | Which movers category to return: "gainers" | "losers" | "most_active" | "all" (default "all" = all 3 categories). | all |
| min_market_cap_b | No | Filter to stocks above this market cap in billions of US dollars, e.g. 1.0 = $1B+ (compared against market_cap_usd). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_market_pulseGet Market PulseRead-onlyIdempotentInspect
Market health snapshot in a single call. Aggregates key market indicators without requiring multiple tool calls. No AI cost. Index and bond/commodity prices are live; vix, fear_greed and breadth come from the latest market snapshot (see updated_at).
Returns:
vix: VIX level (a number) as of that snapshot
fear_greed: {value (0-100), description ("extreme fear" | "fear" | "neutral" | "greed" | "extreme greed"), last_update}
breadth: market-wide RSI distribution - oversold_pct, overbought_pct, neutral_pct (with their counts), universe_size
indices: spy, qqq, iwm, each {price, change_pct (today, in percent), rsi}
bonds_commodities: tlt (long-duration bonds), gld (gold), same shape as indices
updated_at: when the vix/breadth/fear_greed snapshot was last recorded Available to all tiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_news_feedGet Market News FeedRead-onlyIdempotentInspect
Most notable recent news across all tracked stocks: a market-wide briefing. Unlike get_stock_news (one symbol), this scans every tracked stock and returns articles ranked by signal_score, newest first within each score.
Use this for:
Morning briefing: "what happened in the market this week?"
Catalyst scanning: "what news is driving moves right now?"
Event monitoring: "which stocks have high-impact news today?"
min_signal_score: minimum signal_score (0-100, default 60).
days: look-back window in days (default 3, max 10).
limit: max articles returned (default 10, max 25).
Per article: symbol, title, published_at, ai_sentiment, ai_summary, signal_score (0-100), signal_score_band (Weak/Moderate/Strong/Very Strong).
signal_score is the symbol's current news-based signal score when one was raised in the last 90 days (the same number get_stock_news() and get_signals() report), otherwise a score computed from the article's own classification. It is always a single number.
Articles are published by third parties; titles and summaries describe what those articles say. Requires a Pro account. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (default 3, max 10). | |
| limit | No | Max articles returned (default 10, max 25). | |
| min_signal_score | No | Minimum signal_score, 0-100 (default 60). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_screenerScreen StocksRead-onlyIdempotentInspect
Filter and rank stocks from the Stocklake universe - fundamentals, technicals, and AI signals in one tool.
Parameters:
sector: e.g. "Technology", "Healthcare", "Financial Services"
country: e.g. "United States", "Germany"
min_rsi / max_rsi: exact RSI bounds (e.g. max_rsi=30 = oversold, min_rsi=70 = overbought)
sma_trend: "above_200" (price above 200-day MA) | "below_200"
macd_signal: "positive" (MACD line above signal) | "negative"
min_perf_1d / max_perf_1d: 1-day performance % (e.g. min_perf_1d=2.0 = up 2%+ today)
min_volume: minimum daily volume (e.g. 1000000)
min_market_cap_b / max_market_cap_b: market cap in billions of US dollars, compared against market_cap_usd (stocks with no FX rate for their currency are excluded when either bound is set)
max_pe_forward: maximum forward P/E (e.g. 20 = value screen)
analyst_rating: "strong_buy" | "buy" | "hold" | "sell" | "strong_sell"
min_ai_score: minimum AI score 0-100 (pro tier only - silently ignored for free). Gates on the AI research composite ai_score - same 0-100 scale and bands as signal_score, but a separate score (per-stock AI summary strength, not a directional signal). Renamed 2026-08-24 from the retired 0-10 min_flag_score - the raw flag_score field it used to gate on is no longer part of this fleet's public vocabulary at all (see ai_score below).
preset: "oversold" | "overbought" | "momentum" | "high_conviction" (pro only) oversold = RSI≤35 + above SMA200 · overbought = RSI≥65 momentum = RSI 50-70, above SMA200, up 0.5%+ today · high_conviction = ai_score≥70
sort_by: "market_cap" | "rsi" | "perf_1d" | "volume" | "analyst_rating" | "rating" | "ai_score" (pro). Defaults to "market_cap", except the "high_conviction" preset defaults to "ai_score" (the dimension it's filtering by) unless you explicitly pass a different sort_by.
sort_dir: "asc" | "desc" (default "desc")
limit: 1-25 (default 20). Each returned stock counts as one call toward your daily limit.
Returns: { count, preset, filters, results[] } - each result includes symbol, name, sector, industry, country, price, change_pct, volume, market_cap, market_cap_usd, currency, pe_forward, rsi, macd_signal, sma200_trend, analyst_rating. market_cap is in the listing's own currency (the currency field); market_cap_usd is converted to US dollars and is what the market_cap sort and cap filters use. Pro tier adds rating (0-10 composite score) + ai_verdict + ai_headline + ai_score (0-100) + ai_score_band to every result row (the headline is the "why" - a bare verdict alone isn't enough to act on), enables min_ai_score filter, high_conviction preset, and sorting by rating/ai_score (sort_by silently falls back to market_cap on free/guest for both). All other filters available to all tiers. For the full research bundle on any one result, call get_stock_research(symbol).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return, 1-25 (default 20). Each returned stock counts as one call toward your daily limit. | |
| preset | No | "oversold" | "overbought" | "momentum" | "high_conviction" (pro only). oversold = RSI<=35 + above SMA200; overbought = RSI>=65; momentum = RSI 50-70, above SMA200, up 0.5%+ today; high_conviction = ai_score>=70. | |
| sector | No | Filter by sector, e.g. "Technology", "Healthcare", "Financial Services". | |
| country | No | Filter by country, e.g. "United States", "Germany". | |
| max_rsi | No | Maximum RSI bound (e.g. max_rsi=30 = oversold). | |
| min_rsi | No | Minimum RSI bound (e.g. min_rsi=70 = overbought). | |
| sort_by | No | "market_cap" | "rsi" | "perf_1d" | "volume" | "analyst_rating" | "rating" | "ai_score" (pro). Defaults to "market_cap", except the "high_conviction" preset defaults to "ai_score" (the dimension it's filtering by) unless you explicitly pass a different sort_by. Sorting by rating/ai_score silently falls back to market_cap on free/guest. | |
| sort_dir | No | Sort direction: "asc" | "desc" (default "desc"). | desc |
| sma_trend | No | "above_200" (price above 200-day MA) | "below_200". | |
| min_volume | No | Minimum daily volume, e.g. 1000000. | |
| macd_signal | No | "positive" (MACD line above signal) | "negative". | |
| max_perf_1d | No | Maximum 1-day performance %. | |
| min_perf_1d | No | Minimum 1-day performance %, e.g. min_perf_1d=2.0 = up 2%+ today. | |
| min_ai_score | No | Minimum AI score, 0-100 - pro tier only (silently ignored for free). Gates on the AI research composite ai_score, same 0-100 scale and bands as signal_score but a separate score (per-stock AI summary strength, not a directional signal). | |
| analyst_rating | No | Filter by analyst consensus rating: "strong_buy" | "buy" | "hold" | "sell" | "strong_sell". | |
| max_pe_forward | No | Maximum forward P/E, e.g. 20 for a value screen. | |
| max_market_cap_b | No | Maximum market cap in billions of US dollars (compared against market_cap_usd). | |
| min_market_cap_b | No | Minimum market cap in billions of US dollars (compared against market_cap_usd, so non-USD listings are converted first). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_sector_intelligenceGet Sector IntelligenceRead-onlyIdempotentInspect
AI-assessed sector intelligence: signal, cycle stage, rotation signal, drivers, alerts, and computed statistics per sector (RSI distribution, breadth, performance 1W/1M, top/bottom movers, historical percentiles). Pass a sector name for a single sector, or omit the parameter (or pass None) to get the latest assessment for all 11 sectors - the all-sectors call doubles as the rotation view: use sort_by_strength to rank LEADING-first for finding leading vs lagging sectors, and history_count for prior signal states per sector.
sort_by_strength: sort all-sectors output LEADING→LAGGING instead of alphabetical (all-sectors call only; ignored when a single sector is requested)
history_count: include last N prior signal states per sector, 0-3 (default 0; all-sectors call only)
sector_score / strength_score: sector_score is a real, continuous 0-100 read on this sector's relative strength/leadership (0=LAGGING, 100=LEADING) - the same underlying number
signalbuckets into 5 discrete categories, blending arithmetic inputs (RSI/perf percentiles, top-5 concentration, SMA200 breadth) with strength_score, the AI's own 1-10 read. Comparable across all 11 sectors on one absolute scale (not per-sector-relative). Null on a pre-2026-08-26 assessment that predates this field. Not a buy/sell call.sector_score_trend: {change_7d, change_30d, direction} - whether this sector's score is improving/deteriorating/stable over the trailing 7/30 days, computed automatically. Single-sector calls only - this is the only trend view available for one sector at all (history_count only applies to the all-sectors call). Two sectors both reading STRONG/68 can be in opposite motion; this tells them apart. Either leg is null without enough history yet.
Refreshed ~4x/day, weekdays only, during market hours (~2h apart) - dead overnight and on weekends, not a continuous 4-hourly cadence. Check the returned updated_at before treating this as current, especially on a Monday morning or after a holiday. Available to pro tier only (AI pipeline costs). For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| sector | No | Pass a sector name for a single sector's assessment, or omit (None) to get the latest assessment for all 11 sectors at once - the all-sectors call doubles as the rotation view. | |
| history_count | No | Include the last N prior signal states per sector, 0-3 (default 0). Only applies to the all-sectors call. | |
| sort_by_strength | No | Sort all-sectors output LEADING→LAGGING instead of alphabetical, for finding leading vs lagging sectors. Only applies to the all-sectors call; ignored when a single sector is requested. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_signalsGet SignalsRead-onlyIdempotentInspect
AI-screened stock signals recently surfaced by the Stocklake pipeline - sourced from news analysis, sector screening, and sentiment signals.
Shows what the pipeline noticed in the last 24 hours (falling back to the most recent signals regardless of age if nothing has fired in that window
see
windowin the response). Signals stay listed for their recency window even after they expire.
Parameters:
direction: "POSITIVE" | "NEGATIVE" | "NEUTRAL" (default: all). NEUTRAL covers both a flat/undecided read AND a genuinely two-sided idea (real opposing bull/bear theses on the same symbol) - in the latter case signal_score is the STRONGER of the two sides (see signal_score below), so a high score alongside NEUTRAL means "real conviction here, just no directional consensus," not "nothing going on." The two-sided detail is in
rationale.min_signal_score: minimum composite signal score 0-100 (default 60) - a blend of conviction/confidence/flag_score, source track record, and real technical factors. This is the field to filter on. Always compared against a single number, including for NEUTRAL/two-sided ideas - a result is never returned below your threshold on both sides.
source: filter by signal source - "news" | "screener" | "sentiment" (default: all)
limit: max results to return (default 25, max 50). Each returned signal counts as one call toward your daily limit.
Returns:
count: number of signals returned
window: "24h" (fresh activity found) or a fallback note when the last 24h had nothing and the response instead shows the most recent signals overall
signals[]: each with symbol, direction, signal_score (0-100), signal_score_band (human-readable label - "Weak"/"Moderate"/"Strong"/"Very Strong"), source, rationale, expires, flagged_at
Pro tier only - AI pipeline cost attached. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 25, max 50). Each returned signal counts as one call toward your daily limit. | |
| source | No | Filter by signal source: "news" | "screener" | "sentiment" (default: all). | |
| direction | No | Filter by direction: "POSITIVE" | "NEGATIVE" | "NEUTRAL" (default: all). NEUTRAL covers both a flat/undecided read and a genuinely two-sided idea (see signal_score below). | |
| min_signal_score | No | Minimum composite signal score, 0-100 (default 60) - a blend of conviction/confidence/flag_score, source track record, and real technical factors. This is the field to filter on. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stockGet StockRead-onlyIdempotentInspect
Price, fundamentals, technical indicators, and company profile for a stock. Returns all data needed to understand a stock in a single call.
Key fields:
price, change_pct, prev_close, week52_high/low, volume, avg_volume
market_cap, enterprise_value, beta
pe_trailing, pe_forward, price_to_book, dividend_yield, dividend_rate
debt_to_equity, profit_margins, operating_margins, gross_margins, return_on_equity, free_cashflow
revenue_growth, earnings_growth, revenue_ttm, gross_profit_ttm
analyst_rating: "strong_buy"|"buy"|"hold"|"sell"|"strong_sell" (analyst consensus)
analyst_rating_score: 1.0-5.0 mean analyst recommendation (1=strong_buy, 5=strong_sell)
analyst_target: mean analyst price target
analyst_count: number of analyst opinions
indicators: raw RSI, MACD, Bollinger Bands, SMA20/SMA200 (the canonical 50/200-day averages -- no separate top-level ma_50/ma_200 field), EMA20/EMA200, ATR
description: company business description
website, employees, officers (top 5: name, title, total_pay)
updated_at: last data sync timestamp Available to all tiers (raw indicator numbers, no interpretation). This basic six (RSI/MACD/Bollinger/SMA/EMA/ATR) is standard, widely-available technical analysis.
Pro tier also unlocks the specialized indicators inside the SAME indicators block:
williams_r, ultimate_osc, vix_fix, williams_ad (the Larry Williams family),
td_sequential (DeMark), elliott_wave, adx {adx, plus_di, minus_di}, ichimoku
{tenkan, kijun, cloud_top, cloud_bot, above_cloud, below_cloud}, squeeze
{squeeze_on, hist}, and rs_rank (relative-strength rank 1-99, stocks only: the past
year's return with the latest quarter counted double, ranked against every tracked
stock; 99 = strongest; absent with under a year of history). These are omitted
entirely from the free/guest response, not merely unlabeled; free/guest calls get
indicators with only the basic six populated.
Pro tier adds four interpreted blocks computed from the same indicators, no extra AI cost, plus a minimum AI-narrative slice - all five below are precomputed, none cost a live AI call:
ai_verdict / ai_headline / ai_score / ai_score_band: the minimum useful AI-narrative slice, shared by every pro-tier stock-returning tool. A bare verdict alone isn't actionable (e.g. bearish while up 8% on the day with a strong_buy analyst rating is genuinely ambiguous) - the one-line headline is the "why", ai_score is the 0-100 composite (same scale/band convention as get_signals' signal_score, distinct pipeline). For the full text (summary/key_points/risks/near_term/longer_term) and cross-source news/insider context, call get_stock_research(symbol) instead - that's the only tool with the complete bundle.
ai_score (0-100) / ai_score_band (Weak/Moderate/Strong/Very Strong): the AI research composite score, on the same 0-100 scale and band boundaries as get_signals()'s signal_score - but a separate score, never the same number for the same symbol by coincidence alone.
rating: {score 0-10, direction POSITIVE/NEUTRAL/NEGATIVE, signals per-indicator breakdown}
composite technical score
signals: flat labeled signals (rsi/macd/bollinger/sma200/sma50/williams_r/ultimate_osc/ vix_fix/williams_ad/td_sequential/elliott_wave, each with a value + plain-English label)
same indicators as 'indicators', pre-interpreted for programmatic use without parsing raw numbers
stance_signals: unified list of per-source directional calls (technical rating, AI summary near_term/longer_term, insider/institutional sentiment, analyst consensus, active screener signals) - each entry {stance POSITIVE/NEGATIVE/NEUTRAL, conviction 0-10, horizon INTRADAY/SWING/POSITION/LONG_TERM, edge_quality PROVEN/OBSERVATION/UNKNOWN (per-source signal_backtest track record), source, raw_label, as_of}. Same canonical shape used on the stock detail page - a source with missing/stale data is simply omitted, not nulled out.
relative_strength: {windows: {5d/20d/60d/120d/12m -> {stock_return_pct, rs_vs_spy, rs_vs_qqq, rs_vs_sector}}, verdict: one-line plain-language read (e.g. "Laggard - weak near- and long-term")}
stock's own return minus each benchmark's return (percentage points, not a ratio) per window. rs_vs_sector uses the stock's GICS sector SPDR ETF (Vanguard backup if the primary lacks history); omitted for stocks with no resolvable sector (crypto, FX, indices). Windows/ benchmarks with insufficient history are omitted rather than null. null if not precomputed yet.
market_risk: {beta_spy_1y, corr_spy_1y} - 1-year daily-return beta and correlation vs SPY. Distinct from quote.beta (a longer-window beta) - this is computed from the same daily bars as relative_strength. Both fields null if not yet precomputed for this symbol (populates on the next scheduled indicators run).
forensic_scores: {altman_z, piotroski_f, beneish_m, computed_at} - three classic forensic- accounting formulas (Altman 1968 bankruptcy-risk, Piotroski 2000 fundamental-strength, Beneish 1999 earnings-manipulation-likelihood), computed from balance sheet/income statement/cash flow data, refreshed on each company's own filing cadence (roughly annual). Each sub-block is {score, note, ...} - altman_z adds
zone(safe/grey/distress), piotroski_f addsstrength(strong/moderate/weak, 0-9 scale), beneish_m addslikely_manipulator(bool, score > -1.78).noteexplains what the score measures and its known caveats (e.g. Altman Z is not meaningful for banks/insurers and can flag REITs/ client-float businesses as "distress" by design) - always read alongside the score, not in isolation.score: nullmeans genuinely not computable for this company (common for financial-sector names), not an error. No trading signal is derived from these scores anywhere in this API today - treat as raw accounting-model output for your own research.sector_context: where this stock's fundamentals sit versus the other tracked equities in its own sector - {sector, revenue_growth, gross_margin, operating_margin, as_of}, each metric {value, sector_median, percentile 0-100, n}. Purely descriptive positioning (e.g. "revenue growth is in the 80th percentile of its sector"), no interpretation or direction. A metric is omitted when the stock has no value for it or the sector has fewer than 15 peers with data; the whole block is omitted when nothing is computable. Baseline refreshed daily; sectors are pooled globally across all tracked equities. get_stock also returns
trend: {period: "quarterly", points: [{period_end, revenue_growth / gross_margin / operating_margin: {value, sector_median, n}}]}, oldest first - the same three metrics for the last few quarters (revenue_growth is year-over-year) beside the sector median for each quarter, so you can see whether the stock is gaining or losing ground on its peers. Off-cycle fiscal quarters are matched to the nearest calendar quarter. A quarter or metric is left out where either side lacks data. get_stocks omitstrendto keep batch rows small.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback (e.g. "Apple") when it uniquely resolves to one symbol. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stock_financialsGet Stock FinancialsRead-onlyIdempotentInspect
Raw financial statements - balance sheet, income statement, and cash flow line items. This is the underlying statement data itself, not a derived summary - for the forensic-accounting scores computed FROM these statements (Altman Z / Piotroski F / Beneish M), see get_stock()'s forensic_scores block instead.
Each returned statement is shaped {line_item_name: {period_end_iso: value}}
e.g. income_stmt["Total Revenue"]["2025-12-31"] - so a caller can compute its own trends/deltas/CAGRs, not just read the latest value. Values are in the company's reporting currency (financial_currency).
Tiers:
Free and guest: the LATEST fiscal year only. Every line item's {period_end: value} map has one entry and
periodslists one date. All three statements and thestatementfilter work. period= "quarterly"/"both" returns that latest annual year with quarterly=null plus apro_unlocksnote (not an error).annual_periods_availablesays how many years Pro would return.Pro: period="annual" (default) returns up to 5 fiscal years; some symbols return fewer. period="quarterly" returns up to roughly 7-8 of the most recent quarters. period="both" returns both blocks in one call.
~50-60 curated line items per statement (not a raw dump of every reported row): balance sheet structure (assets/liabilities/equity/debt/ working capital), income statement (revenue through EPS), and cash flow (operating/investing/financing, free cash flow, buybacks, stock-based comp). Coverage genuinely varies by symbol and sector - a bank has no "Inventory" line, a company with no buyback program has no "Repurchase Of Capital Stock" entry. A missing line item means it is not reported for this company, not a fetch error.
quarterly can come back null (with a quarterly_note) for a symbol whose real quarterly data isn't available. annual/quarterly can both be entirely absent (with a note) if this symbol hasn't yet been through the financials sync, or if it's not an equity (no data for ETFs/crypto/ forex/indices) - these states read the same for every tier.
For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | 'annual' (default; Pro: up to 5 fiscal years, free: the latest fiscal year), 'quarterly' (Pro: up to ~7-8 most recent quarters), or 'both' (Pro). Free/guest asking for 'quarterly' or 'both' gets the latest annual year plus a pro_unlocks note, not an error. | annual |
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol. | |
| statement | No | 'all' (default), 'balance_sheet', 'income_stmt', or 'cash_flow' - restricts which statement(s) are returned. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stock_historyGet Stock Price HistoryRead-onlyIdempotentInspect
Daily OHLCV price history for a stock.
days: number of trading days to return (default 90). Guest/free: max 365. Pro: full history, up to 20,000 trading days (most established names go back decades; a full pull can be ~10,000+ bars, so request only what you need).
Returns: { symbol, days_requested, days_returned, count, history[], history_available: { bars, earliest_date } } - days_returned/count can be less than days_requested if less history exists. When a guest/free caller asks for more than 365 days the response is capped at 365 and carries a
pro_unlocksnote saying what Pro adds.Per bar: date, open, high, low, close, volume
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of trading days of daily OHLCV history to return (default 90). Max 365 for guest and free; Pro can request the full history (up to 20,000 trading days). A full-history call can be ~10,000+ bars - prefer a narrower window unless you need it all. days_returned/count in the response can be less than this if less history exists. | |
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stock_newsGet Stock NewsRead-onlyIdempotentInspect
Recent news articles for one stock, newest first.
symbol: ticker, e.g. "AAPL" or "SAP.DE".
days: look-back window in days. Values above the account's maximum are lowered to it (30 or 90 days, depending on the account).
limit: max articles returned. Values above the account's maximum are lowered to it (5 or 50 articles, depending on the account).
status: "ok" = articles returned | "empty" = no news in the window.
Per article: title, published_at. Depending on the account, also ai_sentiment, ai_summary, signal_score (0-100 or null) and signal_score_band ("Weak"/"Moderate"/"Strong"/"Very Strong" or null).
signal_score is the same number get_signals() and get_stock_research() report for this symbol when a news-based signal was raised in the last 90 days; otherwise it is computed per article from that article's own classification. It is always a single number.
Articles are published by third parties; titles and summaries describe what those articles say. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (default 30). Values above the account's maximum (30 or 90) are lowered to it. | |
| limit | No | Max articles returned (default 10). Values above the account's maximum (5 or 50) are lowered to it. | |
| symbol | Yes | Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stock_researchGet Stock ResearchRead-onlyIdempotentInspect
Full AI research bundle for a stock in one call - fundamentals, AI-generated summary, recent AI-classified news, insider/institutional signal, and recent trade signal history. Replaces 4 separate calls: get_stock + get_stock_news + get_insider_activity + get_signals (for one symbol).
Returns:
stock: price, name, sector, rsi, pe_forward, market_cap, 52-week range, analyst data
ai_summary: verdict, ai_score (0-100)/ai_score_band (Weak/Moderate/Strong/ Very Strong - the AI research composite, same scale and bands as signal_score but a separate score), full summary, key_points, risks, price_at_generation, generated_at, headline (one-sentence plain-language take), near_term (stance/confidence over <4 weeks - technicals/momentum-weighted), longer_term (stance/confidence over a multi-month horizon - fundamentals/analyst/institutional-flow-weighted). headline/near_term/longer_term are null on summaries generated before this schema shipped - until that symbol's next regeneration, fall back to verdict/ai_score.
news: last 3 high-relevance articles (title, published_at, ai_sentiment, ai_summary, signal_score [0-100]/signal_score_band - this symbol's LIVE news-sourced signal score if one exists in the last 90 days [same number as the
signalslist below and get_signals()/get_stock_news(), kept in sync as it's re-scored], else a per-article magnitude computed from that article's own classification. One name, no separate "news_score" field.)sentiment: signal, signal_score (0-100)/signal_score_band - one name, no separate "insider_score" field, same as the news block above - insider_trend (buying/selling/neutral, or null with no transactions in the window), institutional_pct
signals[]: up to the 5 most recent trade signals for this symbol in the last 90 days (direction, rationale, signal_score [0-100], signal_score_band [human-readable label - "Weak"/"Moderate"/"Strong"/"Very Strong" - or null alongside a null signal_score], source, expires, flagged_at). Empty if nothing in that window. Signals stay listed for the full window even after they expire.
forensic_scores: {altman_z, piotroski_f, beneish_m, computed_at} - three classic forensic-accounting formulas (Z-Score bankruptcy risk / F-Score fundamental quality / M-Score earnings-manipulation risk), computed from
stocks.financials(GH #107). Omitted entirely if this symbol has no forensic_scores doc yet - not every symbol qualifies (financial-sector companies mostly return null on all three by construction, see the field's own note text). A withheld individual score always surfaces as {"score": null, "note": ""} - never a bare 0, never silently dropped from its own sub-block. Same shape get_stock()/get_stocks() already return.
All data is pre-computed by the Stocklake AI pipeline - no live AI calls on request. Pro tier only. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Stock ticker symbol to fetch the full AI research bundle for. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_stocksGet Multiple StocksRead-onlyIdempotentInspect
Batch stock data for up to 25 symbols in a single call - the same fields get_stock returns for the same key/symbol, so this is a true batch version, not a thinned-down scan. Returns a dict keyed by symbol. Missing symbols are omitted from the result. Each symbol in the batch counts as one call toward the daily limit. A request over 25 symbols is rejected outright (error: batch_too_large) rather than silently served on just the first 25 - split a larger list into multiple calls. Available to all tiers (fundamentals/indicators/company profile, free).
Pro tier adds, per symbol, the same precomputed blocks get_stock adds - rating {score, direction, signals}, signals (per-indicator breakdown), relative_strength, market_risk {beta_spy_1y, corr_spy_1y}, sector_context (revenue growth/margins vs sector median - see get_stock), and the minimum AI-narrative slice (ai_verdict, ai_headline, ai_score, ai_score_band). None of this costs a live AI call - it's all precomputed and just needs projecting.
NOT included, even on pro - call get_stock(symbol) for stance_signals, or get_stock_research(symbol) for the full ai_summary text (summary/key_points/ risks/near_term/longer_term) plus cross-source news/insider/signal context.
Response also carries duplicates_collapsed: how many input symbols
normalized (case-folding, share-class aliasing e.g. "BRK.B"->"BRK-B") or
literally repeated onto a symbol already counted elsewhere in this batch.
requested - len(missing or []) - duplicates_collapsed == count always holds.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | List of stock ticker symbols, up to 25 per call. Each symbol counts as one call toward the daily limit. A request over 25 symbols is rejected outright (error: batch_too_large) rather than silently served on just the first 25 - split a larger list into multiple calls. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_watchlistGet WatchlistRead-onlyIdempotentInspect
The caller's Stocklake watchlist (starred symbols from the web dashboard), enriched with live price, technicals, and AI verdict.
Returns:
count: number of symbols on the watchlist
items[]: each with symbol, name, sector, price, change_pct, rsi, market_cap, analyst_rating, atr_pct, ai_verdict, ai_headline, ai_score (0-100), ai_score_band (Weak/Moderate/Strong/Very Strong), added_at, price_at_add
empty items[] if nothing is starred yet - star symbols at stocklake.dev/dashboard
Pro tier only. For informational purposes only. Not financial advice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
get_signals2 fields changed- removed
Input schema / properties / min_convictionRemoved value: -{ - "default": 7, - "description": "DEPRECATED, ignored for filtering — kept in the signature only so existing callers don't hard-fail; internal scoring retired the raw conviction/confidence/flag_score triad in favor of signal_score. Passing a non-default value here has no effect and is logged for a planned removal.", - "type": "integer" -} - removed
Input schema / properties / min_flag_scoreRemoved value: -{ - "default": 8, - "description": "DEPRECATED, ignored for filtering — kept in the signature only so existing callers don't hard-fail; internal scoring retired the raw conviction/confidence/flag_score triad in favor of signal_score. Passing a non-default value here has no effect and is logged for a planned removal.", - "type": "integer" -}
2 tool updates
- Changed
get_market_movers1 field changed- changed
Input schema / properties / min_market_cap_b / descriptionPrevious value: -"Filter to stocks above this market cap in billions of dollars, e.g. 1.0 = $1B+."New value: +"Filter to stocks above this market cap in billions of US dollars, e.g. 1.0 = $1B+ (compared against market_cap_usd)."
- Changed
get_screener2 fields changed- changed
Input schema / properties / max_market_cap_b / descriptionPrevious value: -"Maximum market cap in billions of dollars."New value: +"Maximum market cap in billions of US dollars (compared against market_cap_usd)." - changed
Input schema / properties / min_market_cap_b / descriptionPrevious value: -"Minimum market cap in billions of dollars."New value: +"Minimum market cap in billions of US dollars (compared against market_cap_usd, so non-USD listings are converted first)."
1 tool update
- Changed
get_signals1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Filter by signal source: \"news\" | \"screener\" | \"sentiment\" | \"social\" (default: all)."New value: +"Filter by signal source: \"news\" | \"screener\" | \"sentiment\" (default: all)."
1 tool update
- Added
get_stock_financials
3 tool updates
- Added
get_economic_calendar - Changed
get_indicator_history1 field changed- added
Input schema / properties / fullAdded value: +{ + "default": false, + "description": "False (default) returns only recorded_at/price/rsi/macd_histogram/bb_pct/sma20/sma200 per day — enough for most charting/trend use. True adds the specialized indicators (williams_r, ultimate_osc, vix_fix_value, williams_ad_trend, td_signal, td_phase) plus analyst_rating/analyst_target, which barely change day to day and roughly double response size over a long window.", + "type": "boolean" +}
- Changed
get_signals2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -50New value: +25 - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results to return (default 50, max 50). Each returned signal counts as one call toward your daily limit."New value: +"Max results to return (default 25, max 50). Each returned signal counts as one call toward your daily limit."
2 tool updates
- Changed
get_news_feed1 field changed- changed
Input schema / properties / min_signal_score / descriptionPrevious value: -"Minimum news_score used to SELECT articles server-side, 0-100 (default 60) — same 0-100 scale/bands as signal_score. Resolved per-article (stored value preferred, computed via the sentiment/confidence/flag_score fallback formula otherwise) since news_score is stored on only a fraction of articles today."New value: +"Minimum signal_score used to SELECT articles server-side, 0-100 (default 60). Resolved per-article (this symbol's live signal_score if one exists, else a per-article magnitude computed from sentiment/confidence/flag_score) since a live signal doesn't exist for every article."
- Changed
get_signals1 field changed- changed
Input schema / properties / direction / descriptionPrevious value: -"Filter by direction: \"POSITIVE\" | \"NEGATIVE\" | \"MIXED\" (default: all)."New value: +"Filter by direction: \"POSITIVE\" | \"NEGATIVE\" | \"NEUTRAL\" (default: all). NEUTRAL covers both a flat/undecided read and a genuinely two-sided idea (see signal_score below)."
15 tool updates
- Changed
get_earnings_calendar1 field changed- added
Input schema / properties / days / descriptionAdded value: +"Look-ahead window in days (default 7, max 30)."
- Changed
get_earnings_intelligence4 fields changed- added
Input schema / properties / days_ahead / descriptionAdded value: +"Look-ahead window in days (default 14, max 30)." - added
Input schema / properties / limit / descriptionAdded value: +"Max results to return (default 25, max 25). Each returned ticker counts as one call toward your daily limit." - added
Input schema / properties / min_ai_score / descriptionAdded value: +"Only return stocks with AI score >= this value, 0-100 (optional). Renamed 2026-08-24 from the retired 0-10 min_flag_score — gates on the same stock_ai_summary.py ai_score field the response already returns. Applied server-side before limit truncates the result, so a qualifying stock always counts against limit ahead of one without." - added
Input schema / properties / sector / descriptionAdded value: +"Filter to one sector, e.g. \"Technology\"."
- Changed
get_indicator_history2 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Number of days of historical daily indicator snapshots to return (max 730, default 90). Returns {} if fewer than 3 snapshots are found in the window." - added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol."
- Changed
get_insider_activity1 field changed- added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol to fetch insider (SEC Form 4) and institutional-holdings activity for."
- Changed
get_market_assessment1 field changed- added
Input schema / properties / history_count / descriptionAdded value: +"Include the last N prior assessments for each of regime and outlook (0-3, default 0)."
- Changed
get_market_movers3 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Which movers category to return: \"gainers\" | \"losers\" | \"most_active\" | \"all\" (default \"all\" = all 3 categories)." - added
Input schema / properties / limit / descriptionAdded value: +"Results per category (default 10, max 20). Each returned stock counts as one call toward your daily limit — a symbol appearing in more than one category (e.g. both \"gainers\" and \"most_active\") counts once per category it appears in." - added
Input schema / properties / min_market_cap_b / descriptionAdded value: +"Filter to stocks above this market cap in billions of dollars, e.g. 1.0 = $1B+."
- Changed
get_news_feed3 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Look-back window in days (default 3, max 10)." - added
Input schema / properties / limit / descriptionAdded value: +"Max articles returned (default 10, max 25)." - added
Input schema / properties / min_signal_score / descriptionAdded value: +"Minimum news_score used to SELECT articles server-side, 0-100 (default 60) — same 0-100 scale/bands as signal_score. Resolved per-article (stored value preferred, computed via the sentiment/confidence/flag_score fallback formula otherwise) since news_score is stored on only a fraction of articles today."
- Changed
get_screener18 fields changed- added
Input schema / properties / analyst_rating / descriptionAdded value: +"Filter by analyst consensus rating: \"strong_buy\" | \"buy\" | \"hold\" | \"sell\" | \"strong_sell\"." - added
Input schema / properties / country / descriptionAdded value: +"Filter by country, e.g. \"United States\", \"Germany\"." - added
Input schema / properties / limit / descriptionAdded value: +"Max results to return, 1-25 (default 20). Each returned stock counts as one call toward your daily limit." - added
Input schema / properties / macd_signal / descriptionAdded value: +"\"positive\" (MACD line above signal) | \"negative\"." - added
Input schema / properties / max_market_cap_b / descriptionAdded value: +"Maximum market cap in billions of dollars." - added
Input schema / properties / max_pe_forward / descriptionAdded value: +"Maximum forward P/E, e.g. 20 for a value screen." - added
Input schema / properties / max_perf_1d / descriptionAdded value: +"Maximum 1-day performance %." - added
Input schema / properties / max_rsi / descriptionAdded value: +"Maximum RSI bound (e.g. max_rsi=30 = oversold)." - added
Input schema / properties / min_ai_score / descriptionAdded value: +"Minimum AI score, 0-100 — pro tier only (silently ignored for free). Gates on stock_ai_summary.py's own composite ai_score, same 0-100 scale/band convention as signals.signal_score but a distinct field/pipeline (per-stock AI summary confidence, not a directional trade idea). Renamed 2026-08-24 from the retired 0-10 min_flag_score." - added
Input schema / properties / min_market_cap_b / descriptionAdded value: +"Minimum market cap in billions of dollars." - added
Input schema / properties / min_perf_1d / descriptionAdded value: +"Minimum 1-day performance %, e.g. min_perf_1d=2.0 = up 2%+ today." - added
Input schema / properties / min_rsi / descriptionAdded value: +"Minimum RSI bound (e.g. min_rsi=70 = overbought)." - added
Input schema / properties / min_volume / descriptionAdded value: +"Minimum daily volume, e.g. 1000000." - added
Input schema / properties / preset / descriptionAdded value: +"\"oversold\" | \"overbought\" | \"momentum\" | \"high_conviction\" (pro only). oversold = RSI<=35 + above SMA200; overbought = RSI>=65; momentum = RSI 50-70, above SMA200, up 0.5%+ today; high_conviction = ai_score>=70." - added
Input schema / properties / sector / descriptionAdded value: +"Filter by sector, e.g. \"Technology\", \"Healthcare\", \"Financial Services\"." - added
Input schema / properties / sma_trend / descriptionAdded value: +"\"above_200\" (price above 200-day MA) | \"below_200\"." - added
Input schema / properties / sort_by / descriptionAdded value: +"\"market_cap\" | \"rsi\" | \"perf_1d\" | \"volume\" | \"analyst_rating\" | \"rating\" | \"ai_score\" (pro). Defaults to \"market_cap\", except the \"high_conviction\" preset defaults to \"ai_score\" (the dimension it's filtering by) unless you explicitly pass a different sort_by. Sorting by rating/ai_score silently falls back to market_cap on free/guest." - added
Input schema / properties / sort_dir / descriptionAdded value: +"Sort direction: \"asc\" | \"desc\" (default \"desc\")."
- Changed
get_sector_intelligence3 fields changed- added
Input schema / properties / history_count / descriptionAdded value: +"Include the last N prior signal states per sector, 0-3 (default 0). Only applies to the all-sectors call." - added
Input schema / properties / sector / descriptionAdded value: +"Pass a sector name for a single sector's assessment, or omit (None) to get the latest assessment for all 11 sectors at once — the all-sectors call doubles as the rotation view." - added
Input schema / properties / sort_by_strength / descriptionAdded value: +"Sort all-sectors output LEADING→LAGGING instead of alphabetical, for finding leading vs lagging sectors. Only applies to the all-sectors call; ignored when a single sector is requested."
- Changed
get_signals6 fields changed- added
Input schema / properties / direction / descriptionAdded value: +"Filter by direction: \"POSITIVE\" | \"NEGATIVE\" | \"MIXED\" (default: all)." - added
Input schema / properties / limit / descriptionAdded value: +"Max results to return (default 50, max 50). Each returned signal counts as one call toward your daily limit." - added
Input schema / properties / min_conviction / descriptionAdded value: +"DEPRECATED, ignored for filtering — kept in the signature only so existing callers don't hard-fail; internal scoring retired the raw conviction/confidence/flag_score triad in favor of signal_score. Passing a non-default value here has no effect and is logged for a planned removal." - added
Input schema / properties / min_flag_score / descriptionAdded value: +"DEPRECATED, ignored for filtering — kept in the signature only so existing callers don't hard-fail; internal scoring retired the raw conviction/confidence/flag_score triad in favor of signal_score. Passing a non-default value here has no effect and is logged for a planned removal." - added
Input schema / properties / min_signal_score / descriptionAdded value: +"Minimum composite signal score, 0-100 (default 60) — a blend of conviction/confidence/flag_score, source track record, and real technical factors. This is the field to filter on." - added
Input schema / properties / source / descriptionAdded value: +"Filter by signal source: \"news\" | \"screener\" | \"sentiment\" | \"social\" (default: all)."
- Changed
get_stock1 field changed- added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol. Also accepts a company name as a fallback (e.g. \"Apple\") when it uniquely resolves to one symbol."
- Changed
get_stock_history2 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Number of trading days of daily OHLCV history to return (default 90, max 365). days_returned/count in the response can be less than this if less history exists." - added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol."
- Changed
get_stock_news3 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Look-back window in days. Requesting more than your tier's cap is silently clamped down to it: 30 free/guest, 90 pro." - added
Input schema / properties / limit / descriptionAdded value: +"Max articles returned. Default 10 is a Pro-tier-shaped value — on free/guest it's silently clamped down to that tier's cap (5), so a free caller passing no limit effectively gets 5, not 10. Requesting more than your tier's cap (5 free/guest, 50 pro) is likewise clamped down." - added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol."
- Changed
get_stock_research1 field changed- added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker symbol to fetch the full AI research bundle for."
- Changed
get_stocks1 field changed- added
Input schema / properties / symbols / descriptionAdded value: +"List of stock ticker symbols, up to 25 per call. Each symbol counts as one call toward the daily limit. A request over 25 symbols is rejected outright (error: batch_too_large) rather than silently served on just the first 25 — split a larger list into multiple calls."
4 tool updates
- Changed
get_earnings_intelligence2 fields changed- added
Input schema / properties / min_ai_scoreAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / min_flag_scoreRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -}
- Changed
get_news_feed2 fields changed- removed
Input schema / properties / min_flag_scoreRemoved value: -{ - "default": 8, - "type": "integer" -} - added
Input schema / properties / min_signal_scoreAdded value: +{ + "default": 60, + "type": "integer" +}
- Changed
get_screener2 fields changed- added
Input schema / properties / min_ai_scoreAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / min_flag_scoreRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null -}
- Changed
get_signals2 fields changed- changed
Input schema / properties / limit / defaultPrevious value: -25New value: +50 - added
Input schema / properties / min_signal_scoreAdded value: +{ + "default": 60, + "type": "integer" +}
Related MCP Connectors
Stock market data for AI agents: real-time quotes, financials, options, SEC filings and news.
Financial intelligence for AI agents: market events, sentiment, technicals, news feed.
Explainable model signals, drivers, news sentiment, SEC filings and macro data for US stocks.
Signals, technicals, regime and news for 1,000+ US/TR symbols. Data only, not investment advice.
Related MCP Servers
- AlicenseAqualityAmaintenancePre-computed financial market intelligence for AI agents. Stocks, crypto, and ETFs.978 npm5MIT
- AlicenseNot gradedqualityFmaintenanceProvides derived financial intelligence for AI agents, including insider activity analysis, earnings surprises, institutional moves, stock screening with a proprietary composite value score, and macro indicators.MIT
- AlicenseAqualityAmaintenanceInstitutional-grade quantitative stock analysis and research signals for AI agents via the Model Context Protocol (MCP).9114 PyPI1MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to analyze stocks and get scored BUY/HOLD/SELL assessments with technical and fundamental data for Indian (NSE/BSE) and US markets.-
Glama MCP Gateway
Add one secure layer between your agents and this server.