Skip to main content
Glama

Stocklake — AI Stock Intelligence

Get Stock Financials

get_stock_financials
Read-onlyIdempotent

Raw financial statements - balance sheet, income statement, and cash flow line items. This is the underlying statement data itself, not a derived summary - for the forensic-accounting scores computed FROM these statements (Altman Z / Piotroski F / Beneish M), see get_stock()'s forensic_scores block instead.

Each returned statement is shaped {line_item_name: {period_end_iso: value}}

  • e.g. income_stmt["Total Revenue"]["2025-12-31"] - so a caller can compute its own trends/deltas/CAGRs, not just read the latest value. Values are in the company's reporting currency (financial_currency).

Tiers:

  • Free and guest: the LATEST fiscal year only. Every line item's {period_end: value} map has one entry and periods lists one date. All three statements and the statement filter work. period= "quarterly"/"both" returns that latest annual year with quarterly=null plus a pro_unlocks note (not an error). annual_periods_available says how many years Pro would return.

  • Pro: period="annual" (default) returns up to 5 fiscal years; some symbols return fewer. period="quarterly" returns up to roughly 7-8 of the most recent quarters. period="both" returns both blocks in one call.

~50-60 curated line items per statement (not a raw dump of every reported row): balance sheet structure (assets/liabilities/equity/debt/ working capital), income statement (revenue through EPS), and cash flow (operating/investing/financing, free cash flow, buybacks, stock-based comp). Coverage genuinely varies by symbol and sector - a bank has no "Inventory" line, a company with no buyback program has no "Repurchase Of Capital Stock" entry. A missing line item means it is not reported for this company, not a fetch error.

quarterly can come back null (with a quarterly_note) for a symbol whose real quarterly data isn't available. annual/quarterly can both be entirely absent (with a note) if this symbol hasn't yet been through the financials sync, or if it's not an equity (no data for ETFs/crypto/ forex/indices) - these states read the same for every tier.

For informational purposes only. Not financial advice.

Input Schema

NameRequiredDescriptionDefault
periodNo'annual' (default; Pro: up to 5 fiscal years, free: the latest fiscal year), 'quarterly' (Pro: up to ~7-8 most recent quarters), or 'both' (Pro). Free/guest asking for 'quarterly' or 'both' gets the latest annual year plus a pro_unlocks note, not an error.annual
symbolYesStock ticker symbol. Also accepts a company name as a fallback when it uniquely resolves to one symbol.
statementNo'all' (default), 'balance_sheet', 'income_stmt', or 'cash_flow' - restricts which statement(s) are returned.all

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / period / description
      Previous value: -"'annual' (up to 5 fiscal years, default), 'quarterly' (up to ~7-8 most recent quarters), or 'both'."New value: +"'annual' (default; Pro: up to 5 fiscal years, free: the latest fiscal year), 'quarterly' (Pro: up to ~7-8 most recent quarters), or 'both' (Pro). Free/guest asking for 'quarterly' or 'both' gets the latest annual year plus a pro_unlocks note, not an error."
    • changedInput schema / properties / statement / description
      Previous value: -"'all' (default), 'balance_sheet', 'income_stmt', or 'cash_flow' — restricts which statement(s) are returned."New value: +"'all' (default), 'balance_sheet', 'income_stmt', or 'cash_flow' - restricts which statement(s) are returned."
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description goes well beyond them: tier-based availability limits, that free/guest quarterly requests return a pro_unlocks note rather than an error, that null quarterly comes with a quarterly_note, that missing line items mean 'not reported' not 'fetch error', and that values are in financial_currency. This is unusually rich behavioral disclosure.

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?

Front-loads the most important distinction (raw data vs derived scores) and uses a labeled Tiers block that is easy to scan. It is somewhat long and repeats tier/period rules already in the schema, costing it a point, but no sentence is purely 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?

Despite an output schema existing, the description covers every edge case an agent would need: coverage variance by sector, null/absent statement states, non-equity symbols, and tier gating. Nothing required to call or interpret the result 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?

Schema description coverage is 100%, and the description's tier/period/statement detail largely restates what the schema already documents (the period tier behavior appears near-verbatim in both). It adds the response shape {line_item: {period: value}} and currency semantics, but those are return-value concerns rather than parameter meaning, so the 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?

States a specific resource (raw balance sheet / income statement / cash flow line items) and explicitly distinguishes itself from the sibling get_stock by naming its forensic_scores block as the alternative for derived metrics. An agent can tell exactly what this returns without opening the schema.

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?

Gives an explicit when-to-use-this vs when-to-use-that routing rule: use this for raw statement data, use get_stock().forensic_scores for Altman Z / Piotroski F / Beneish M. It also frames the caller's intent (compute own trends/deltas/CAGRs) which clarifies the use case.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources