Skip to main content
Glama

Stocklake — AI Stock Intelligence

Server Details

AI stock intelligence: prices, fundamentals, technicals, news, macro regime, and sector signals.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Tool DescriptionsA

Average 4.5/5 across 17 of 17 tools scored. Lowest: 3.9/5.

Server CoherenceA
Disambiguation4/5

Most tools carve out clearly distinct jobs: per-stock quotes, batch quotes, earnings calendars, market pulse, news, signals, screener, watchlist. A few pairs—notably get_stock vs get_stocks and get_market_assessment vs get_market_pulse—are close enough that an agent would need to read descriptions carefully to pick the right one.

Naming Consistency5/5

All tool names follow a uniform get_<snake_case_noun> pattern with no mixed conventions. The singular/plural pair get_stock and get_stocks is a deliberate batch-version distinction rather than an inconsistency, and compounds like earnings_intelligence vs market_assessment remain predictable.

Tool Count4/5

With 17 tools, the server is slightly over the ideal 3-15 range, but the count is well-justified by the breadth of the stock-intelligence domain: per-stock, batch, historical, market-level, earnings, insider, news, signals, screeners, and watchlists all have a dedicated entry point. It is a larger surface area than ideal, but none of the tools feel redundant or purely decorative.

Completeness4/5

The tool surface gives agents full read-oriented workflows: single-stock data, batch lookups, historical prices, indicator history, news, research bundles, insider activity, market health, earnings, signals, movers, sector intelligence, and screening all exist. The main gap is discovery—there is no symbol/name search tool beyond the screener category filters, and historical earnings-surprise data is absent—but agents can work around both via existing tools.

Available Tools

17 tools
get_earnings_calendarGet Earnings CalendarA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-ahead window in days (default 7, max 30).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal read-only and idempotent behavior, and the description adds meaningful operational context: results are sorted by earnings_date ascending, and is_estimate=true dates should be treated as approximate due to market data sourcing. This goes beyond the annotations and helps the agent interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly organized as a bullet-point spec with the core purpose first, followed by parameter and return details. Every line adds useful information, and there is no filler or redundant fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the parameter, the exact return envelope, field meanings, sorting order, and the reliability caveat for estimated dates. It also mentions availability. Given the provided output schema and annotations, nothing important is missing for an agent to invoke this tool and interpret its response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes days fully, including its default and maximum, so the description adds little to parameter understanding. The description repeats the same semantics rather than enriching beyond the JSON Schema. A baseline 3 is appropriate because schema coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool returns: 'Upcoming earnings dates for stocks in the Stocklake universe.' It adds a detailed return shape, making the resource and outcome unambiguous. This clearly distinguishes it from the sibling get_earnings_intelligence, which sounds like analysis rather than a date calendar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context for when to use this tool: any time an agent needs upcoming earnings dates within a configurable look-ahead window. The days parameter is explained with defaults and limits. It does not explicitly name alternatives or state when-not-to-use, so it misses the 5-grade bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_earnings_intelligenceGet Earnings IntelligenceA
Read-onlyIdempotent
Inspect

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). 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, rather than the raw legacy flag_score field, which is no longer part of this fleet's public vocabulary at all. Applied server-side before limit truncates the result — a stock with a qualifying score always counts against limit ahead 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) — stock_ai_summary.py's own composite score, same 0-100 scale/band convention as signals.signal_score but a distinct field/pipeline; null if this stock has no ai_summary doc 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 25, max 25). Each returned ticker counts as one call toward your daily limit.
sectorNoFilter to one sector, e.g. "Technology".
days_aheadNoLook-ahead window in days (default 14, max 30).
min_ai_scoreNoOnly 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only and idempotent; the description goes further by explaining server-side filtering before truncation, per-result call counting against rate limits, Pro-tier availability, null behavior when no AI summary exists, sorting order, and the non-financial-advice disclaimer. This is rich behavior disclosure beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose and then uses structured sections for parameters and return values. It is somewhat long and partially duplicates schema parameter descriptions, but every section contributes useful information and no filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description covers defaults, max values, filtering behavior, output content, sorting, disclaimer, rate-limit accounting, and tier requirements. An AI agent has enough context to call and interpret results correctly, especially with the output schema also available.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries the core parameter definitions. The description still adds meaningful context beyond the schema for min_ai_score, including the legacy min_flag_score rename, the precise field it gates on, and the ordering nuance between filter application and limit truncation. Most other parameters are redundant with the schema, so a 5 is not warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: it combines the earnings calendar with AI pipeline data to surface upcoming earnings events with AI scores, verdicts, and risk factors. This distinguishes it from the raw get_earnings_calendar sibling and makes the resource and value proposition explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when an agent needs AI-contextualized earnings, such as scores, verdicts, and risk factors, rather than a plain earnings calendar. It does not explicitly name alternatives or say when not to use it, but the context is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_indicator_historyGet Indicator HistoryA
Read-onlyIdempotent
Inspect

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.

Each 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

  • 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 signal (BUY_SETUP/SELL_SETUP/BUY_COUNTDOWN/SELL_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days of historical daily indicator snapshots to return (max 730, default 90). Returns {} if fewer than 3 snapshots are found in the window.
symbolYesStock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, and the description substantially adds context: maximum/default days, empty-result behavior, that data comes from a daily pipeline, and Pro-tier restriction. Each row's field semantics are explained, which goes well beyond what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The structure is logical and front-loaded: purpose first, data-window and sourcing second, then a row-level column reference. The bulk of the length is a compact field list with inline interpretation, which is genuinely useful for an agent interpreting output rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool of this complexity with 15+ indicator fields, the description covers purpose, data source, window semantics, empty-result behavior, output field meanings, Pro-tier restriction, and a disclaimer. Combined with a 100%-coverage schema and output schema, nothing an agent needs to call or interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by explaining the meaning and behavior around the `days` parameter (default, max, and the empty-result rule) and by clarifying that `symbol` also accepts a company-name fallback. The field-level breakdown is output semantics, yet it helps an agent reason about which parameters affect the result.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Historical daily indicator snapshots for a stock') and an explicit use case ('ideal for charting and trend detection'). It clearly separates this tool from price-history siblings by emphasizing indicator snapshots, and lists a rich set of indicators so an agent knows exactly what to expect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when it is appropriate ('Historical daily indicator snapshots for a stock — ideal for charting and trend detection') and sets expectations around the date window and data population. It does not explicitly name which sibling tool to use for simple price history, so it does not fully reach a 5 on exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_insider_activityGet Insider ActivityA
Read-onlyIdempotent
Inspect

Get AI-synthesized insider + institutional activity for a stock. Returns combined 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, no separate name) with signal_score_band, per-source breakdown, and a human-readable summary. Data covers insider transactions (SEC Form 4/BaFin/AFM/CNMV, with a gap-fill from Yahoo where the regulatory source has nothing) and institutional holdings — insider_buys/insider_sells, transactions (the individual rows behind those counts, newest first, up to 50, each with date/name/role/type/shares/price/value), 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, useful for spotting a false merge: two genuinely different holders should never collide, but if they did, their per-source counts would diverge wildly), 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; distinct from an ordinary two-holder mismatch, which is normal data lag and stays unflagged), inst_ownership (0-100%), and total_holders. Note: summary is a separately-generated narrative on its own refresh cadence and may not always match the live insider_buys/insider_sells/transactions counts — trust the counts/transactions over the prose if they disagree. Pro tier only — AI pipeline cost attached. For informational purposes only. Not financial advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol to fetch insider (SEC Form 4) and institutional-holdings activity for.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnly/idempotent/destructive annotations. It discloses source gap-fill behavior, the merged top_holders semantics and false-merge detection, the special meaning of holder_count_divergence, and that the summary narrative runs on a separate cadence and may disagree with live counts. These are exactly the non-obvious behavioral traits an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and long, but nearly every sentence adds unique operational or interpretation detail that justifies its length. It is front-loaded with the core purpose and signal semantics. It could be improved with clearer paragraph or bullet separation, but it is not padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema, the description explains the nuanced parts of the response that a schema alone cannot: source merging, the systemic-multiplier condition behind holder_count_divergence, and the trust hierarchy when summary disagrees with counts. It also flags Pro-tier cost. For a single-parameter, read-only data tool, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single `symbol` parameter is already fully documented by the schema. The description does not add validation, format, or syntax details beyond 'for a stock.' Baseline 3 is appropriate because the schema carries the parameter documentation burden and the description adds no meaningful input semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get AI-synthesized insider + institutional activity for a stock.' It clearly delimits the tool's scope from sibling market-data tools by describing the combined insider/holdings signal and its exact output components. The purpose is unambiguous and distinct even without comparing against sibling names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you need insider transactions, institutional holdings, and a combined signal for a single stock. It also adds operational guidance like 'Pro tier only — AI pipeline cost attached.' It does not explicitly name alternatives or state when not to use it, but the context is strong enough to imply appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_assessmentGet Market AssessmentA
Read-onlyIdempotent
Inspect

Combined AI market assessment: macro regime + market outlook in a single call. Produced every ~4 hours by the market intelligence pipeline.

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

  • 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: FRED 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: CNN Fear & Greed 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
history_countNoInclude the last N prior assessments for each of regime and outlook (0-3, default 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already say the call is read-only and idempotent, the description adds meaningful behavioral context: it is not produced every 4 hour, stale is tripped only after >72h with weekday-only pipeline details, and all market_context values are point-in-time snapshots of a specific execution run. These details go well beyond the annotations and materially affect how an agent should interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than typical descriptions, but its length is justified by the two distinct analyses, the many key output fields, and the important caveats. It is well orgized and puts the core purpose first. Some disclaimerminal lines (For informational purposes only) are less actionable for an agent, so it does not get a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers when to use each perspective, how staleness works, the cost/tier caveat, the difference between live and point-in-time data, and gives meaning for each major result field. There is also an output schema, so the response format is available elsewhere. This is complete for safe and correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter is history_count, and the input schema already provides a clear default, a range, and a human-readable description. The tool description repeats this same information but does not add any deeper parameter behavior e.g., navg except the schema already covers it. Baseline 3, as 100% of the schema is described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately says this is a combined AI market assessment returning both macro regime and market outlook, which is a specific and distinct resource. It also breaks down the two perspectives into the questions they answer, making the tool's purpose unambiguous and able to be selected from a list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives direct usage guidance: the REGIME perspective is for position sizing and asset allocation, and the OUTLOOK perspective is for sector preference and directional bias. It also explicitly says to use get_market_pulse for live data instead of the point-in-time snapshot here, which is a clear when-not/alternative instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_moversGet Market MoversA
Read-onlyIdempotent
Inspect

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 (e.g. 1.0 = $1B+)

Returns per stock: symbol, name, sector, price, change_pct, volume, rsi, market_cap, 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoResults 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.
categoryNoWhich movers category to return: "gainers" | "losers" | "most_active" | "all" (default "all" = all 3 categories).all
min_market_cap_bNoFilter to stocks above this market cap in billions of dollars, e.g. 1.0 = $1B+.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive, so the description needs less safety disclosure. The description adds valuable behavioral details: the per-category counting toward the daily API limit, omission of atr_pct when underlying data is missing/corrupted, and the precomputed Pro-tier AI messages with no extra AI cost. It clearly states what is returned and notes absent data. This is a good example of adding context beyond the schema. Minor lack: no explicit note about rate limits beyond the daily call counting, but most relevant behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized: a scope line, a pagination/limit note, a filter note, return fields, and a Pro tier explanation and pointer to a sibling. It is a little long, and the Pro tier narration ('A big mover's...' uses colorful language) adds length but also explanatory value. It front-loads the core purpose immediately and presents parameters in the same order as the schema. The slight extra length and marketing tone prevent a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a rich output schema and a clear list of returned per-stock fields, so the description doesn't need to repeat the full return shape. The input schema covers all three parameters with 100% coverage. The description covers the daily-limit accounting, the Pro-tier optional fields, and the alternative for full research; there is no major gap an agent needs to guess. For a list/read tool of moderate complexity, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already has a rich description in the schema. The tool description adds the default for category and limit, the valid enum values, and a concrete example for min_market_cap_b. It also adds the critical interpretation that a symbol appearing in multiple categories counts once per category toward the daily limit, which clarifies exactly how limit/quota accounting works. This is a strong baseline 3 with meaningful added value, so a 4 is justified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: 'Top market movers from the Stocklake universe — gainers, losers, most active.' It clearly identifies the tool's function as listing market movers, and explicitly differentiates its output categories. The context that it returns a per-stock summary and points to the sibling get_stock_research for deeper research further distinguishes it from other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: it provides top movers and notes that Pro tier adds predefined AI narratives. It explicitly names the alternative get_stock_research(symbol) for full research on a single mover. It also gives selection guidance by showing the category and limit parameters. It does not explicitly mention when not to use it, but the guidance is strong overall.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_pulseGet Market PulseA
Read-onlyIdempotent
Inspect

Live market health snapshot in a single call. Aggregates key market indicators without requiring multiple tool calls. No AI cost — reads live data directly from the market data feed.

Returns:

  • vix: VIX level and change_pct (from live stocks data)

  • fear_greed: value (0-100) and label (e.g. "neutral", "greed", "fear")

  • breadth: market-wide RSI distribution — oversold_pct, overbought_pct, neutral_pct, universe_size

  • indices: SPY, QQQ, IWM prices + RSI + 1-week performance

  • bonds_commodities: TLT (long-duration bonds), GLD (gold)

  • updated_at: when the breadth/fear_greed snapshot was last recorded Available to all tiers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context by stating it 'reads live data directly from the market data feed' and 'No AI cost', and explains the meaning and freshness of returned fields. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: a concise opening sentence followed by a clear bulleted list of return fields. Every sentence adds value, avoids redundancy, and the format makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a zero-parameter tool, the description comprehensively explains the output fields, including their meanings. With an output schema present, the description fully covers what an agent needs to know to invoke and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so schema coverage is 100% by definition. With no parameters to document, the description is not required to add parameter details; the baseline score of 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it provides a 'Live market health snapshot in a single call' and enumerates the aggregated indicators (VIX, fear/greed, breadth, indices, bonds). This goes beyond the name by specifying the resource and scope, and differentiates it from sibling tools by emphasizing that it aggregates data without requiring multiple calls.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for quickly obtaining a market-wide health overview in one call, and notes 'No AI cost' and 'Available to all tiers', which are useful usage considerations. It does not explicitly list exclusions or name alternative tools for when more detail is needed, but the single-call aggregation message provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_news_feedGet Market News FeedA
Read-onlyIdempotent
Inspect

Top AI-flagged news across all tracked stocks — the market-wide news briefing. Unlike get_stock_news (per-symbol), this scans the entire universe and returns the most notable articles ranked by signal_score, newest first within each score tier.

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) used to SELECT articles server-side. Resolved per-article (stored/computed magnitude preferred over an unfiltered Mongo $gte, since a formal live signal doesn't exist for every article — see signal_score below), then filtered/sorted in Python.

  • 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 (full text), signal_score (0-100), signal_score_band (Weak/Moderate/Strong/ Very Strong)

signal_score/signal_score_band: this symbol's LIVE signal score if a news-sourced signal was raised for it in the last 90 days (same number get_stock_news()/get_signals() report, kept in sync as that signal is re-scored — one $in query per distinct symbol in the result, not per article, so two articles about the same stock always show the same value); otherwise a per-article magnitude computed from THIS article's own sentiment/confidence/flag_score, so every article still gets a real, rankable number. Always a single number — for a symbol whose live signal is genuinely two-sided (real opposing bull/bear theses), this is the STRONGER of the two sides, same as get_signals()/get_stock_news(). There is deliberately no separate "news_score" field — one name for "how strong is this idea," whether it's backed by a formal signal or just this article's own classification.

Pro tier only — AI pipeline cost attached. For informational purposes only. Not financial advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days (default 3, max 10).
limitNoMax articles returned (default 10, max 25).
min_signal_scoreNoMinimum 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive. The description goes well beyond by explaining how signal_score is computed (live signal vs per-article magnitude), the per-article resolution, the 'stronger of two sides' behavior, and the cost attached to the AI pipeline. It also clarifies that there is deliberately no separate news_score field, a nuance an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: purpose first, then use cases, then parameters, then deep signal_score explanation. It is verbose but every paragraph adds necessary context (cost, pro-tier, behavioral details). The use of bullet points and section headers aids scanning. It could be tightened, but it is not padded; complexity justifies the length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema (which presumably lists fields), the description explicitly enumerates per-article fields (symbol, title, published_at, ai_sentiment, ai_summary, signal_score, band) and explains all behavioral aspects an agent would need to call it correctly: selection logic, ordering, cost implications, and constraints. Nothing important is omitted; the tool is fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful depth for min_signal_score, explaining that it is resolved per-article (live signal preferred) and that the server-side selection uses Python filtering rather than a naive $gte. This helps an agent understand the exact ranking and filtering semantics beyond the schema's terse wording. Days and limit are straightforward but still given bounded defaults in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and scope: "Top AI-flagged news across all tracked stocks — the market-wide news briefing." It immediately contrasts with get_stock_news (per-symbol), making the distinction explicit. No ambiguity about what this tool does or how it differs from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Lists exact use cases (morning briefing, catalyst scanning, event monitoring) and explicitly contrasts with get_stock_news. It also states the tool is Pro-tier only and for informational purposes — clear constraints on when to use it. No exclusions are left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screenerScreen StocksA
Read-onlyIdempotent
Inspect

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

  • 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 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 — 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, pe_forward, rsi, macd_signal, sma200_trend, analyst_rating. 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return, 1-25 (default 20). Each returned stock counts as one call toward your daily limit.
presetNo"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.
sectorNoFilter by sector, e.g. "Technology", "Healthcare", "Financial Services".
countryNoFilter by country, e.g. "United States", "Germany".
max_rsiNoMaximum RSI bound (e.g. max_rsi=30 = oversold).
min_rsiNoMinimum RSI bound (e.g. min_rsi=70 = overbought).
sort_byNo"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_dirNoSort direction: "asc" | "desc" (default "desc").desc
sma_trendNo"above_200" (price above 200-day MA) | "below_200".
min_volumeNoMinimum daily volume, e.g. 1000000.
macd_signalNo"positive" (MACD line above signal) | "negative".
max_perf_1dNoMaximum 1-day performance %.
min_perf_1dNoMinimum 1-day performance %, e.g. min_perf_1d=2.0 = up 2%+ today.
min_ai_scoreNoMinimum 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.
analyst_ratingNoFilter by analyst consensus rating: "strong_buy" | "buy" | "hold" | "sell" | "strong_sell".
max_pe_forwardNoMaximum forward P/E, e.g. 20 for a value screen.
max_market_cap_bNoMaximum market cap in billions of dollars.
min_market_cap_bNoMinimum market cap in billions of dollars.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare read-only/idempotent/non-destructive behavior, and the description adds substantial extra context: pro-tier gating, silent ignores and fallbacks on free/guest tiers, daily-limit counting, the AI-score field provenance, as well exactly which fields each tier receives. No statement contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well structured and front-loaded: purpose, parameters, returns, tier behavior, and next-step routing. It is long, but the tool is complex. It loses the top score because it repeats a good deal of what the input schema already spells out and includes internal implementation details like stock_ai_summary.py and the retired flag_score renaming that could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, tiered, filter-heavy tool with 18 optional parameters, the description covers what is returned, what counts against quotas, pro/free differences, silent resource fallbacks, and which sibling tool to call next. An agent has everything needed to invoke it correctly, and the output schema covers the remaining return-shape details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries most parameter meaning. The description still adds value by grouping the filter dimensions into conceptual families, providing practical worked examples for RSI, performance, P/E, and volume screens, and explaining cross-parameter behaviors like presets influencing default sort_by. This is a step beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence uses a concrete verb-resource pair — "Filter and rank stocks" — and scopes the tool to the Stocklake universe. The stated dimensions (fundamentals, technicals, AI signals) and the follow-up to get_stock_research make it clear this is the screening/ranking tool, not the single-stock or news/history sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly defines when this tool is used: screen and rank the broad universe with filters/presets, with pro-tier behaviors explicitly called out. It also tells the agent to call get_stock_research for deeper per-result research. It does not fully contrast against siblings like get_stocks, get_market_movers, or get_signals, so it stops just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sector_intelligenceGet Sector IntelligenceA
Read-onlyIdempotent
Inspect

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)

Refreshed every ~4 hours by the market intelligence pipeline. Available to pro tier only (AI pipeline costs). For informational purposes only. Not financial advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectorNoPass 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_countNoInclude the last N prior signal states per sector, 0-3 (default 0). Only applies to the all-sectors call.
sort_by_strengthNoSort 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's safety burden is low. It adds non-obvious context: refresh cadence (~4 hours), pro-tier availability, and the fact that the all-sectors call serves as the rotation view. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a concise summary followed by parameter bullets and context bullets. It is longer than minimal, but each sentence adds useful information such as refresh cadence, access tier, and parameter constraints. The 'not financial advice' disclaimer is boilerplate but not distracting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, annotations cover safety, and the description explains both call modes plus parameter restrictions, the tool is sufficiently complete for an agent to select and invoke it correctly. A minor gap is the lack of explicit guidance for when to choose this tool over related siblings like get_market_assessment or get_signals.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters and their defaults. The description's bullets recap this information (history_count 0-3, default 0; sort_by_strength ignored for single sector) without substantially extending schema semantics, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Get Sector Intelligence') and enumerates the concrete outputs: signal, cycle stage, rotation signal, drivers, alerts, and computed statistics. It also explains the dual all-sectors/rotation view, which distinguishes it from the sibling market and earnings tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to pass a sector name versus when to omit it, and explains that the all-sectors call doubles as the rotation view. It provides usage guidance for sort_by_strength and history_count, though it does not explicitly contrast this tool with named siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_signalsGet SignalsA
Read-onlyIdempotent
Inspect

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 window in the response). This reflects what the AI pipeline found, not whether Stocklake's own internal trading engine still holds it live — a signal it later dropped or let expire is still shown here, since that's a fact about our own trading state, not about the signal's informational value.

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.

  • min_conviction, min_flag_score: DEPRECATED, ignored for filtering — kept in the signature only so existing callers don't hard-fail; ai.stocklake.dev's 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.

  • source: filter by signal source — "news" | "screener" | "sentiment" | "social" (default: all)

  • limit: max results to return (default 50, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50, max 50). Each returned signal counts as one call toward your daily limit.
sourceNoFilter by signal source: "news" | "screener" | "sentiment" | "social" (default: all).
directionNoFilter 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_convictionNoDEPRECATED, 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.
min_flag_scoreNoDEPRECATED, 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.
min_signal_scoreNoMinimum 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and idempotentHint annotations, the description adds critical behavioral details: the fallback to older signals when nothing fires in 24 hours, the fact that dropped or expired signals are still shown, and the 'Pro tier only — AI pipeline cost attached' warning. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is lengthy but every sentence carries useful information—parameter semantics, edge cases, return structure, and cost. It's well-organized with clear sections and front-loaded with the core purpose, so the length is fully justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, the description is comprehensive: it covers all parameters, return fields (count, window, signals), fallback behavior, deprecation, and the Pro tier cost. It complements the existing output schema by explaining the nuances of signal_score_band and the window field, so nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description goes far beyond the input schema: it explains that NEUTRAL covers both flat and two-sided ideas, that signal_score reflects the stronger side for two-sided ideas, that min_signal_score is always compared against a single number, and that min_conviction/min_flag_score are deprecated and ignored. This is essential for correct filtering.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns 'AI-screened stock signals' from the Stocklake pipeline, sourced from news analysis, sector screening, and sentiment signals. It distinguishes itself from siblings like get_news_feed or get_market_movers by focusing on the pipeline's processed signals rather than raw data, so an agent can tell exactly what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides useful context on the 24-hour window and fallback behavior, and clarifies that signals reflect AI findings rather than the trading engine's current state. However, it does not explicitly name alternative tools or state when to prefer this over get_screener or get_news_feed, so the agent must infer usage from the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stockGet StockA
Read-onlyIdempotent
Inspect

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, 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 6 more specialized indicators inside the SAME indicators block (williams_r, ultimate_osc, vix_fix, williams_ad, td_sequential, elliott_wave -- the Larry Williams family, DeMark TD Sequential, and Elliott Wave) -- these are omitted entirely from the free/guest response (tier-gating sweep, 2026-08-28), 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): stock_ai_summary.py's own composite score, on the same 0-100 scale and band boundaries as get_signals()'s signal_score — but a different pipeline/collection, 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 (Yahoo's own longer-window beta calculation) — this is computed fleet-wide 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol. Also accepts a company name as a fallback (e.g. "Apple") when it uniquely resolves to one symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing the tool's safety profile. The description goes far beyond that, explaining tier-based availability (free vs pro), that missing data is omitted rather than nulled, the distinction between ai_score and get_signals' signal_score (different pipeline, same scale), how relative_strength computes percentage-point differences, and that some fields may be null if not precomputed. This is rich behavioral context that an agent could not infer from annotations alone. No contradictions found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extensive yet well-structured, using bullet points and clear sections. It front-loads the core purpose and then expands into field lists, tier differences, and related-tool pointers. While long, every section serves a purpose given the tool's complexity (e.g., explaining pro-tier additions, null behavior, and the relationship to get_stock_research). It does not waste words, though a more concise summary of the basic fields could be trimmed without loss of essential guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the full scope of the tool: all return fields, nested object structures (indicators, signals, stance_signals, relative_strength, market_risk), tier differences, null-handling conventions, and explicit pointers to the only alternative for fuller research. It also explains numerical scales (analyst_rating_score, ai_score) and how they relate to other tools (signal_score). Given the richness of the output and the annotation baseline, nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema defines the only parameter, symbol, with a clear description: 'Stock ticker symbol. Also accepts a company name as a fallback (e.g. "Apple") when it uniquely resolves to one symbol.' The tool description does not add additional parameter semantics beyond what the schema already provides. Since schema description coverage is 100%, a baseline of 3 is appropriate; the description does not need to compensate for any gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear statement: 'Price, fundamentals, technical indicators, and company profile for a stock.' and reinforces with 'Returns all data needed to understand a stock in a single call.' It explicitly lists the categories of data and distinguishes the tool from get_stock_research, which is referenced as the only tool with the full AI narrative bundle. This gives an agent a precise mental model of what the tool does and how it relates to its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly directs users to get_stock_research for full narrative and cross-source context: 'For the full text... call get_stock_research(symbol) instead — that's the only tool with the complete bundle.' It also mentions that the base tool is available to all tiers and that pro tier adds specialized indicators and interpreted blocks. However, it does not explicitly compare against other siblings like get_stocks (plural) or get_stock_history, leaving some ambiguity about when those would be preferred. Still, the guidance for the primary alternative is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_historyGet Stock Price HistoryA
Read-onlyIdempotent
Inspect

Daily OHLCV price history for a stock.

  • days: number of trading days to return (default 90, max 365)

  • Returns: { symbol, days_requested, days_returned, count, history[] } — days_returned/count can be less than days_requested if less history exists

  • Per bar: date, open, high, low, close, volume

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber 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.
symbolYesStock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description no annotations are present, so it carries the transparency burden. It discloses the default and maximum `days`, that `days_returned` may be lower than requested, and the exact per-bar fields. It does not explicitly state no-side-effect behavior, but the get/returns language plus the clarity of the operation make this a strong, non-hidden contract.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and organized as a short first line for the tool's purpose plus concise bullets for parameter and return semantics. Every sentence carries meaningful information and no filler or redundant material exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the complete input schema and returned-val format, leaves no essential invocation behavioral detail unresolved: argument defaults, maximums, partial-history case, and bar fields are all present. This is fully sufficient for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including `days`' default/max and `symbol`' ticker-plus-company-name behavior, so the added description value is limited. The description does clarify the effect of `days` beyond a single schema phrase and defines the return shape, but this goes beyond parameter semantics and the description says the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb-resource pairing: it returns daily OHLCV price history for a stock. This makes the tool's function obvious and distinguishes it from earnings, indicators, news, and screener siblings that provide different data types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes when this tool should be used: when a caller needs daily stock price bars rather than news or fundamentals. It does not explicitly name alternative tools or exclusion conditions, but the clear data scope provides enough contextual guidance for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_newsGet Stock NewsA
Read-onlyIdempotent
Inspect

AI-analysed news for a stock, newest first. Only returns articles processed by our AI pipeline (sentiment, signal_score, summary).

  • days: look-back window in days. Requesting more than your tier's cap is silently clamped down to it: 30 free/guest, 90 pro.

  • limit: max articles returned. The limit=10 default 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.

  • status: "ok" = articles returned | "empty" = no news in window

  • Per article: title, published_at, ai_sentiment, ai_summary (full text) — Pro only, see below

  • signal_score (Pro only, 0-100 or null) / signal_score_band (Pro only, string or null — "Weak"/"Moderate"/"Strong"/"Very Strong"): if this symbol has a live news-sourced signal (raised in the last 90 days), every article shows that SAME number — the same one get_signals()/get_stock_research() report for this symbol (all three read the same underlying signal, via the same shared resolver), staying live/synced: if the signal is later re-scored, this reflects the update on your next call, not a frozen snapshot from classification time. Always a single number (never a two-sided split) — for a genuinely contested (two opposing theses) signal, this is the STRONGER of the two sides. NOT gated on whether Stocklake's own internal trading engine still considers the signal live — a dropped/expired signal is still a real, useful fact about what the pipeline found. When there's no live signal for this symbol at all, each article instead gets its OWN per-article score (computed from that article's sentiment/confidence/flag_score) — the same fallback get_stock_research()'s news[] block uses, so a symbol with no active thesis doesn't just go null across the board; different articles for the same symbol can then legitimately show different numbers. Null only when neither path can produce a value (article has no AI sentiment/confidence/ flag_score at all). There is deliberately no separate "news_score" field — one name, kept in sync with the signal when one exists, computed per-article when it doesn't. Free tier: up to 5 articles, title + published_at only (no AI fields), 30-day window. Pro tier: up to 50 articles with full AI fields, 90-day window. For informational purposes only. Not financial advice.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days. Requesting more than your tier's cap is silently clamped down to it: 30 free/guest, 90 pro.
limitNoMax 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.
symbolYesStock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, and the description adds substantial behavior beyond them: silent clamping of days/limit to tier caps, tier-gated field availability, the live/synced (not frozen snapshot) signal semantics, the no-gating on Stocklake's internal trading engine, the per-article fallback score path, and the deliberate absence of a separate news_score field. No contradiction with annotations; 'For informational purposes only' reinforces the read-only profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is efficiently front-loaded, but the signal_score block is one dense, run-on paragraph with heavy nested parentheticals (last-90-days, shared resolver, internal-engine caveat, fallback path), making it hard to parse. Clamping and tier facts are also restated three times — in the days/limit text and again in the closing 'Free tier/Pro tier' summary — adding redundancy to an already long definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a genuinely complex tool (tier-dependent clamping, shared-signal freshness semantics, per-article fallback), nothing an agent needs to call it correctly is missing — edge cases like null-when-neither-path-produces-value are explicitly handled. Since an output schema exists, the extensive per-article field explanation is a bonus, though slightly over-explains what the schema could carry. Slight over-reach rather than under-specification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the days/limit descriptions in the schema already carry the exact clamping and tier-cap text the description repeats verbatim. The description adds the status enum ('ok'/'empty') and per-article field narrative, but those concern the return shape, which an output schema exists to cover. On parameters themselves the description is essentially duplicative, placing it at baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line 'AI-analysed news for a stock, newest first' states a specific verb, resource, and distinctive qualifier. The qualifier 'AI-analysed' plus 'Only returns articles processed by our AI pipeline' cleanly separates it from a raw feed like get_news_feed, so an agent can disambiguate without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the 'AI-analysed' framing and explains that signal_score/signal_score_band are the same values get_signals()/get_stock_research() report via a shared resolver, which orients the agent to data relationships. However, there is no explicit when/when-not routing — it never says 'use get_news_feed for raw articles' or 'use get_signals for standalone signal data.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stock_researchGet Stock ResearchA
Read-onlyIdempotent
Inspect

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 — stock_ai_summary.py's own composite, same scale/band convention as signal_score but a distinct field/pipeline), 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 signals list 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. Recency-gated, not gated on whether Stocklake's own trading engine still holds the signal live — a signal it dropped or let expire is still a real, useful fact about what the pipeline found, so it stays in this list rather than disappearing the moment our own paper trader moves on.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolYesStock ticker symbol to fetch the full AI research bundle for.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds significant operational context: no live AI calls, pre-computed pipeline data, recency-gated trade signals that persist even if the internal trader dropped them, null fallback for pre-schema summaries, and explicit score-field naming/sync conventions. This goes far beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: a front-loaded summary, a clear replacement statement, detailed labeled return blocks, and explicit edge cases. Every sentence contributes operational or selection-relevant information, and the bulleted layout makes the complexity scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a composite tool with multiple return blocks, score band conventions, null cases, sync behavior, and signal retention nuances. The description documents all of these clearly. With an output schema also present, an agent has everything needed to call the tool correctly and interpret its results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers the single symbol parameter with 100% description coverage. The tool description reinforces that symbol is a stock ticker for the research bundle but does not add new parameter semantics. Baseline 3 is appropriate because the schema carries the full weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Full AI research bundle for a stock in one call' and enumerates exactly what it returns: fundamentals, AI summary, news, insider/institutional signal, and trade signal history. It explicitly names the four sibling tools it replaces, so an agent can immediately distinguish it from get_stock, get_stock_news, get_insider_activity, and get_signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it replaces get_stock + get_stock_news + get_insider_activity + get_signals for one symbol, giving a clear selection rule versus alternatives. It also notes the Pro tier restriction and that data is pre-computed, which helps an agent decide when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_stocksGet Multiple StocksA
Read-onlyIdempotent
Inspect

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}, 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesList 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

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description reveals multiple non-obvious behaviors: missing symbols are omitted, each symbol counts toward a daily limit, over-25 requests are rejected outright with batch_too_large, duplicates are collapsed through normalization, and Pro-tier data is 'precomputed' with no live AI cost. It even provides a response invariant formula, which is far more behavioral detail than annotations supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-organized with clear paragraphs and front-loaded purpose; every section covers a distinct operational concern (main semantics, tier details, exclusions, and the duplicates invariant). It repeats the over-25 rejection that already lives in the schema, which is a small efficiency loss, but the structure and packaging is strong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a batch endpoint with tier differences, daily limits, normalization behavior, and output shape quirks, this description leaves nothing an agent needs to infer. It enumerates what's included, explicitly lists what is NOT included and which sibling to call instead, and even describes output-level invariants. The presence of an output schema lowers the burden on explaining return values, but the description still covers the non-obvious delivery semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the basic limits and rejection behavior for the symbols parameter, so baseline is at 3. The description adds meaningful symbolic semantics: how duplicates are collapsed via 'case-folding, share-class aliasing e.g. BRK.B->BRK-B' and how requested/missing/duplicates relate in the invariant. That adds real value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb constraint: 'Batch stock data for up to 25 symbols in a single call', and immediately distinguishes itself from get_stock by clarifying it returns 'the same fields get_stock returns' and is 'a true batch version, not a thinned-down scan.' It also names its result shape, so an agent knows exactly what this tool is and what it produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: if you need more than 25 symbols, 'split a larger list into multiple calls; if you need stance_signals, get_stock(symbol); if you need full AI text/news context, get_stock_research(symbol).' It also notes tier availability, making the routing decision complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_watchlistGet WatchlistA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds the 'Pro tier only' restriction and the 'For informational purposes only. Not financial advice' disclaimer, plus the personalization to the caller. It also describes the return payload. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured: a purpose sentence, a 'Returns:' list, an empty-case note, and a tier/disclaimer. No wasted words, though the disclaimer could be considered boilerplate. It is appropriately front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there are no parameters, the description fully covers what an agent needs: the data source (caller's watchlist), the fields returned, the empty-case behavior, the Pro tier requirement, and the disclaimer. The output schema exists separately, so no need to detail return values further. It is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the input schema is empty, so there is nothing to explain. Per rubric, 0 parameters warrants a baseline of 4. The description compensates by detailing the output structure, which is highly relevant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource ('the caller's Stocklake watchlist') and the enrichment ('live price, technicals, and AI verdict'). It is distinct from all 16 siblings, none of which relate to watchlists. The purpose is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: it returns the caller's personal watchlist, which implies use when the user's own watchlist is needed. It notes 'Pro tier only' as a prerequisite but does not explicitly state when not to use or alternatives. Since no sibling offers watchlist data, explicit exclusions are unnecessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    AI-powered financial intelligence for autonomous trading agents. 9 MCP tools for real-time trading signals, risk index, market regime detection, stock analysis, commodity scoring, sector radar, and geopolitical intelligence briefings.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources