Valuein — SEC EDGAR Fundamentals & Smart-Money Data
Server Details
Point-in-time, survivorship-free SEC EDGAR fundamentals + smart-money signals for AI agents.
- Status
- Healthy
- Uptime
- 99.9% over 60 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- valuein/valuein
- GitHub Stars
- 0
TDQS
Scored across 22 tools
Tools mostly target distinct resources and actions, with clear 'Use this when' guidance and cross-references to alternatives. Some overlap remains among get_company_fundamentals, get_financial_ratios, and get_valuation_metrics for profitability and margin questions, so an agent could occasionally misselect.
All names use snake_case, and most follow a clear verb_noun pattern (get_*, compute_*, verify_*, list_*). The noun phrase 'forensic_audit' is a minor deviation, but the overall convention is predictable.
22 tools is heavy for MCP selection; while many are specialized analytical functions, the count exceeds the typical well-scoped range (3-15) and borders on overwhelming for an agent choosing the right tool.
The surface covers SEC fundamentals, ratios, valuation, projections, forensic checks, and lineage well. However, the server's stated 'Smart-Money Data' aspect (e.g., institutional holdings or insider activity) has no corresponding tools, leaving a notable gap for that stated purpose.
Available Tools
22 toolscompare_periodsCompare two fiscal periodsARead-onlyIdempotentInspect
Returns a company's reported figures for two fiscal periods side by side, with each figure's absolute and percentage change, a significance label (minor under 5%, notable 5 to 15%, significant over 15%) and a count of material changes. Use this when the user asks how a company changed between two years or quarters. Periods given in reverse order are swapped and the result says so.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| period_a | Yes | Earlier period: FY and the year, or Q1 to Q4, a hyphen and the year, e.g. FY2023. | |
| period_b | Yes | Later period, in the same format as period_a, e.g. FY2024. | |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| changes | Yes | Per-metric deltas: metric, label, period_a, period_b, delta, delta_pct, significance |
| swapped | Yes | True when inputs were reordered so period_b is the more recent period |
| period_a | Yes | Earlier period descriptor: label, fiscal_year, fiscal_period, period_end, filing_date |
| period_b | Yes | Later period descriptor, same shape as period_a |
| as_of_date | No | |
| company_name | No | |
| total_metrics | Yes | Count of metrics compared across the two periods |
| material_changes | Yes | Count of metrics flagged as a material change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description still adds real behavior: the significance thresholds (<5% minor, 5-15% notable, >15% significant), the material-change count, and the fact that reversed periods are swapped with the result disclosing it. It omits error handling for invalid tickers or mismatched period formats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the return shape before the usage cue and the swap rule. The parenthetical significance bands are informative rather than filler, though the output enumeration in sentence one is dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be explained, and the description still sketches the response. With four params fully documented in schema and the swap/idempotency behavior disclosed, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by clarifying that period_a/period_b are semantically ordered and that reverse-order input is normalized by swapping (with notification). That goes past the schema's 'earlier/later' labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (compare a company's reported figures across two fiscal periods) and enumerates the outputs: side-by-side figures, absolute and percentage change, significance label, material-change count. This is clearly distinguishable from siblings like get_financial_ratios or get_company_fundamentals, which retrieve rather than diff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it when the user asks how a company changed between two years or quarters, giving the triggering intent. It stops short of naming alternatives or exclusion cases (e.g. use get_financial_ratios for single-period ratios), so it is clear context without routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_accretion_dilutionMerger accretion and dilutionARead-onlyIdempotentInspect
Returns whether a proposed acquisition raises or lowers the acquirer's earnings per share in the first year after the deal, with deal value, new shares and debt, pro forma net income, shares and EPS, and the takeover premium, from both companies' latest annual 10-K figures and month-end closing prices. Use this when the user asks whether a deal would be accretive or dilutive at an offer price, cash and stock mix and synergies they choose. It covers one year only: synergy ramp, integration costs and purchase accounting are not modelled.
| Name | Required | Description | Default |
|---|---|---|---|
| cash_pct | Yes | Share of the deal value settled in cash, 0 to 1; the rest is acquirer stock, e.g. 0.5. | |
| tax_rate | No | Tax rate on synergies and interest, 0 to 1; defaults to 0.21, e.g. 0.25. | |
| as_of_date | No | Point-in-time cutoff for both companies, YYYY-MM-DD: filings accepted and closes on or before this date, e.g. 2024-06-30. | |
| target_ticker | Yes | Ticker symbol or SEC CIK of the company being acquired, e.g. AAPL. | |
| acquirer_ticker | Yes | Ticker symbol or SEC CIK of the acquiring company, e.g. MSFT. | |
| synergies_pretax | No | Yearly pretax synergies in USD at full run rate; defaults to 0, e.g. 500000000. | |
| cash_financing_source | No | How the cash is funded: new_debt (default, adds after-tax interest) or balance_sheet_cash (no interest cost), e.g. balance_sheet_cash. | new_debt |
| offer_price_per_share | Yes | Price offered per target share in USD, above zero, e.g. 250. | |
| new_debt_interest_rate | No | Interest rate on new acquisition debt, 0 to 0.5, used with new_debt; defaults to 0.06, e.g. 0.07. | |
| target_share_price_override | No | Target share price in USD used instead of its month-end close, for the takeover premium only, e.g. 180. | |
| acquirer_share_price_override | No | Acquirer share price in USD used instead of its month-end close, e.g. 420. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| result | Yes | |
| target_ticker | Yes | |
| acquirer_ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, idempotent, closed-world profile, so the bar is lower. The description still adds meaningful context the annotations cannot: data provenance (latest annual 10-K figures and month-end closing prices) and hard modelling boundaries (one-year horizon, no synergy ramp/integration costs/purchase accounting).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences: purpose/outputs, when-to-use, then scope limits. Every sentence earns its place, though the output enumeration overlaps with the existing output schema and is slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With complete schema coverage, an output schema, and annotations covering the safety profile, the description supplies the remaining needed context: what the call computes, its data sources, and its modelling limits. Nothing an agent needs to invoke it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 11 parameters is documented with units, ranges and examples, so the schema does the heavy lifting. The description only gestures at the inputs (offer price, cash/stock mix, synergies) without adding syntax or format detail beyond what the schema already provides, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific computation (first-year EPS accretion/dilution from a proposed acquisition) and enumerates the outputs produced, which clearly separates it from siblings like compute_dcf and compute_lbo. An agent can identify the tool from the first clause 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user asks whether a deal would be accretive or dilutive at an offer price, cash and stock mix and synergies they choose" gives a clear triggering condition, and the closing sentence states an explicit exclusion (one year only; synergy ramp, integration costs and purchase accounting not modelled). It stops short of naming an alternative sibling, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_dcfDiscounted cash flow valueARead-onlyIdempotentInspect
Returns a two-stage discounted cash flow value per share in US cents, with enterprise and equity value, the terminal value's share and a 5 by 5 sensitivity grid over discount rate and terminal growth, built from the company's latest free cash flow, net debt and share count and the growth and discount rates given. Use this when the user asks what a company could be worth under stated assumptions. A null value means the inputs leave the model undefined, and the reason field says why.
| Name | Required | Description | Default |
|---|---|---|---|
| wacc | No | Discount rate as a decimal, 0.01 to 0.5; defaults to 0.09, e.g. 0.1. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company to value, e.g. AAPL. | |
| as_of_date | No | Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30. | |
| fcf_source | No | trend (default) grows starting free cash flow by stage1_growth_rate; three_statement projects linked statements instead, e.g. three_statement. | trend |
| stage1_years | No | Number of projection years, 3 to 15; defaults to 5, e.g. 10. | |
| shares_override | No | Share count used instead of the reported figure, above zero, e.g. 15000000000. | |
| fcf_base_override | No | Starting free cash flow in USD, used instead of the reported figure; trend mode only, e.g. 95000000000. | |
| stage1_growth_rate | Yes | Yearly growth in the projection years as a decimal, -0.5 to 1: of free cash flow (trend) or of revenue (three_statement), e.g. 0.08. | |
| terminal_growth_rate | No | Growth after the projection years as a decimal, -0.05 to 0.1; defaults to 0.025, e.g. 0.02. | |
| three_statement_assumptions | No | Overrides for three_statement mode; each unset field keeps its default, e.g. {"tax_rate": 0.25}. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| result | Yes | |
| ticker | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: a null result means the inputs leave the model undefined, and the reason field explains why. Return shape and the sensitivity grid are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return value, then the use case, then the null/reason edge case, so an agent gets the essential facts first. The first sentence is dense with many clauses, but each one carries information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter coverage, the description need not spell out returns or argument formats, yet it still summarizes outputs, the two-stage structure, the input sourcing and null semantics. Nothing needed to call this 10-parameter model correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with per-parameter bounds, defaults, enums and examples already in the schema, so the baseline is 3. The description links the growth/discount inputs to the sensitivity grid and names the reported inputs being consumed, but adds no per-parameter semantics beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific computation (two-stage DCF per share in US cents) and enumerates the exact outputs returned, including enterprise/equity value, terminal value share and a 5x5 sensitivity grid. This distinguishes it from siblings like get_valuation_metrics, compute_lbo and compute_accretion_dilution without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user asks what a company could be worth under stated assumptions" gives a clear triggering context and implicitly frames it as an assumption-driven model rather than a market-multiple lookup. It stops short of naming alternatives (e.g., get_valuation_metrics) or stating when not to use it, so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_lboLeveraged buyout returnsARead-onlyIdempotentInspect
Returns the sponsor's multiple of invested capital and internal rate of return for a leveraged buyout, with entry and exit enterprise value, debt, equity and a yearly projection, on an opening balance sheet built from the deal terms and the company's latest annual 10-K operating figures. Use this when the user asks what a buyout could return under stated purchase and exit multiples, leverage and hold period. EBITDA is approximated by operating income unless an entry figure is given, and a null rate means no rate fits the cash flows.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol or SEC CIK of the buyout target, e.g. AAPL. | |
| tax_rate | No | Tax rate on positive pretax income, 0 to 1; defaults to 0.21, e.g. 0.25. | |
| as_of_date | No | Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30. | |
| minimum_cash | No | Cash left on the opening balance sheet, in USD; defaults to 0, e.g. 1000000000. | |
| exit_multiple | No | Sale price as a multiple of the final year's EBITDA; defaults to entry_multiple, e.g. 12. | |
| cash_sweep_pct | No | Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 1, e.g. 0.75. | |
| entry_multiple | Yes | Purchase price as a multiple of EBITDA, above zero, e.g. 10. | |
| hold_period_years | No | Years from purchase to sale, 1 to 10; defaults to 5, e.g. 7. | |
| leverage_multiple | Yes | Debt raised at entry as a multiple of EBITDA, zero or more, e.g. 5. | |
| dividend_payout_pct | No | Share of each year's net income distributed to the sponsor, 0 to 1; defaults to 0, e.g. 0.2. | |
| revenue_growth_rate | Yes | Yearly revenue growth over the hold as a decimal, -0.5 to 1, e.g. 0.05. | |
| entry_ebitda_override | No | EBITDA in USD that sets the entry price and debt instead of operating income, e.g. 130000000000. | |
| interest_rate_on_debt | No | Interest rate on buyout debt at the start of each year, 0 to 0.5; defaults to 0.08, e.g. 0.09. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| result | Yes | |
| ticker | Yes | |
| seed_period_end | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so safety is covered. The description adds real modeling behavior beyond that: EBITDA is approximated by operating income unless an override is given, and a null rate means no rate fits the cash flows. It does not mention runtime cost, but for a read-only computation this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The output is front-loaded (what the tool returns first, then when to use it, then modeling caveats). It is a dense single long sentence, but every clause carries information and none is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter computational tool with an output schema and full annotation coverage, the description supplies the essential modeling conventions an agent needs. It is largely complete, though the relationships among the many leverage/cash-flow parameters are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning on top: it explains the EBITDA proxy rule tied to entry_ebitda_override and what a null result rate implies. It does not clarify the interaction between cash_sweep_pct and dividend_payout_pct, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (returns sponsor's MOIC and IRR for an LBO) plus the concrete outputs and inputs (entry/exit EV, debt, equity, yearly projection, 10-K opening balance sheet). This clearly distinguishes it from sibling compute tools like compute_dcf and compute_accretion_dilution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use this when the user asks what a buyout could return under stated purchase and exit multiples, leverage and hold period.' That is clear usage context, but it does not name alternatives (e.g. compute_dcf for a plain DCF) or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_schemaDataset field referenceARead-onlyIdempotentInspect
Returns the definitions of the dataset's tables: each table's description and its columns. Use this when the user asks what a field in another result means or which fields the data holds.
| Name | Required | Description | Default |
|---|---|---|---|
| table | No | Name of one table to describe; omit for all tables. An unknown name returns the valid names, e.g. entity. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| table | No | Single-table mode: the requested table name |
| tables | No | Full-schema mode: map of table name → { description, column_count, columns } |
| columns | No | Single-table mode: map of column name → definition |
| project | No | Full-schema mode: source project name |
| description | No | Single-table mode: the table's description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds essentially no behavioral context beyond that — the return content it describes overlaps with the output schema, and it says nothing about the table-omission fallback that the schema documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the resource being described is front-loaded before the usage guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return-value detail need not be restated, and a one-optional-param read-only tool is well covered by this description plus its annotations. Only minor gaps remain (e.g., it doesn't hint at the all-tables default behavior described in the schema).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single optional 'table' parameter, its pattern, and the unknown-name fallback are already fully documented in the schema. The description adds nothing about parameter behavior, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Returns the definitions of the dataset's tables') and enumerates what is returned (each table's description and its columns). This clearly distinguishes it from the sibling tools, which are all computation/analysis tools rather than metadata lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Use this when the user asks what a field in another result means or which fields the data holds.' That is clear context for invocation, though no when-not conditions or named alternatives are provided (arguably none exist among the siblings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forensic_auditForensic accounting checkARead-onlyIdempotentInspect
Returns forensic accounting scores from a company's two latest annual filings: a partial Beneish M-score (sales growth, total accruals and leverage growth), Sloan accruals, debt to equity, debt to assets and return on assets, and plain-language red flags, with the source filing. Use this when the user asks about earnings quality or accounting risk. The M-score is partial because some of its inputs are not in the dataset, and the result marks it so.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol or SEC CIK of the company to check, e.g. AAPL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| result | Yes | |
| ticker | Yes | |
| sec_url | Yes | |
| period_end | Yes | |
| source_filing | Yes | |
| prior_period_end | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe, read-only, idempotent profile. The description adds meaningful non-obvious context: the M-score is partial because some inputs are absent and the result marks this limitation, preventing misinterpretation of the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the return value and then the usage condition. It is slightly long because it enumerates every metric, but every clause carries specific information relevant to invoking the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and fully documented single parameter, the description provides all the context an agent needs: what is computed, what caveat to expect, and when to call it. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single ticker parameter, including CIK support and an example. The description adds no parameter-specific detail, so the baseline of 3 for high schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Returns'), resource ('forensic accounting scores'), and enumerates exactly what is computed: partial Beneish M-score components, Sloan accruals, leverage ratios, and red flags. This clearly separates it from generic siblings like get_financial_ratios or get_earnings_signals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear usage trigger: 'Use this when the user asks about earnings quality or accounting risk.' However, it does not name alternative tools or state when not to use it, leaving routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capital_allocation_profileCapital allocationARead-onlyIdempotentInspect
Returns, for each fiscal year from annual 10-K filings, operating cash flow, capital expenditures, free cash flow, R&D, acquisitions and divestitures, dividends, buybacks, debt issued and repaid, each use as a share of operating cash flow, and flags such as buybacks or total payouts exceeding free cash flow. Use this when the user asks where a company's cash goes or whether its payouts exceed its free cash flow.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30. | |
| lookback_years | No | Fiscal years to cover, counting back from the latest filing, 1 to 20; defaults to 5, e.g. 3. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Per-period capital-allocation rows: capex, R&D, M&A, dividends, buybacks, debt, and deployment-mix flags |
| note | No | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| as_of_date | No | |
| lookback_years | Yes | Number of fiscal years summarized |
| periods_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety is covered. The description still adds provenance the annotations do not: figures come from annual 10-K filings, are presented per fiscal year, and include derived flags (buybacks or total payouts exceeding free cash flow), which tells the agent the data is filing-sourced and point-in-time aware.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the returned fields and follows with a single imperative usage sentence — efficient and well-ordered. The field enumeration is long and largely mirrors the output schema, which is mild redundancy, but it is scannable rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return-value detail is not required, and the description still gives enough to know the tool's shape and the question it answers. Nothing critical is missing for invocation, though it never states filing-availability limits or what happens when fewer than lookback_years of 10-Ks exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so ticker, as_of_date, and lookback_years are already fully documented in the schema; baseline 3 applies. The description's mention of 'each fiscal year from annual 10-K filings' loosely reinforces the fiscal-year grain of lookback_years but adds no new syntax, defaults, or bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns ... operating cash flow, capital expenditures, free cash flow, R&D, acquisitions and divestitures, dividends, buybacks, debt issued and repaid') scoped to fiscal years from annual 10-K filings. This granularity clearly separates it from siblings like get_company_fundamentals, get_financial_ratios, and compute_dcf, which an agent could otherwise confuse with a cash-flow breakdown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering user intents: 'where a company's cash goes' and 'whether its payouts exceed its free cash flow.' That is clear when-to-use guidance, but it names no alternative sibling (e.g., get_financial_ratios for ratio-level views) nor any exclusion, so the agent must infer routing on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_fundamentalsCompany financial statementsARead-onlyIdempotentInspect
Returns reported figures from a company's 10-K or 10-Q filings by period: revenue, gross profit, operating income, net income, diluted EPS, total assets, liabilities, equity, cash, short-term investments, debt, operating cash flow, capital expenditures and shares outstanding, each tied to its source filing. Use this when the user asks what a company reported. It covers current and former S&P 500 companies over the most recent five fiscal years; margins and multiples come from get_valuation_metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of periods, 1 to 40; defaults to 5, e.g. 8. | |
| period | No | annual (10-K) or quarterly (10-Q); defaults to annual, e.g. quarterly. | annual |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30. | |
| fiscal_year | No | Fiscal year to return, four digits; omit for the most recent years, e.g. 2024. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| period | Yes | |
| ticker | Yes | |
| as_of_date | Yes | |
| company_name | Yes | |
| years_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the description is freed to add value - and it does by disclosing data lineage ('each tied to its source filing') and the coverage universe. It does not mention result ordering or how multiple periods are shaped, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the content of the return, then usage and scope in two short sentences; nothing is wasted. The long comma list of line items is dense but earns its place by telling the agent exactly what is retrievable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, a fully documented five-parameter schema, and an output schema, the description needs only to establish scope and lineage - which it does, including the five-year history limit and the S&P 500 universe. Only a note on multi-period result shape is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including period enum semantics (annual = 10-K, quarterly = 10-Q), the as_of_date point-in-time cutoff, and limit bounds. The description adds only 'by period', which duplicates the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (returns) and resource (reported figures from 10-K/10-Q filings), enumerates the returned line items, and explicitly contrasts itself with the sibling get_valuation_metrics. An agent can distinguish it from get_financial_ratios or get_valuation_metrics without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('Use this when the user asks what a company reported'), names the alternative for margin/multiple questions, and states coverage bounds (current and former S&P 500, five fiscal years). That is when-to-use plus routing to a sibling, which is the top bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earnings_signalsEarnings trend signalsARead-onlyIdempotentInspect
Returns, by fiscal period, reported EPS and revenue, revenue growth year over year, a trend EPS estimate built from the company's own past EPS and the gap between actual and trend, plus 1, 3, 6 and 12-month price momentum and the 52-week high and low. Use this when the user asks about a company's earnings trajectory or price momentum. The trend estimate is not analyst consensus, so the gap is not a beat or miss against forecasts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of periods, newest first, 1 to 40; defaults to 8, e.g. 4. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: only periods filed on or before this date, e.g. 2024-06-30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| as_of_date | No | |
| estimate_basis | Yes | |
| periods_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds meaningful behavioral context beyond that: the trend estimate is derived from the company's own past EPS rather than analyst consensus, so the actual-vs-trend gap must not be read as a beat/miss. That caveat prevents real misinterpretation of the returned data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all load-bearing: the first lists returned fields, the second gives the usage trigger, the third supplies the key semantic caveat. Front-loaded around what the tool returns and zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out in prose, and the description still summarizes them. For a 3-parameter read-only tool, purpose, trigger, and the consensus-vs-trend caveat cover everything an agent needs before calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so ticker, limit (1-40, default 8, newest first), and as_of_date (point-in-time cutoff) are already fully documented in the schema. The description adds no parameter-level detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (returns) and enumerates the exact resource: reported EPS and revenue by fiscal period, YoY revenue growth, a trend EPS estimate with the actual-vs-trend gap, 1/3/6/12-month momentum, and the 52-week range. It even carves out what the trend estimate is not (analyst consensus), which helps separate it from forecast-based siblings. It does not name a sibling tool outright, so it falls short of the full-sibling-differentiation bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear positive trigger: 'Use this when the user asks about a company's earnings trajectory or price momentum.' That maps the tool to an intent cleanly. There is no explicit when-not guidance or named alternative (e.g., get_company_fundamentals for raw fundamentals, get_price_history for pure price series), so it stops at clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financial_ratiosFinancial ratiosARead-onlyIdempotentInspect
Returns a company's computed ratios by period, annual and trailing twelve months, in groups: profitability, liquidity, leverage, efficiency, per share, owner earnings, forensic, growth, sector rank and valuation, each with value, unit and a reason when missing. Use this when the user asks for a company's ratios or how they changed over time. It covers current and former S&P 500 companies over the most recent five fiscal years; ranking against other companies comes from screen_universe.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of period-end dates to return, 1 to 20; defaults to 5, e.g. 3. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| as_of_date | No | Historical cutoff, YYYY-MM-DD: ratios filed by this date, or for periods ending by it when no filing date is held, e.g. 2024-06-30. | |
| categories | No | Groups to include: profitability, liquidity, leverage, efficiency, per_share, owner_earnings, forensic, growth, rank or valuation; omit for all, e.g. ["profitability"]. | |
| fiscal_period | No | Period type: FY, TTM, Q1, Q2, Q3 or Q4; omit for FY and TTM rows, e.g. TTM. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| lineage | No | Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run). |
| periods_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavioral context beyond that: coverage universe (current and former S&P 500 companies), the five-fiscal-year window, and the missing-value convention ('each with value, unit and a reason when missing').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and scope before the usage trigger and coverage caveat, with no filler sentences. The ten-group enumeration is long and partially duplicates the schema's enum, which is the only real cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it still covers scope, period semantics, coverage universe and the ranking alternative. Nothing essential to correct invocation is missing, though the boundary against valuation/fundamentals siblings is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, ticker, as_of_date, categories and fiscal_period are all documented in the schema with examples and ranges. The description restates the group names and the FY/TTM default behavior but adds no syntax or format detail the schema lacks, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns a company's computed ratios') scoped by period type (annual and TTM), and enumerates the ratio groups, so an agent knows exactly what comes back. It also distinguishes itself from the sibling that handles ranking ('ranking against other companies comes from screen_universe').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user asks for a company's ratios or how they changed over time' gives a clear trigger, and the note that ranking lives in `screen_universe` routes one adjacent need to a sibling. It stops short of excluding other lookalikes such as get_valuation_metrics or get_company_fundamentals, so there is no full when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_peer_comparablesPeer comparisonARead-onlyIdempotentInspect
Returns a company's latest ratios beside those of up to 10 peers from the same SIC industry, closest code match first and S&P 500 members preferred, using trailing twelve months where available. Use this when the user asks how a company compares with its competitors. It covers current and former S&P 500 companies, so peers come from that set.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of peers besides the company, 1 to 10; defaults to 5, e.g. 8. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company to compare, e.g. AAPL. | |
| as_of_date | No | Historical cutoff, YYYY-MM-DD: ratios known by this date, with peers ranked by index membership on it, e.g. 2024-06-30. | |
| categories | No | Groups to include: profitability, liquidity, leverage, efficiency, per_share, owner_earnings or valuation; defaults to profitability, valuation and leverage, e.g. ["valuation"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | One row per company (subject + peers): ticker, cik, name, sector, industry, is_subject, ratios |
| note | No | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| lineage | No | Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run). |
| subject | Yes | Subject ticker the peer set is built around |
| as_of_date | No | |
| categories | Yes | Ratio categories included in each peer panel |
| peers_returned | Yes | |
| subject_ratios | No | The subject company's ratio panel |
| period_end_before | No | |
| peers_omitted_no_data | No | Candidate peers left out because they had no ratio figures for the period; each was replaced by the next-closest candidate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds genuinely non-obvious behavior: peer ranking by closest SIC code match, S&P 500 preference, TTM data where available, and the universe limitation to current and former S&P 500 members.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is returned, then when to use it, then the universe constraint. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-format detail is unnecessary. Between the description, full schema coverage, and annotations, an agent has everything needed to decide when to call this and how peers are chosen and ordered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description layers on semantics the schema lacks: the ordering rule affecting the 'limit' selection (closest code first) and the TTM/'where available' caveat that qualifies the ratios returned relative to as_of_date.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('returns a company's latest ratios beside those of up to 10 peers') plus the peer-selection scope (same SIC industry, S&P 500 preferred, TTM basis). This is clearly distinguishable from sibling ratio tools like get_financial_ratios, which cover a single company without peer context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this when the user asks how a company compares with its competitors' gives clear triggering context. It does not name an alternative for the single-company case (e.g. get_financial_ratios) or state exclusions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pit_universeIndex membership on a dateARead-onlyIdempotentInspect
Returns the companies in the S&P 500, a Russell index or a sector on a given date, including members that later left or delisted, with CIK, ticker, name, sector, industry and a confidence label, plus the full member count. Use this when the user asks who was in an index on a past date or whether a company was a member then. It covers current and former S&P 500 companies, and a long list arrives in pages of at most 250 rows.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Index to list: sp500, russell1000, russell2000 or russell3000; omit for no index filter, e.g. sp500. | |
| limit | No | Maximum number of members to return, 1 to 3500; defaults to 100, e.g. 505. | |
| offset | No | Rows to skip when paging through a long list; defaults to 0, e.g. 250. | |
| sector | No | Sector name to match, case-insensitive partial match, e.g. Technology. | |
| is_active | No | true keeps only companies still trading today, which drops members that later delisted; omit to keep all, e.g. true. | |
| as_of_date | No | Date the membership applies to, YYYY-MM-DD; omit for the current universe, e.g. 2022-12-30. | |
| as_of_basis | No | Which dates decide membership: effective (default, when a change took effect) or announcement (when it was announced), e.g. announcement. | effective |
| include_share_classes | No | true returns one row per share class instead of one per company; defaults to false, e.g. true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| index | Yes | |
| sector | Yes | |
| complete | Yes | |
| coverage | Yes | |
| companies | Yes | |
| as_of_date | Yes | |
| truncation | No | Present only when the inline-row cap withheld rows. Page with `next_offset` (keep the same `limit`) or pull the full set via get_compute_ready_stream. |
| as_of_basis | Yes | |
| coverage_gap | Yes | |
| returned_rows | Yes | |
| universe_size | Yes | |
| limit_truncated | Yes | |
| survivorship_free | Yes | |
| confidence_summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful context beyond that: it includes former/delisted members, lists returned fields, mentions a confidence label and full member count, and discloses pagination behavior, though the page-size claim is potentially inconsistent with the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences are front-loaded with purpose, then usage, then pagination. Each sentence adds a distinct piece of information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, and annotations cover safety. The description covers purpose, usage condition, and pagination for an eight-parameter optional-filter query, though it does not explain how filters combine.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters with defaults, ranges, and examples. The description's only parameter-adjacent addition is 'a long list arrives in pages of at most 250 rows', which conflicts with the schema's limit maximum of 3500, and it adds no other meaningful parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('companies in the S&P 500, a Russell index or a sector on a given date'), with explicit temporal and former-member scope. It is clearly distinct from a current-universe screen, but it does not name a sibling alternative like screen_universe to fully differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a clear trigger: 'Use this when the user asks who was in an index on a past date or whether a company was a member then.' It does not name alternatives or state when not to use it, so it stops 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_price_historyMonth-end price historyARead-onlyIdempotentInspect
Returns a company's month-end closing prices over a date range, oldest first, one bar per completed month with the unadjusted close in USD, dividend cash, split factor and a total-return index; open, high, low and volume are empty. Use this when the user asks how a stock's price or total return moved over months or years. Closes are not split-adjusted, so the return between two dates is the ratio of their total-return index values minus one.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of month-end bars, 1 to 360; defaults to 252. The most recent bars in the range are kept, e.g. 60. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| end_date | No | Last date of the range, YYYY-MM-DD; omit for the latest completed month, e.g. 2024-12-31. | |
| start_date | No | First date of the range, YYYY-MM-DD; omit to take the latest limit months up to end_date, e.g. 2021-01-01. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| bars | Yes | |
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| end_date | Yes | |
| bar_count | Yes | |
| start_date | Yes | |
| granularity | Yes | |
| company_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe-read profile (readOnly, idempotent, non-destructive), and the description adds genuinely non-obvious behavior: closes are NOT split-adjusted, and the correct return between two dates is the ratio of total-return index values minus one. It also discloses output ordering and empty fields, which an agent could otherwise misread.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and returned content, then usage, then the critical split-adjustment caveat as the last sentence. The first sentence is dense with a long field list but no sentence is filler; slightly heavy compared to a leaner two-sentence version.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still supplies the interpretive context an agent needs: what an empty OHLC/volume means, ordering, and how to compute returns from the unadjusted closes/TRI. Nothing required 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so ticker, start_date, end_date and limit semantics (default 252, max 360, most-recent-bars-retained) are fully documented in the schema. The description adds only the loose phrase 'over a date range' and does not meaningfully extend parameter understanding, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with granularity: 'Returns a company's month-end closing prices over a date range, oldest first, one bar per completed month.' It also enumerates the returned fields (unadjusted close, dividend cash, split factor, total-return index) and notes that OHLC/volume are empty, which clearly separates it from daily-price siblings like get_stock_price.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Use this when the user asks how a stock's price or total return moved over months or years.' That's a clear usage context, but it names no alternative tool (e.g. get_stock_price for daily bars) and states no when-not condition, so the routing decision is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sec_filing_linksSEC filing linksARead-onlyIdempotentInspect
Returns a company's SEC filings, newest first, each with form type, filing and report dates, accession number and links to the EDGAR index page, the filing document and the inline XBRL viewer. Use this when the user wants the original 10-K, 10-Q, 8-K, 20-F or 40-F filings behind the numbers. Filings cover the most recent five fiscal years; to trace one figure to its filing, verify_fact_lineage fits.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of filings, 1 to 50; defaults to 10, e.g. 20. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| end_date | No | Latest filing date to include, YYYY-MM-DD, e.g. 2024-12-31. | |
| form_types | No | Forms to include: 10-K, 10-Q, 8-K, 20-F, 40-F or their /A amendments; defaults to 10-K and 10-Q, e.g. ["8-K"]. | |
| start_date | No | Earliest filing date to include, YYYY-MM-DD, e.g. 2024-01-01. | |
| event_types | No | 8-K item numbers to match; filings without a matching item are left out, e.g. ["2.02"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | Yes | |
| filings | Yes | |
| filings_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description still adds real behavioral context beyond them: result ordering ('newest first') and, importantly, a coverage limit ('Filings cover the most recent five fiscal years') that tells the agent results can silently truncate. It omits pagination/max-result behavior, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the capability and payload, then usage and the alternative-tool pointer. No filler, no restatement of the title, and the tool-routing sentence is placed last where it belongs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a filtered read tool with annotations and an output schema, this is nearly complete: it covers ordering, coverage window and when to reach for it. The one gap is that the description implies all filings while the schema default restricts form_types to 10-K and 10-Q, a default the prose never flags.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is an output schema, so the schema already documents ticker, limit, date bounds, form_types and event_types with examples. The description restates the form-type vocabulary and date-window semantics but adds no syntax or constraint detail the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource ('Returns a company's SEC filings') and immediately enumerates the returned payload (form type, filing/report dates, accession number, EDGAR index/document/inline XBRL links) plus ordering ('newest first'). An agent can distinguish this from verify_fact_lineage or get_company_fundamentals without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the selection condition ('when the user wants the original 10-K, 10-Q, 8-K, 20-F or 40-F filings behind the numbers') and names the alternative tool for the adjacent need ('to trace one figure to its filing, verify_fact_lineage fits'). This is the when-to-use / use-instead pattern at full strength.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_priceMonth-end stock priceARead-onlyIdempotentInspect
Returns one of a company's month-end closing prices: the unadjusted close in USD on the last trading day of the latest completed month on or before a date, with the dividend and split factors and a total-return index. Use this when the user asks what a stock traded at around a date. The month in progress is not included; a run of month-ends comes from get_price_history.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date to price as of, YYYY-MM-DD; omit for the latest completed month-end, e.g. 2024-06-15. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cik | Yes | |
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| close | Yes | |
| ticker | Yes | |
| currency | Yes | |
| div_cash | Yes | |
| price_date | Yes | |
| granularity | Yes | |
| company_name | Yes | |
| split_factor | Yes | |
| requested_date | Yes | |
| resolved_backward | Yes | |
| total_return_index | No | |
| is_exact_date_match | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive and closed-world, so the safety profile is handled. The description adds real behavioral context: what exactly is returned (unadjusted close, dividend/split factors, total-return index) and the important edge case that the current month is excluded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the return definition, then usage, then the alternative tool and exclusion. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, no nesting) and an output schema exists, so return-value explanation isn't required. The description still covers semantics, edge cases, and routing to the sibling, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the date acts as an 'as-of' anchor snapped back to the last completed month-end rather than an exact trading day. That clarifies selection behavior the schema alone doesn't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns ... month-end closing prices') with precise scope: unadjusted USD close on the last trading day of the latest completed month. It implicitly contrasts with get_price_history's series, so an agent can distinguish it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('when the user asks what a stock traded at around a date'), states an exclusion (the month in progress is not included), and names the alternative tool for a run of month-ends (get_price_history).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_valuation_metricsValuation and profitabilityARead-onlyIdempotentInspect
Returns, by fiscal period, margins, return on equity, assets and invested capital, free cash flow and its margin, debt to equity, market multiples at period end (price, market cap, P/E, P/B, EV/EBITDA, dividend yield) and two assumption-free reference values, the Graham number and net current asset value per share. Use this when the user asks what a company trades at or how profitable it is. An intrinsic value under stated assumptions comes from compute_dcf.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of periods, 1 to 40; defaults to 5, e.g. 8. | |
| period | No | annual (10-K) or quarterly (10-Q); defaults to annual, e.g. quarterly. | annual |
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30. | |
| fiscal_year | No | Fiscal year to return, four digits; omit for the most recent years, e.g. 2024. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| period | Yes | |
| ticker | Yes | |
| as_of_date | Yes | |
| periods_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, so the safety profile is covered. The description adds genuine context beyond that: it labels the Graham number and NCAV as 'assumption-free reference values' and notes multiples are measured 'at period end', which clarifies interpretation. No mention of auth, rate limits, or stale-data behavior, but the annotation bar is met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return contents and then the usage trigger, so the most decision-relevant information leads. The first sentence is very dense with metric names, but each clause maps to a distinct data family rather than being filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full annotation coverage, the description needn't explain return shape; it nonetheless enumerates the metric families, which aids tool selection. It also routes to compute_dcf for valuation-with-assumptions. Nothing an agent needs to invoke it correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters (limit, period, ticker, as_of_date, fiscal_year) are documented with examples and ranges; baseline 3 applies. The description adds only light semantics via 'by fiscal period' and 'at period end', which map loosely to period/fiscal_year and as_of_date but give no format or edge-case detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Returns, by fiscal period, margins, ROE, ROA, ROIC, FCF, debt-to-equity, market multiples...') and enumerates the metric families so an agent knows exactly what data comes back. It also distinguishes itself from compute_dcf, which handles assumption-based intrinsic value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use this when the user asks what a company trades at or how profitable it is') and names the alternative tool with the condition that selects it ('An intrinsic value under stated assumptions comes from compute_dcf'). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_restatementsFinancial restatementsARead-onlyIdempotentInspect
Returns restatement events: reported figures that a later SEC filing changed by more than 0.5%, each with the original and restated values, the change, a severity, the XBRL tag, both filings' accession numbers and how it was disclosed (non-reliance 8-K, amended filing, or a routine filing). Use this when the user asks whether or how a company's past numbers were revised. A revision in a routine filing describes the filing record, not the company's intent.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | recent (default, newest restating filing first) or significance (importance, then size of change), e.g. significance. | recent |
| limit | No | Events per page, 1 to 100; defaults to 25, e.g. 50. | |
| cursor | No | Paging cursor copied from next_cursor in the previous result, e.g. 25. | |
| sector | No | Sector name to limit results to, matched in full but case-insensitive, e.g. Technology. | |
| ticker | No | Ticker symbol or SEC CIK to limit results to one company, e.g. AAPL. | |
| event_id | No | Id of one event from an earlier result, lowercase hex, e.g. 3f9a0c12. | |
| severity | No | high (change of 10% or more), medium (2% or more) or low (0.5% or more), e.g. high. | |
| disclosure | No | Disclosure types to include: non_reliance (8-K Item 4.02), amended, or undisclosed (a routine 10-K or 10-Q), e.g. ["amended"]. | |
| filed_since | No | Earliest date of the restating filing, YYYY-MM-DD, e.g. 2024-01-01. | |
| max_importance | No | 1 keeps headline figures only, 2 adds primary statement lines, 3 includes footnotes, e.g. 1. | |
| amendments_only | No | true keeps only changes that arrived in an amended 10-K/A or 10-Q/A, e.g. true. | |
| min_abs_delta_pct | No | Smallest absolute change to include, in percent from 0 to 100, e.g. 5. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| total | Yes | |
| events | Yes | |
| next_cursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/destructive=false, so the safety profile is covered. The description adds genuinely useful non-schema context: the 0.5% inclusion threshold, the disclosure taxonomy in plain terms (non-reliance 8-K, amended filing, routine filing), and an interpretive caveat that a routine-filing revision describes the filing record rather than company intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with scope and threshold before the usage trigger and caveat. Every sentence earns its place, though the field enumeration could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, yet the description still summarizes the payload (original/restated values, change, severity, XBRL tag, accession numbers, disclosure). Combined with the threshold definition and disclosure taxonomy, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every one of the 12 parameters carries its own definition and example, so the schema does the heavy lifting. The description adds no parameter-level syntax or semantics beyond what the schema already provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (restatement events) with a precise threshold definition (figures a later SEC filing changed by more than 0.5%) and enumerates the returned fields. An agent can distinguish this from siblings like forensic_audit or verify_fact_lineage without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when the user asks whether or how a company's past numbers were revised" gives a clear triggering condition. It stops short of naming alternatives (e.g., forensic_audit, verify_fact_lineage) or stating when not to use it, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_three_statementThree-statement projectionARead-onlyIdempotentInspect
Returns a linked income statement, balance sheet and cash flow for each projected year, seeded from the company's latest annual 10-K figures, with a yearly check that the balance sheet balances and the free cash flow stream. Use this when the user wants to see how a company's statements could develop under growth, margin, financing and payout assumptions they choose. Margins and capital spending stay at the latest year's share of revenue unless overridden; interest and tax rates are the user's assumptions.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Years to project, 1 to 15; defaults to 5, e.g. 10. | |
| ticker | Yes | Ticker symbol or SEC CIK of the company to project, e.g. AAPL. | |
| tax_rate | No | Tax rate on positive pretax income, 0 to 1; defaults to 0.21, e.g. 0.25. | |
| as_of_date | No | Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30. | |
| cash_sweep_pct | No | Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 0, e.g. 0.5. | |
| dividend_payout_pct | No | Share of each year's net income distributed as dividends, 0 to 1; defaults to 0, e.g. 0.3. | |
| new_debt_draw_year1 | No | New debt borrowed in the first projected year, in USD; defaults to 0, e.g. 5000000000. | |
| revenue_growth_rate | Yes | Yearly revenue growth as a decimal, -0.5 to 1, e.g. 0.08. | |
| interest_rate_on_debt | No | Interest rate on debt at the start of each year, 0 to 0.5; defaults to 0.06, e.g. 0.05. | |
| new_equity_draw_year1 | No | New equity raised in the first projected year, in USD, added to cash and equity; defaults to 0, e.g. 2000000000. | |
| gross_margin_pct_override | No | Gross margin for every projected year; omit to keep the latest year's, e.g. 0.45. | |
| capex_pct_of_revenue_override | No | Capital spending as a share of revenue; omit to keep the latest year's, e.g. 0.03. | |
| operating_margin_pct_override | No | Operating margin for every projected year; omit to keep the latest year's, e.g. 0.3. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| result | Yes | |
| ticker | Yes | |
| seed_period_end | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral detail beyond them: figures are seeded from the latest annual 10-K, a yearly balance-sheet check is performed, and margins/capex hold the latest year's share unless overridden while interest and tax rates are user assumptions. It doesn't cover failure modes, such as what happens if no acceptable 10-K exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the return payload and the seed data source, then usage, then defaulting rules. Dense but every sentence carries relevant information; the first sentence is slightly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and all 13 parameters are documented in the schema. The description supplies the usage context and defaulting semantics an agent needs; only edge-case behavior (missing filings, balance-check failure handling) is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes beyond it by explaining cross-parameter behavior — that gross/operating margin and capex overrides default to the latest year's share of revenue, and that interest and tax rates are treated as user assumptions rather than derived.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns a linked income statement, balance sheet and cash flow for each projected year, seeded from the latest 10-K. This clearly separates it from siblings like compute_dcf or compare_periods, which produce valuations or historical comparisons rather than projected statements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: 'when the user wants to see how a company's statements could develop under growth, margin, financing and payout assumptions they choose.' It gives clear context but names no alternatives or when-not-to-use conditions (e.g. versus compute_dcf).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_universeFactor screenARead-onlyIdempotentInspect
Returns companies ranked by factor scores: return on equity, gross, operating and net margin, revenue growth, free cash flow to assets, debt to equity, asset turnover, current ratio and Piotroski F-score, each with a percentile rank from 0 (worst) to 1 (best), plus a composite rank. Use this when the user wants companies ranked or filtered by quality or growth, or where one company ranks. It covers current and former S&P 500 companies; one company's ratios over time come from get_financial_ratios.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of companies to return, 1 to 100; defaults to 25, e.g. 10. | |
| offset | No | Rows to skip from the top of the limit results; defaults to 0, e.g. 10. | |
| sector | No | Sector name to match, case-insensitive partial match, e.g. Technology. | |
| ticker | No | Ticker symbol or SEC CIK to show one company's scores; omit to rank all companies, e.g. AAPL. | |
| sort_by | No | Rank to sort by, such as composite_rank (the default), roe_rank or piotroski_f_score_rank, e.g. roe_rank. | composite_rank |
| as_of_date | No | Point-in-time cutoff, YYYY-MM-DD: each company ranked on what it had filed by this date, e.g. 2024-06-30. | |
| exclude_outliers | No | true also drops rows with implausible factor values, such as near-zero denominators; defaults to false, e.g. true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Ranked factor-score rows for the screened universe |
| note | No | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| ticker | No | Present only when a single-ticker lookup was requested |
| lineage | No | Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run). |
| sort_by | Yes | |
| pit_safe | No | Present (and true) only when as_of_date was supplied — the screen was filtered by factor_scores.accepted_at with zero look-ahead |
| as_of_date | No | Present only when a point-in-time as_of_date was supplied |
| truncation | No | Present only when the inline-row cap withheld rows. Page with `next_offset` (keep the same `limit`) or pull the full set via get_compute_ready_stream. |
| sector_filter | No | Present only when a sector filter was applied |
| results_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, read-only operation with no destructive side effects and a closed universe. The description adds useful behavioral context beyond annotations: the universe is current and former S&P 500 companies, and results include percentile ranks from 0 to 1 plus a composite rank, which signals what the return values look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with what the tool returns, followed by when to use it, then scope and the sibling alternative. Every sentence contributes: the factor list is dense but necessary for a screening tool, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, 100% schema coverage, and the presence of an output schema, the description provides everything an agent needs: purpose, ranked-output semantics, usage context, universe scope, and a clear pointer to the right sibling for time-series ratios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters in detail, including defaults, bounds, enums, and examples. The description adds no parameter-level detail beyond naming the factors, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource (returns companies ranked by factor scores) and enumerates the factors covered, plus the composite rank. It distinguishes the tool from siblings by noting the one-company time-series alternative get_financial_ratios, so an agent can tell it apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: when the user wants companies ranked or filtered by quality or growth, or where one company ranks. It names one alternative for a related need (get_financial_ratios for one company's ratios over time), but does not give explicit exclusions versus other sibling screeners like get_peer_comparables or get_valuation_metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesCompany searchARead-onlyIdempotentInspect
Returns companies matching a name, ticker, CIK or SIC code, with CIK, ticker, name, sector, industry, exchange, listing status and current S&P 500 membership. Use this when the user names a company and other tools need its ticker or CIK, or asks for current S&P 500 members. It covers current and former S&P 500 companies; membership on a past date comes from get_pit_universe.
| Name | Required | Description | Default |
|---|---|---|---|
| cik | No | SEC CIK to match exactly, digits only, leading zeros optional, e.g. 0000320193. | |
| limit | No | Maximum number of results, 1 to 50; defaults to 25, e.g. 10. | |
| query | No | Text matched against company names and tickers, case-insensitive; an all-digit value matches a CIK exactly, e.g. Apple. | |
| is_sp500 | No | true to return current S&P 500 members only, e.g. true. | |
| sic_code | No | Four-digit SIC industry code to match exactly, e.g. 7372. | |
| is_active | No | true for current listings only, false for delisted or superseded listings only; omit for both, e.g. true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| query | Yes | |
| companies | Yes | |
| coverage_note | No | Present only when no company matched: what this connector covers. |
| results_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real behavioral context beyond that: it discloses the temporal scope (current and former S&P 500 members) and explicitly routes point-in-time membership elsewhere. It does not discuss result ordering or pagination, but the limit parameter and output schema mitigate that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what is returned, followed by the routing rule. No wasted clauses; every sentence carries selection-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, annotations covering the safety profile, and 100% schema description coverage, the description only needs to add scope and routing — which it does cleanly, including the S&P 500 caveat. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions including examples, so the schema does the heavy lifting. The description only groups the identifier types (name, ticker, CIK, SIC) and adds nothing about format, precedence, or empty-query behavior — the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (returns) and resource (companies) plus the exact matching keys (name, ticker, CIK, SIC) and the fields returned (CIK, ticker, sector, exchange, S&P 500 membership). The scope statement about current vs. former S&P 500 companies clearly separates it from get_pit_universe.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the triggering situation ('when the user names a company and other tools need its ticker or CIK') and the alternative for the adjacent case ('membership on a past date comes from get_pit_universe'). Both when-to-use and when-to-use-something-else are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_fact_lineageTrace a figure to its filingARead-onlyIdempotentInspect
Returns one reported figure with its source: company, concept, value, unit, period, form type, filing date, accession number and links to the filing on SEC EDGAR. Use this when the user asks which filing reported a number, by fact_id from an earlier result or by concept for the latest value. A figure from a specific period is traced by the fact_id get_company_fundamentals returns for it, and many fact_ids at once by verify_facts.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | Ticker symbol or SEC CIK of the company, e.g. AAPL. | |
| concept | No | Standard concept whose latest reported value to trace, used when no fact_id is given, e.g. TotalRevenue. | |
| fact_id | No | 64-character lowercase hex fact_id from an earlier result; give this or concept, e.g. 8a02707ced0d5a157ed2cdb28df035e52250daf4d0699952f7fc5420e1ce3afa. | |
| as_of_date | No | Cutoff used with concept, YYYY-MM-DD: the latest value filed on or before this date; a filing date, not a period end, e.g. 2024-06-30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| lineage | No | Full provenance for one fact. Identity: fact_id, entity_id, ticker, company_name, concept, standard_concept, accession_id. Filing: source_url, inline_viewer_url, document_url, filing_date, form_type, accepted_at. Duration: period_start, period_end, period_span_days, and period_type (instant | quarterly | half_year | nine_month | annual | duration) so a 3-month stub is never mistaken for the 12-month figure — a 10-K tags BOTH at the same period_end. |
| verified | Yes | True when the fact was located and its provenance resolved |
| lookup_by | Yes | How the fact was located: 'fact_id' or 'concept' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and closed-world behavior, so the safety profile is covered. The description adds little beyond the schema about behavior — no rate limits, auth notes, or edge cases (e.g. what happens when neither concept nor fact_id resolves).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the return contents and then the usage rule. The field enumeration partly duplicates the output schema, but the routing guidance earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values in detail, and annotations plus full schema coverage carry the rest. It is complete enough to call correctly, missing only edge-case behavior for unresolved inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: fact_id comes from an earlier get_company_fundamentals result, concept traces the latest value, and the fact_id/concept alternative is framed as a selection rule. That is useful beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Returns one reported figure with its source') and enumerates the returned fields, so an agent knows exactly what comes back. It is clearly differentiated from verify_facts (many figures) and get_company_fundamentals (the source of fact_ids).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger ('when the user asks which filing reported a number') and routes to the two relevant alternatives for the single-figure and bulk cases. It does not state exclusions or when-not-to-use, so it falls short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_factsTrace many figures to filingsARead-onlyIdempotentInspect
Returns, for up to 50 fact_ids in one call, each figure's source filing or a not-found code and message, plus counts of requested, found and missing. Use this when the user wants a list of cited figures checked against SEC filings. Duplicate pairs are checked once, and a lookup by concept rather than fact_id comes from verify_fact_lineage.
| Name | Required | Description | Default |
|---|---|---|---|
| facts | Yes | 1 to 50 pairs of ticker and fact_id to check, e.g. [{"ticker": "AAPL", "fact_id": "8a02707ced0d5a157ed2cdb28df035e52250daf4d0699952f7fc5420e1ce3afa"}]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| _meta | Yes | Provenance envelope — data lineage for every MCP response |
| results | Yes | Check `found` before reading `lineage`. |
| summary | Yes | Counts over `results`. Quote `missing` when reporting coverage — it is the number of figures you could NOT tie to a filing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description earns credit for adding per-item failure handling (not-found code and message), batch-size cap, and dedup semantics ("Duplicate pairs are checked once") — behavior an agent cannot read off the annotations. It stops short of noting rate limits or what a partial-failure response looks like in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler; the return shape and batch limit are front-loaded, followed by the usage trigger and the sibling disambiguation. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no elaboration, yet the description still flags the not-found code path and counts. All an agent needs to call this correctly — input shape, batch cap, dedup behavior, and the alternative for concept-based lookups — is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents `facts`, ticker format, fact_id hex pattern, and maxItems 50, so baseline is 3. The description adds the dedup rule for duplicate ticker/fact_id pairs, which is genuinely new semantic information not expressible in the schema, lifting this above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns each figure's source filing or a not-found code, plus found/missing counts, for up to 50 fact_ids. It explicitly distinguishes itself from the sibling `verify_fact_lineage` by input type (fact_id vs concept), so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use trigger ("when the user wants a list of cited figures checked against SEC filings") and names the alternative tool with the condition that selects it ("a lookup by concept rather than fact_id comes from `verify_fact_lineage`"). No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
list_restatements2 fields changed- added
Output schema / properties / events / items / properties / current_is_inline_xbrlAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / first_is_inline_xbrlAdded value: +{ + "type": "boolean" +}
5 tool updates
- Changed
get_company_fundamentals4 fields changed- removed
Input schema / properties / lineage_detailRemoved value: -{ - "default": "compact", - "description": "Source detail per period: compact (default, filing and links), full (adds filing timestamps and inputs) or off, e.g. full.", - "enum": [ - "off", - "compact", - "full" - ], - "type": "string" -} - removed
Input schema / properties / min_confidenceRemoved value: -{ - "description": "Withhold figures whose confidence score, 0 to 1, is below this; scores drop for failed accounting checks or later revisions, e.g. 0.95.", - "maximum": 1, - "minimum": 0, - "type": "number" -} - removed
Input schema / properties / response_formatRemoved value: -{ - "default": "flat", - "description": "flat (default) or envelope, which adds one record per figure with value, unit, period and source, e.g. envelope.", - "enum": [ - "flat", - "envelope" - ], - "type": "string" -} - removed
Input schema / properties / strictRemoved value: -{ - "default": false, - "description": "true returns an error instead of fewer periods when coverage cannot supply limit periods; defaults to false, e.g. true.", - "type": "boolean" -}
- Changed
get_financial_ratios1 field changed- removed
Input schema / properties / period_end_beforeRemoved value: -{ - "description": "Older name for as_of_date, same format and meaning; as_of_date wins when both are set, e.g. 2024-06-30.", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "type": "string" -}
- Changed
get_peer_comparables1 field changed- removed
Input schema / properties / period_end_beforeRemoved value: -{ - "description": "Older name for as_of_date, same format and meaning; as_of_date wins when both are set, e.g. 2024-06-30.", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "type": "string" -}
- Changed
search_companies2 fields changed- removed
Input schema / properties / include_inactiveRemoved value: -{ - "default": true, - "description": "Whether delisted or superseded listings may appear; defaults to true and is ignored when is_active is set, e.g. false.", - "type": "boolean" -} - added
Output schema / properties / coverage_noteAdded value: +{ + "description": "Present only when no company matched: what this connector covers.", + "type": "string" +}
- Changed
verify_fact_lineage2 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Cutoff used with concept, YYYY-MM-DD: the latest value filed on or before this date, e.g. 2024-06-30."New value: +"Cutoff used with concept, YYYY-MM-DD: the latest value filed on or before this date; a filing date, not a period end, e.g. 2024-06-30." - removed
Input schema / properties / period_endRemoved value: -{ - "description": "Older name for as_of_date, same format and meaning: a filing cutoff, not a period end, e.g. 2024-06-30.", - "pattern": "^\\d{4}-\\d{2}-\\d{2}$", - "type": "string" -}
121 tool updates
- Removed
approve_staged_action - Removed
cancel_scheduled_task - Changed
compare_periods19 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time date (YYYY-MM-DD). Only returns facts with accepted_at on or before this date — eliminates look-ahead bias for backtesting."New value: +"Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / period_a / descriptionPrevious value: -"Earlier fiscal period. Format: 'FY2023' for annual or 'Q1-2023' for quarterly."New value: +"Earlier period: FY and the year, or Q1 to Q4, a hyphen and the year, e.g. FY2023." - changed
Input schema / properties / period_b / descriptionPrevious value: -"Later fiscal period. Format: 'FY2024' for annual or 'Q1-2024' for quarterly."New value: +"Later period, in the same format as period_a, e.g. FY2024." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT, BRK.B — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Changed
compute_accretion_dilution26 fields changed- changed
Input schema / properties / acquirer_share_price_override / descriptionPrevious value: -"Override the acquirer's live EOD close. Leave unset to use the latest R2-derived price."New value: +"Acquirer share price in USD used instead of its month-end close, e.g. 420." - changed
Input schema / properties / acquirer_ticker / descriptionPrevious value: -"Acquirer's stock ticker symbol, e.g. MSFT."New value: +"Ticker symbol or SEC CIK of the acquiring company, e.g. MSFT." - changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD) for both companies' fundamentals + prices. Omit to use the latest knowable data."New value: +"Point-in-time cutoff for both companies, YYYY-MM-DD: filings accepted and closes on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / cash_financing_source / descriptionPrevious value: -"Where the cash consideration is funded from. \"new_debt\" (default) applies an after-tax interest drag; \"balance_sheet_cash\" applies none."New value: +"How the cash is funded: new_debt (default, adds after-tax interest) or balance_sheet_cash (no interest cost), e.g. balance_sheet_cash." - changed
Input schema / properties / cash_pct / descriptionPrevious value: -"Fraction (0-1) of deal value paid in cash; the remainder (1 - cash_pct) is paid in acquirer stock."New value: +"Share of the deal value settled in cash, 0 to 1; the rest is acquirer stock, e.g. 0.5." - changed
Input schema / properties / new_debt_interest_rate / descriptionPrevious value: -"Annual interest rate on new acquisition debt (only used when cash_financing_source is \"new_debt\"). Default 0.06."New value: +"Interest rate on new acquisition debt, 0 to 0.5, used with new_debt; defaults to 0.06, e.g. 0.07." - changed
Input schema / properties / offer_price_per_share / descriptionPrevious value: -"Offer price per target share (USD)."New value: +"Price offered per target share in USD, above zero, e.g. 250." - changed
Input schema / properties / synergies_pretax / descriptionPrevious value: -"Pretax annual run-rate cost/revenue synergies (USD). Default 0."New value: +"Yearly pretax synergies in USD at full run rate; defaults to 0, e.g. 500000000." - changed
Input schema / properties / target_share_price_override / descriptionPrevious value: -"Override the target's live EOD close (used only for the disclosed premium). Leave unset to use the latest R2-derived price."New value: +"Target share price in USD used instead of its month-end close, for the takeover premium only, e.g. 180." - changed
Input schema / properties / target_ticker / descriptionPrevious value: -"Target's stock ticker symbol, e.g. ATVI."New value: +"Ticker symbol or SEC CIK of the company being acquired, e.g. AAPL." - changed
Input schema / properties / tax_rate / descriptionPrevious value: -"Effective tax rate applied to synergies and the interest drag. Default 0.21."New value: +"Tax rate on synergies and interest, 0 to 1; defaults to 0.21, e.g. 0.25." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Changed
compute_dcf29 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD) for the auto-pulled inputs. Fundamentals are filtered by SEC accepted_at (strict PIT); valuation.parquet inputs are best-effort PIT (filtered by created_at, its accepted_at proxy — no SEC acceptance timestamp exists for pipeline-computed valuations). Omit to use the latest knowable inputs."New value: +"Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30." - changed
Input schema / properties / fcf_base_override / descriptionPrevious value: -"Override the auto-pulled FCF base (USD). Leave unset to use R2-derived."New value: +"Starting free cash flow in USD, used instead of the reported figure; trend mode only, e.g. 95000000000." - changed
Input schema / properties / fcf_source / descriptionPrevious value: -"\"trend\" (default): compound fcf_base by stage1_growth_rate every year (unchanged original behavior). \"three_statement\": derive the FCF stream from a full linked 3-statement projection instead — see the tool description for details."New value: +"trend (default) grows starting free cash flow by stage1_growth_rate; three_statement projects linked statements instead, e.g. three_statement." - changed
Input schema / properties / shares_override / descriptionPrevious value: -"Override shares outstanding. Leave unset to use R2-derived."New value: +"Share count used instead of the reported figure, above zero, e.g. 15000000000." - changed
Input schema / properties / stage1_growth_rate / descriptionPrevious value: -"Stage-1 FCF growth rate (e.g. 0.12 = 12%/yr)."New value: +"Yearly growth in the projection years as a decimal, -0.5 to 1: of free cash flow (trend) or of revenue (three_statement), e.g. 0.08." - changed
Input schema / properties / stage1_years / descriptionPrevious value: -"Number of explicit high-growth projection years before the terminal stage (3–15). Defaults to 5."New value: +"Number of projection years, 3 to 15; defaults to 5, e.g. 10." - changed
Input schema / properties / terminal_growth_rate / descriptionPrevious value: -"Long-run growth. Default 0.025."New value: +"Growth after the projection years as a decimal, -0.05 to 0.1; defaults to 0.025, e.g. 0.02." - changed
Input schema / properties / three_statement_assumptions / descriptionPrevious value: -"Only used when fcf_source is \"three_statement\". Overrides for the underlying projection; unset fields use project_three_statement's defaults."New value: +"Overrides for three_statement mode; each unset field keeps its default, e.g. {\"tax_rate\": 0.25}." - changed
Input schema / properties / three_statement_assumptions / properties / cash_sweep_pct / descriptionPrevious value: -"Default 0."New value: +"Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 0, e.g. 0.5." - changed
Input schema / properties / three_statement_assumptions / properties / dividend_payout_pct / descriptionPrevious value: -"Default 0."New value: +"Share of each year's net income distributed as dividends, 0 to 1; defaults to 0, e.g. 0.3." - changed
Input schema / properties / three_statement_assumptions / properties / interest_rate_on_debt / descriptionPrevious value: -"Default 0.06."New value: +"Interest rate on debt as a decimal, 0 to 0.5; defaults to 0.06, e.g. 0.05." - changed
Input schema / properties / three_statement_assumptions / properties / tax_rate / descriptionPrevious value: -"Default 0.21."New value: +"Tax rate as a decimal, 0 to 1; defaults to 0.21, e.g. 0.25." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol of the company to value, e.g. AAPL, MSFT, BRK.B."New value: +"Ticker symbol or SEC CIK of the company to value, e.g. AAPL." - changed
Input schema / properties / wacc / descriptionPrevious value: -"Discount rate. Default 0.09."New value: +"Discount rate as a decimal, 0.01 to 0.5; defaults to 0.09, e.g. 0.1." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Changed
compute_lbo28 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD) for the seed period. Omit to use the latest knowable annual period."New value: +"Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30." - changed
Input schema / properties / cash_sweep_pct / descriptionPrevious value: -"Fraction (0-1) of each year's FCF swept to debt paydown. Default 1.0 (standard LBO — 100% sweep)."New value: +"Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 1, e.g. 0.75." - changed
Input schema / properties / dividend_payout_pct / descriptionPrevious value: -"Fraction (0-1) of net income distributed to the sponsor each year (dividend recap style). Default 0 — most LBOs return capital only at exit."New value: +"Share of each year's net income distributed to the sponsor, 0 to 1; defaults to 0, e.g. 0.2." - changed
Input schema / properties / entry_ebitda_override / descriptionPrevious value: -"Override the EBITDA figure used for both entry and exit multiples. Without this, EBITDA is proxied by operating income."New value: +"EBITDA in USD that sets the entry price and debt instead of operating income, e.g. 130000000000." - changed
Input schema / properties / entry_multiple / descriptionPrevious value: -"EV/EBITDA multiple paid at entry (e.g. 10 = 10x)."New value: +"Purchase price as a multiple of EBITDA, above zero, e.g. 10." - changed
Input schema / properties / exit_multiple / descriptionPrevious value: -"EV/EBITDA multiple assumed at exit. Defaults to entry_multiple (no multiple expansion/contraction) when omitted."New value: +"Sale price as a multiple of the final year's EBITDA; defaults to entry_multiple, e.g. 12." - changed
Input schema / properties / hold_period_years / descriptionPrevious value: -"Hold period in years (1-10). Defaults to 5."New value: +"Years from purchase to sale, 1 to 10; defaults to 5, e.g. 7." - changed
Input schema / properties / interest_rate_on_debt / descriptionPrevious value: -"Annual interest rate on beginning-of-period LBO debt. Default 0.08 (leveraged debt typically prices above IG)."New value: +"Interest rate on buyout debt at the start of each year, 0 to 0.5; defaults to 0.08, e.g. 0.09." - changed
Input schema / properties / leverage_multiple / descriptionPrevious value: -"Debt/EBITDA raised at entry (e.g. 5 = 5x leverage)."New value: +"Debt raised at entry as a multiple of EBITDA, zero or more, e.g. 5." - changed
Input schema / properties / minimum_cash / descriptionPrevious value: -"Minimum operating cash left on the pro-forma opening balance sheet. Default 0."New value: +"Cash left on the opening balance sheet, in USD; defaults to 0, e.g. 1000000000." - changed
Input schema / properties / revenue_growth_rate / descriptionPrevious value: -"Flat annual revenue growth rate applied every year of the hold (e.g. 0.05 = 5%/yr)."New value: +"Yearly revenue growth over the hold as a decimal, -0.5 to 1, e.g. 0.05." - changed
Input schema / properties / tax_rate / descriptionPrevious value: -"Effective tax rate on positive pretax income. Default 0.21."New value: +"Tax rate on positive pretax income, 0 to 1; defaults to 0.21, e.g. 0.25." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol of the LBO target, e.g. AAPL."New value: +"Ticker symbol or SEC CIK of the buyout target, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
create_report - Removed
create_rule - Removed
create_signal - Removed
delete_agent - Removed
delete_agent_memory - Removed
delete_citation_override - Removed
delete_claim - Removed
delete_report - Removed
delete_rule - Removed
delete_signal - Removed
delete_thesis - Removed
delete_uploaded_document - Removed
delete_watchlist - Changed
describe_schema21 fields changed- changed
Input schema / properties / table / descriptionPrevious value: -"Filter to a single table name (e.g. 'fact', 'entity', 'references'). Omit to return the full schema for all tables."New value: +"Name of one table to describe; omit for all tables. An unknown name returns the valid names, e.g. entity." - added
Input schema / properties / table / maxLengthAdded value: +64 - added
Input schema / properties / table / minLengthAdded value: +1 - added
Input schema / properties / table / patternAdded value: +"^[a-z][a-z0-9_]*$" - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - removed
Output schema / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from the active R2 manifest", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "schema_version" -]New value: +[ + "_meta" +]
- Removed
dismiss_inbox_item - Changed
forensic_audit16 fields changed- changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol of the company to audit, e.g. AAPL, MSFT, BRK.B."New value: +"Ticker symbol or SEC CIK of the company to check, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
generate_comps_xlsx - Removed
generate_dcf_xlsx - Removed
generate_lbo_xlsx - Removed
generate_research_brief_docx - Removed
get_agent - Removed
get_agent_memory - Removed
get_agent_run - Removed
get_blockholders - Changed
get_capital_allocation_profile18 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time date (YYYY-MM-DD). Only returns facts with accepted_at on or before this date — eliminates look-ahead bias."New value: +"Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / lookback_years / descriptionPrevious value: -"Number of fiscal years to look back from the most recent filing (1–20). Defaults to 5 years for a full capital allocation cycle."New value: +"Fiscal years to cover, counting back from the latest filing, 1 to 20; defaults to 5, e.g. 3." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
get_claim - Changed
get_company_fundamentals26 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time date (YYYY-MM-DD). Only returns facts with accepted_at on or before this date — eliminates look-ahead bias for backtesting. Omit for the full dataset."New value: +"Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / fiscal_year / descriptionPrevious value: -"Fiscal year (YYYY). Omit to return the most recent available years."New value: +"Fiscal year to return, four digits; omit for the most recent years, e.g. 2024." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of periods to return (1–40). Defaults to 5."New value: +"Maximum number of periods, 1 to 40; defaults to 5, e.g. 8." - changed
Input schema / properties / lineage_detail / descriptionPrevious value: -"Per-period provenance envelope + per-metric availability/provenance sidecars. 'compact' (default) returns source_filing + source_url (the SEC Inline-XBRL viewer with every tagged fact highlighted when the filing is iXBRL, else the rendered document, else the filing index) + sec_url/document_url/inline_viewer_url + restated flag, plus lean per-metric availability + fact_id + source_filing. 'full' adds first_filed_at + accepted_at + per-metric source_url + computed inputs[]. 'off' omits all provenance."New value: +"Source detail per period: compact (default, filing and links), full (adds filing timestamps and inputs) or off, e.g. full." - changed
Input schema / properties / min_confidence / descriptionPrevious value: -"Withhold any metric whose backing fact scores below this confidence [0, 1]. The score is a PENALTY FROM EVIDENCE — every fact starts at 1.0 and is docked only for something checkable: a failed accounting identity (-0.40), a later filing that revised the number (-0.20), an unaudited filing (-0.05). It is NOT a function of age: a clean 1995 fact scores the same as a clean 2026 one. Guide: 0.95 = 'no evidence against this number' (the normal case — ~99.9% of facts, every year); 0.80 = tolerate a fact a later filing revised; 0.60 = tolerate a filing whose accounting identities failed. A withheld metric is reported as availability:'suppressed' — never dropped silently, and never as 'not_reported', which would claim the company did not file it. Facts with no confidence score are withheld too (fail closed)."New value: +"Withhold figures whose confidence score, 0 to 1, is below this; scores drop for failed accounting checks or later revisions, e.g. 0.95." - changed
Input schema / properties / period / descriptionPrevious value: -"Filing period granularity. Annual uses 10-K; quarterly uses 10-Q."New value: +"annual (10-K) or quarterly (10-Q); defaults to annual, e.g. quarterly." - changed
Input schema / properties / response_format / descriptionPrevious value: -"Output shape. 'flat' (default) returns the legacy `metrics` object plus the additive `metrics_availability`/`metrics_provenance`/`metrics_display` sidecars — `metrics_display` holds each figure already rendered for prose (\"$402.83B\"), and you should quote it verbatim rather than reformatting `metrics` yourself. 'envelope' additionally attaches `metric_envelopes` — one canonical {metric,value,unit,scale,period,availability,provenance,display} object per metric. Both shapes carry the same display strings."New value: +"flat (default) or envelope, which adds one record per figure with value, unit, period and source, e.g. envelope." - changed
Input schema / properties / strict / descriptionPrevious value: -"When true, fail with PLAN_LIMIT_EXCEEDED if the plan cannot satisfy the requested limit. Default false: return what's available and explain the gap in _meta.truncation."New value: +"true returns an error instead of fewer periods when coverage cannot supply limit periods; defaults to false, e.g. true." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT, BRK.B — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - removed
Output schema / properties / data / items / properties / metric_envelopes / items / properties / display / descriptionRemoved value: -"The figure rendered exactly as it should be quoted in prose ($391.04B, 23.7%, $6.11). QUOTE THIS VERBATIM rather than re-rounding `value` yourself — re-rendering a raw number is how a stated figure drifts away from the filing it came from." - removed
Output schema / properties / data / items / properties / metrics_display / descriptionRemoved value: -"The figure rendered exactly as it should be quoted in prose ($402.83B, 59.65%, $6.11). QUOTE THESE VERBATIM. Do not re-render the raw number in `metrics` yourself: a figure you reformat no longer matches the string Valuein can bind to its filing, so it is reported to the reader as unverified even though the underlying fact was sound."
- Removed
get_compute_ready_stream - Changed
get_earnings_signals20 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time filter: only return signals with accepted_at on or before this date. Use for backtesting to avoid look-ahead bias."New value: +"Point-in-time cutoff, YYYY-MM-DD: only periods filed on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of periods to return (1–40), most recent first. Defaults to 8 — covers 2 years of quarterly signals plus their TTM equivalents. earnings_signals.parquet currently emits one row per (entity, period_end); older rows surface here as more historical periods are published."New value: +"Maximum number of periods, newest first, 1 to 40; defaults to 8, e.g. 4." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - removed
Output schema / properties / planRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "ticker", - "plan", - "periods_returned", - "note", - "estimate_basis", - "data" -]New value: +[ + "_meta", + "ticker", + "periods_returned", + "note", + "estimate_basis", + "data" +]
- Changed
get_financial_ratios26 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Historical cutoff (canonical cross-tool date param). PIT by SEC accepted_at when the ratio data carries it (latest value knowable on/before the date, zero look-ahead, _meta.pit_safe=true), else by ratio.period_end (pit_safe=false). For guaranteed accepted_at PIT use get_company_fundamentals."New value: +"Historical cutoff, YYYY-MM-DD: ratios filed by this date, or for periods ending by it when no filing date is held, e.g. 2024-06-30." - changed
Input schema / properties / categories / descriptionPrevious value: -"Ratio categories to include (see the enum). Omit to return every category this ticker has. `valuation` (pe_ratio, pb_ratio, ev_ebitda, market_cap, dividend_yield) is LIVE since schema 2.18.0 — price-derived, period-end-aligned, not strictly PIT. Availability is per-ticker (the envelope lists this ticker's available_categories)."New value: +"Groups to include: profitability, liquidity, leverage, efficiency, per_share, owner_earnings, forensic, growth, rank or valuation; omit for all, e.g. [\"profitability\"]." - added
Input schema / properties / categories / maxItemsAdded value: +10 - changed
Input schema / properties / fiscal_period / descriptionPrevious value: -"Filter to a specific fiscal period type. Use 'TTM' for trailing twelve months. Omit to return both annual (FY) and TTM rows."New value: +"Period type: FY, TTM, Q1, Q2, Q3 or Q4; omit for FY and TTM rows, e.g. TTM." - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of distinct period_end dates to return (1–20). Defaults to 5. Within each period, all matching ratio_names are included."New value: +"Number of period-end dates to return, 1 to 20; defaults to 5, e.g. 3." - changed
Input schema / properties / period_end_before / descriptionPrevious value: -"Alias of as_of_date (as_of_date preferred — the canonical name). Returns ratios with period_end on or before this date."New value: +"Older name for as_of_date, same format and meaning; as_of_date wins when both are set, e.g. 2024-06-30." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - removed
Output schema / properties / data / items / properties / ratios / additionalProperties / properties / display / descriptionRemoved value: -"The ratio rendered exactly as it should be quoted (31.20%, 1.45x, $6.11). QUOTE THIS VERBATIM instead of converting `value` yourself." - changed
Output schema / properties / lineage / descriptionPrevious value: -"Provenance for pipeline-derived values (ratio.parquet / factor_scores.parquet): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)."New value: +"Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)." - removed
Output schema / properties / planRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "ticker", - "plan", - "note", - "periods_returned", - "data" -]New value: +[ + "_meta", + "ticker", + "note", + "periods_returned", + "data" +]
- Removed
get_insider_sentiment - Removed
get_insider_transactions - Removed
get_institutional_holdings - Removed
get_manager_portfolio - Removed
get_morning_brief - Changed
get_peer_comparables23 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Historical cutoff (canonical cross-tool date param) for the FIGURE leg: PIT by ratio accepted_at when present (latest-knowable, zero look-ahead, _meta.pit_safe=true), else by ratio.period_end (pit_safe=false). Peer SELECTION still uses current S&P 500 membership as a ranking proxy regardless of as_of_date (W3-G2)."New value: +"Historical cutoff, YYYY-MM-DD: ratios known by this date, with peers ranked by index membership on it, e.g. 2024-06-30." - changed
Input schema / properties / categories / descriptionPrevious value: -"Ratio categories to include in the comparison. Defaults to profitability, valuation, and leverage."New value: +"Groups to include: profitability, liquidity, leverage, efficiency, per_share, owner_earnings or valuation; defaults to profitability, valuation and leverage, e.g. [\"valuation\"]." - added
Input schema / properties / categories / maxItemsAdded value: +7 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of peers to return alongside the subject company (1–10). Defaults to 5."New value: +"Number of peers besides the company, 1 to 10; defaults to 5, e.g. 8." - changed
Input schema / properties / period_end_before / descriptionPrevious value: -"Alias of as_of_date (as_of_date preferred — the canonical name). Only include ratios with period_end on or before this date."New value: +"Older name for as_of_date, same format and meaning; as_of_date wins when both are set, e.g. 2024-06-30." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Subject company ticker or CIK, e.g. AAPL or '0000320193'. Peers are auto-selected by SIC code."New value: +"Ticker symbol or SEC CIK of the company to compare, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - changed
Output schema / properties / lineage / descriptionPrevious value: -"Provenance for pipeline-derived values (ratio.parquet / factor_scores.parquet): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)."New value: +"Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)." - added
Output schema / properties / peers_omitted_no_dataAdded value: +{ + "description": "Candidate peers left out because they had no ratio figures for the period; each was replaced by the next-closest candidate", + "type": "integer" +}
- Changed
get_pit_universe23 fields changed- changed
Input schema / properties / as_of_basis / descriptionPrevious value: -"Which date column drives historical construction. 'effective' (default) = effective_date/removal_date (first trading day; passive replication). 'announcement' = announcement_date/removal_announcement_date (S&P's public-announcement day; for inclusion-arb backtests) — rows with NULL announcement_date (mostly pre-2015) are skipped."New value: +"Which dates decide membership: effective (default, when a change took effect) or announcement (when it was announced), e.g. announcement." - changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Historical date (YYYY-MM-DD) for survivorship-free construction. Index queries use index_membership join/leave dates (entrants after the date excluded, later-removed members kept); sector queries use security valid_from/valid_to. Omit for the current universe."New value: +"Date the membership applies to, YYYY-MM-DD; omit for the current universe, e.g. 2022-12-30." - changed
Input schema / properties / include_share_classes / descriptionPrevious value: -"false (default) collapses to one row per CIK (index-provider convention — BRK counts once, not BRK-A + BRK-B). true returns every share-class row (GOOG and GOOGL separately) — for security-level analysis only."New value: +"true returns one row per share class instead of one per company; defaults to false, e.g. true." - changed
Input schema / properties / index / descriptionPrevious value: -"Index filter. 'sp500' (~500 large caps, curated history back to 1996), 'russell1000' (~1000 large/mid), 'russell2000' (~2000 small caps), 'russell3000' (~3000 broad market) — the three Russell indices carry fund-derived history back to 2000-09-30 at medium confidence, with observation spacing that widens before 2007. Omit for no index filter (sector-only or full universe queries)."New value: +"Index to list: sp500, russell1000, russell2000 or russell3000; omit for no index filter, e.g. sp500." - changed
Input schema / properties / is_active / descriptionPrevious value: -"Filter to active (currently trading) companies only. Omit to include all. WARNING: setting this to true on a HISTORICAL query reintroduces survivorship bias — companies that were active on as_of_date but later went bankrupt or got acquired will be filtered out. Leave unset for true PIT backtests."New value: +"true keeps only companies still trading today, which drops members that later delisted; omit to keep all, e.g. true." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum companies to return (1–3500). Defaults to 100 — which is SMALLER THAN EVERY INDEX, so the default call returns a slice, reports `limit_truncated: true` and withholds `survivorship_free`. `universe_size` always states the full matched count whatever you set here. Raising it is NOT sufficient on its own: at most 250 rows are inlined per call, so a large limit still returns a page (`complete: false`) until you walk it with `offset`. Universe is deduped to one row per CIK, so for a usable backtest universe set this near the index size (SP500 ~505, Russell 3000 ~3050) and page with `offset`."New value: +"Maximum number of members to return, 1 to 3500; defaults to 100, e.g. 505." - changed
Input schema / properties / offset / descriptionPrevious value: -"Zero-based row offset for paging a large universe. At most 250 rows are inlined per call; when more match, the response carries a `truncation` envelope — pass its `next_offset` here (keeping the same `limit`) to fetch the next page. Defaults to 0."New value: +"Rows to skip when paging through a long list; defaults to 0, e.g. 250." - changed
Input schema / properties / sector / descriptionPrevious value: -"Sector filter (case-insensitive substring) over the SIC-derived, GICS-aligned label (not licensed GICS — see tool description). E.g. 'Technology', 'Energy'."New value: +"Sector name to match, case-insensitive partial match, e.g. Technology." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
get_pit_valuation_ratios - Changed
get_price_history22 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"Inclusive end of the date range (YYYY-MM-DD). Defaults to today (the latest available close). Weekends and holidays resolve to the last trading close on or before this date."New value: +"Last date of the range, YYYY-MM-DD; omit for the latest completed month, e.g. 2024-12-31." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of bars to return. Daily plans (Pro, Institutional): 1–252, default 252 ≈ 1 trading year. Free plans (sample, benchmark), which return month-end bars: 1–360, covering up to the full ~30-year monthly archive. When the range contains more bars than `limit`, the most recent `limit` bars within the range are returned."New value: +"Maximum number of month-end bars, 1 to 360; defaults to 252. The most recent bars in the range are kept, e.g. 60." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Inclusive start of the date range (YYYY-MM-DD). Bars on or after this date are returned (up to `limit`). Omit to receive the `limit` most-recent bars before end_date."New value: +"First date of the range, YYYY-MM-DD; omit to take the latest limit months up to end_date, e.g. 2021-01-01." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / sourceRemoved value: -{ - "const": "SEC EDGAR", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "pit_safe" +] - removed
Output schema / properties / planRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "ticker", - "plan", - "cik", - "company_name", - "start_date", - "end_date", - "bar_count", - "granularity", - "bars", - "note" -]New value: +[ + "_meta", + "ticker", + "cik", + "company_name", + "start_date", + "end_date", + "bar_count", + "granularity", + "bars", + "note" +]
- Removed
get_report - Removed
get_report_version - Removed
get_research_file - Changed
get_sec_filing_links23 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"Inclusive upper bound on filing_date (YYYY-MM-DD). E.g. '2023-12-31'."New value: +"Latest filing date to include, YYYY-MM-DD, e.g. 2024-12-31." - changed
Input schema / properties / event_types / descriptionPrevious value: -"8-K item codes to filter by. E.g. ['1.01'] for material agreements, ['2.01'] for asset acquisitions, ['5.02'] for director/officer changes. Only relevant when form_types includes '8-K'."New value: +"8-K item numbers to match; filings without a matching item are left out, e.g. [\"2.02\"]." - added
Input schema / properties / event_types / maxItemsAdded value: +30 - changed
Input schema / properties / form_types / descriptionPrevious value: -"Filing form types to include. Defaults to 10-K and 10-Q."New value: +"Forms to include: 10-K, 10-Q, 8-K, 20-F, 40-F or their /A amendments; defaults to 10-K and 10-Q, e.g. [\"8-K\"]." - added
Input schema / properties / form_types / maxItemsAdded value: +9 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of filings to return (1–50). Defaults to 10."New value: +"Maximum number of filings, 1 to 50; defaults to 10, e.g. 20." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Inclusive lower bound on filing_date (YYYY-MM-DD). E.g. '2023-01-01'."New value: +"Earliest filing date to include, YYYY-MM-DD, e.g. 2024-01-01." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
get_smart_money_flow - Removed
get_sop - Changed
get_stock_price20 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"As-of calendar date (YYYY-MM-DD). Returns the close of the most recent trading day on or before this date — a weekend/holiday resolves to the prior trading close. Omit to get the latest available close."New value: +"Date to price as of, YYYY-MM-DD; omit for the latest completed month-end, e.g. 2024-06-15." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / sourceRemoved value: -{ - "const": "SEC EDGAR", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "pit_safe" +] - removed
Output schema / properties / planRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "ticker", - "plan", - "cik", - "company_name", - "requested_date", - "price_date", - "close", - "currency", - "is_exact_date_match", - "resolved_backward", - "div_cash", - "split_factor", - "granularity", - "note" -]New value: +[ + "_meta", + "ticker", + "cik", + "company_name", + "requested_date", + "price_date", + "close", + "currency", + "is_exact_date_match", + "resolved_backward", + "div_cash", + "split_factor", + "granularity", + "note" +]
- Removed
get_thesis - Removed
get_top_holders - Removed
get_uploaded_document - Changed
get_valuation_metrics21 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time date (YYYY-MM-DD). Only returns data with accepted_at on or before this date. Eliminates look-ahead bias for backtesting."New value: +"Point-in-time cutoff, YYYY-MM-DD: only figures filed with the SEC on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / fiscal_year / descriptionPrevious value: -"Fiscal year (YYYY). Omit to return most recent periods."New value: +"Fiscal year to return, four digits; omit for the most recent years, e.g. 2024." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of periods to return (1–40). Defaults to 5."New value: +"Maximum number of periods, 1 to 40; defaults to 5, e.g. 8." - changed
Input schema / properties / period / descriptionPrevious value: -"Filing period granularity. Annual uses 10-K; quarterly uses 10-Q."New value: +"annual (10-K) or quarterly (10-Q); defaults to annual, e.g. quarterly." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - removed
Output schema / properties / data / items / properties / metrics_display / descriptionRemoved value: -"The figure rendered exactly as it should be quoted in prose ($402.83B, 59.65%, $6.11). QUOTE THESE VERBATIM. Do not re-render the raw number in `metrics` yourself: a figure you reformat no longer matches the string Valuein can bind to its filing, so it is reported to the reader as unverified even though the underlying fact was sound."
- Removed
get_watchlist - Removed
link_claim_to_thesis - Removed
list_agent_runs - Removed
list_agents - Removed
list_citation_overrides - Removed
list_claims - Removed
list_claims_for_thesis - Removed
list_figure_reviews - Removed
list_my_reports - Removed
list_pending_approvals - Removed
list_public_claims_by_user - Removed
list_public_theses_by_user - Removed
list_report_versions - Changed
list_restatements29 fields changed- changed
Input schema / properties / amendments_only / descriptionPrevious value: -"Only restatements that arrived in an AMENDED filing (10-K/A, 10-Q/A) — the company formally telling the SEC it got a number wrong. The sharpest cut there is: it separates real restatements from routine re-files (a next-year 10-K carrying a revised comparative)."New value: +"true keeps only changes that arrived in an amended 10-K/A or 10-Q/A, e.g. true." - changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque pagination cursor from a prior response's next_cursor."New value: +"Paging cursor copied from next_cursor in the previous result, e.g. 25." - added
Input schema / properties / cursor / maxLengthAdded value: +20 - added
Input schema / properties / cursor / patternAdded value: +"^\\d+$" - changed
Input schema / properties / disclosure / descriptionPrevious value: -"Filter by HOW the company told the market. 'non_reliance' = it filed an 8-K Item 4.02 ('Non-Reliance on Previously Issued Financial Statements') — formally telling the SEC not to rely on what it already reported. The loudest signal in US disclosure, and rare. 'amended' = corrected in a 10-K/A or 10-Q/A. 'undisclosed' = the value changed inside a ROUTINE 10-Q or 10-K: no amendment, no 4.02, the old number is simply gone. ~94% of events. Anyone can parse an 8-K, so anyone can list what companies ANNOUNCED; finding what they didn't requires every vintage back to 1993."New value: +"Disclosure types to include: non_reliance (8-K Item 4.02), amended, or undisclosed (a routine 10-K or 10-Q), e.g. [\"amended\"]." - changed
Input schema / properties / event_id / descriptionPrevious value: -"Fetch exactly one event by its id (from a prior response)."New value: +"Id of one event from an earlier result, lowercase hex, e.g. 3f9a0c12." - changed
Input schema / properties / filed_since / descriptionPrevious value: -"Only restatements FILED on or after this date — the 'what changed recently' window."New value: +"Earliest date of the restating filing, YYYY-MM-DD, e.g. 2024-01-01." - changed
Input schema / properties / limit / descriptionPrevious value: -"Page size (1-100, default 25)."New value: +"Events per page, 1 to 100; defaults to 25, e.g. 50." - changed
Input schema / properties / max_importance / descriptionPrevious value: -"Only lines at or above this importance tier: 1 = headline only (revenue, net income, EPS, total assets, operating cash flow), 2 = + primary statement lines, 3 = everything incl. footnotes. Severity says how far a number moved; importance says whether anyone cares."New value: +"1 keeps headline figures only, 2 adds primary statement lines, 3 includes footnotes, e.g. 1." - changed
Input schema / properties / min_abs_delta_pct / descriptionPrevious value: -"Only events whose absolute restatement is at least this percent (e.g. 5 = ≥5% swings)."New value: +"Smallest absolute change to include, in percent from 0 to 100, e.g. 5." - changed
Input schema / properties / sector / descriptionPrevious value: -"Restrict to one GICS-style sector (e.g. 'Technology')."New value: +"Sector name to limit results to, matched in full but case-insensitive, e.g. Technology." - changed
Input schema / properties / severity / descriptionPrevious value: -"high = |Δ|≥10%, medium = ≥2%, low = ≥0.5%."New value: +"high (change of 10% or more), medium (2% or more) or low (0.5% or more), e.g. high." - changed
Input schema / properties / sort / descriptionPrevious value: -"'recent' = newest restating filing first (a market-wide radar). 'significance' = importance tier, then swing size (one company's history)."New value: +"recent (default, newest restating filing first) or significance (importance, then size of change), e.g. significance." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Restrict to one company — ticker (e.g. 'AAPL') or CIK (e.g. '0000320193')."New value: +"Ticker symbol or SEC CIK to limit results to one company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
list_rules - Removed
list_scheduled_tasks - Removed
list_signal_inbox - Removed
list_signals - Removed
list_sops - Removed
list_theses - Removed
list_uploaded_documents - Removed
list_watchlists - Removed
mark_inbox_read - Changed
project_three_statement28 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD) for the seed period. Omit to use the latest knowable annual period."New value: +"Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30." - changed
Input schema / properties / capex_pct_of_revenue_override / descriptionPrevious value: -"Override the seed period's capex-as-%-of-revenue ratio. Leave unset to use the historical ratio."New value: +"Capital spending as a share of revenue; omit to keep the latest year's, e.g. 0.03." - changed
Input schema / properties / cash_sweep_pct / descriptionPrevious value: -"Fraction (0-1) of each year's free cash flow swept to debt paydown. Default 0 (going-concern; use ~1.0 for an LBO-style paydown)."New value: +"Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 0, e.g. 0.5." - changed
Input schema / properties / dividend_payout_pct / descriptionPrevious value: -"Fraction (0-1) of net income paid out as dividends each year. Default 0."New value: +"Share of each year's net income distributed as dividends, 0 to 1; defaults to 0, e.g. 0.3." - changed
Input schema / properties / gross_margin_pct_override / descriptionPrevious value: -"Override the seed period's gross margin (held flat across all years). Leave unset to use the historical ratio."New value: +"Gross margin for every projected year; omit to keep the latest year's, e.g. 0.45." - changed
Input schema / properties / interest_rate_on_debt / descriptionPrevious value: -"Annual interest rate on beginning-of-period debt. Assumption — default 0.06."New value: +"Interest rate on debt at the start of each year, 0 to 0.5; defaults to 0.06, e.g. 0.05." - changed
Input schema / properties / new_debt_draw_year1 / descriptionPrevious value: -"New debt drawn at year 1 only (absolute USD) — e.g. acquisition financing. Default 0."New value: +"New debt borrowed in the first projected year, in USD; defaults to 0, e.g. 5000000000." - changed
Input schema / properties / new_equity_draw_year1 / descriptionPrevious value: -"New equity contributed at year 1 only (absolute USD) — hits cash + equity symmetrically. Default 0."New value: +"New equity raised in the first projected year, in USD, added to cash and equity; defaults to 0, e.g. 2000000000." - changed
Input schema / properties / operating_margin_pct_override / descriptionPrevious value: -"Override the seed period's operating margin. Leave unset to use the historical ratio."New value: +"Operating margin for every projected year; omit to keep the latest year's, e.g. 0.3." - changed
Input schema / properties / revenue_growth_rate / descriptionPrevious value: -"Flat annual revenue growth rate applied every year (e.g. 0.08 = 8%/yr)."New value: +"Yearly revenue growth as a decimal, -0.5 to 1, e.g. 0.08." - changed
Input schema / properties / tax_rate / descriptionPrevious value: -"Effective tax rate on positive pretax income. Default 0.21 (US statutory)."New value: +"Tax rate on positive pretax income, 0 to 1; defaults to 0.21, e.g. 0.25." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT, BRK.B."New value: +"Ticker symbol or SEC CIK of the company to project, e.g. AAPL." - changed
Input schema / properties / years / descriptionPrevious value: -"Projection horizon in years (1-15). Defaults to 5."New value: +"Years to project, 1 to 15; defaults to 5, e.g. 10." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +]
- Removed
publish_claim - Removed
publish_report - Removed
publish_thesis - Removed
reject_staged_action - Removed
render_report - Removed
restore_deleted - Removed
run_agent - Removed
run_backtest - Removed
run_workflow - Removed
save_agent - Removed
save_citation_override - Removed
save_claim - Removed
save_figure_review - Removed
save_freeform_report - Removed
save_thesis - Removed
save_watchlist - Removed
schedule_task - Removed
score_claim - Removed
score_due_claims - Removed
score_due_theses - Removed
score_thesis_outcome - Changed
screen_universe27 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD). When set, the screen is reconstructed as of this date via factor_scores.accepted_at — each entity ranked at its latest-knowable period, zero look-ahead, survivorship-free. Omit for the latest snapshot."New value: +"Point-in-time cutoff, YYYY-MM-DD: each company ranked on what it had filed by this date, e.g. 2024-06-30." - changed
Input schema / properties / exclude_outliers / descriptionPrevious value: -"Optional data-quality guard (default false). When true, additionally drops rows with implausible raw factor values (non-finite, or e.g. asset_turnover > 50x, |FCF/assets| > 10) from shell companies with near-zero denominators. Rows that do not join to a company (null symbol) are ALWAYS omitted in full-universe mode, regardless of this flag."New value: +"true also drops rows with implausible factor values, such as near-zero denominators; defaults to false, e.g. true." - changed
Input schema / properties / limit / descriptionPrevious value: -"Number of results to return (1-100). Defaults to 25."New value: +"Number of companies to return, 1 to 100; defaults to 25, e.g. 10." - changed
Input schema / properties / offset / descriptionPrevious value: -"Zero-based row offset for paging within the requested `limit` window. At most 250 rows are inlined per call; if the response carries a `truncation` envelope, pass its `next_offset` here. Defaults to 0."New value: +"Rows to skip from the top of the limit results; defaults to 0, e.g. 10." - changed
Input schema / properties / sector / descriptionPrevious value: -"Filter to a specific sector (case-insensitive partial match). E.g. 'Technology', 'Healthcare'."New value: +"Sector name to match, case-insensitive partial match, e.g. Technology." - added
Input schema / properties / sector / maxLengthAdded value: +64 - added
Input schema / properties / sector / minLengthAdded value: +1 - changed
Input schema / properties / sort_by / descriptionPrevious value: -"Which factor rank to sort by (see the enum). Defaults to composite_rank. An unrecognized column is rejected with INVALID_ARGUMENT (no silent fallback)."New value: +"Rank to sort by, such as composite_rank (the default), roe_rank or piotroski_f_score_rank, e.g. roe_rank." - changed
Input schema / properties / ticker / descriptionPrevious value: -"If provided, show only this ticker's factor scores (single-entity mode). Omit to screen the full universe."New value: +"Ticker symbol or SEC CIK to show one company's scores; omit to rank all companies, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - changed
Output schema / properties / lineage / descriptionPrevious value: -"Provenance for pipeline-derived values (ratio.parquet / factor_scores.parquet): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)."New value: +"Provenance for pipeline-derived values (the ratio table / the factor_scores table): source table + pipeline computed_at, plus a pointer to the tools that return filing-level lineage. NOT point-in-time (recomputed on each pipeline run)." - removed
Output schema / properties / planRemoved value: -{ - "description": "Caller's data plan used to scope the screen", - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "_meta", - "plan", - "sort_by", - "results_returned", - "data" -]New value: +[ + "_meta", + "sort_by", + "results_returned", + "data" +]
- Changed
search_companies24 fields changed- changed
Input schema / properties / cik / descriptionPrevious value: -"SEC CIK identifier (exact match). E.g. '0000320193' for Apple."New value: +"SEC CIK to match exactly, digits only, leading zeros optional, e.g. 0000320193." - changed
Input schema / properties / include_inactive / descriptionPrevious value: -"Whether delisted / superseded listings may appear in results. Defaults to true — this is a survivorship-free product, so a search must not silently hide dead companies by default. Set to false to restrict to currently-active listings only (equivalent to `is_active: true`, but as a search-scope toggle rather than a hard filter). If `is_active` is also supplied, `is_active` wins."New value: +"Whether delisted or superseded listings may appear; defaults to true and is ignored when is_active is set, e.g. false." - changed
Input schema / properties / is_active / descriptionPrevious value: -"Filter on whether the LISTING is current. true = currently trading; false = superseded listings only (delisted, or a ticker that moved to a new registrant). Omit to return both."New value: +"true for current listings only, false for delisted or superseded listings only; omit for both, e.g. true." - changed
Input schema / properties / is_sp500 / descriptionPrevious value: -"Filter to current S&P 500 members only."New value: +"true to return current S&P 500 members only, e.g. true." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results to return (1–50). Defaults to 25."New value: +"Maximum number of results, 1 to 50; defaults to 25, e.g. 10." - changed
Input schema / properties / query / descriptionPrevious value: -"Free-text search over company name and ticker. Case-insensitive. E.g. 'Apple', 'AAPL', 'Microsoft', 'semiconductor'."New value: +"Text matched against company names and tickers, case-insensitive; an all-digit value matches a CIK exactly, e.g. Apple." - changed
Input schema / properties / sic_code / descriptionPrevious value: -"4-digit SIC industry code. E.g. '7372' for Prepackaged Software."New value: +"Four-digit SIC industry code to match exactly, e.g. 7372." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - changed
Output schema / properties / companies / items / properties / status / descriptionPrevious value: -"Entity-level flag from entity.status. Kept for back-compat and NOT a reliable liveness signal — it is wrong in both directions on real data (American Electric Power, a current S&P 500 member, reads 'INACTIVE'). Read `is_active` instead."New value: +"Entity-level flag from entity.status. Read `is_active` instead." - changed
Output schema / properties / companies / items / properties / valid_from / descriptionPrevious value: -"Date this listing became current, or null when unknown. Paired with valid_to/cik/is_active so an agent can disambiguate a RECYCLED ticker — two rows for one symbol, each covering a different window — without a second call."New value: +"Date this listing became current, or null when unknown."
- Removed
search_reports - Removed
set_agent_memory - Removed
sign_off_report - Removed
stage_action - Removed
submit_artifact_feedback - Removed
submit_feedback - Removed
test_rule - Removed
test_signal - Removed
unlink_claim_from_thesis - Removed
unpublish_claim - Removed
unpublish_report - Removed
unpublish_thesis - Removed
update_report - Removed
update_signal - Changed
verify_fact_lineage23 fields changed- changed
Input schema / properties / as_of_date / descriptionPrevious value: -"Point-in-time cutoff (YYYY-MM-DD) used with `concept` — returns the latest fact whose 10-K/10-Q was accepted by SEC on or before this date (true PIT, no lookahead; any calendar date works). Canonical name across the suite; supersedes the legacy `period_end`."New value: +"Cutoff used with concept, YYYY-MM-DD: the latest value filed on or before this date, e.g. 2024-06-30." - changed
Input schema / properties / concept / descriptionPrevious value: -"Standard concept to look up the most recently known fact for (see the enum for the full fundamentals + capital-allocation set). Use this when you don't have a fact_id. Provide either concept OR fact_id."New value: +"Standard concept whose latest reported value to trace, used when no fact_id is given, e.g. TotalRevenue." - changed
Input schema / properties / fact_id / descriptionPrevious value: -"Deterministic fact identity hash: SHA-256(entity_id|accession_id|concept|period_end|unit). 64-char lowercase hex. Use this when you already have the hash from a previous query. Provide either fact_id OR concept (not both required, but at least one must be set)."New value: +"64-character lowercase hex fact_id from an earlier result; give this or concept, e.g. 8a02707ced0d5a157ed2cdb28df035e52250daf4d0699952f7fc5420e1ce3afa." - changed
Input schema / properties / period_end / descriptionPrevious value: -"[DEPRECATED — pass `as_of_date` instead.] Filing-acceptance cutoff (YYYY-MM-DD) used with `concept`; despite the name it filters on filing accepted_at, not the returned fact's period_end. Kept one release for back-compat."New value: +"Older name for as_of_date, same format and meaning: a filing cutoff, not a period end, e.g. 2024-06-30." - changed
Input schema / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT, BRK.B — or a CIK (SEC identifier), e.g. '0000320193'."New value: +"Ticker symbol or SEC CIK of the company, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - changed
Output schema / properties / lineage / descriptionPrevious value: -"Full provenance for one fact. Identity: fact_id, entity_id, ticker, company_name, concept, standard_concept, accession_id. Value: numeric_value (raw), `display` (the SAME number already rendered — \"$391.04B\" — QUOTE THIS rather than re-rounding numeric_value yourself), unit, plus derived_quarterly_value/derived_quarterly_display (a Q2/Q3 10-Q states year-to-date, so the quarter and the filing are different numbers). Filing: source_url, inline_viewer_url, document_url, filing_date, form_type, accepted_at. Duration: period_start, period_end, period_span_days, and period_type (instant | quarterly | half_year | nine_month | annual | duration) so a 3-month stub is never mistaken for the 12-month figure — a 10-K tags BOTH at the same period_end. ⚠️ There is no `value` key and no `cik` key; the fields are named exactly as emitted."New value: +"Full provenance for one fact. Identity: fact_id, entity_id, ticker, company_name, concept, standard_concept, accession_id. Filing: source_url, inline_viewer_url, document_url, filing_date, form_type, accepted_at. Duration: period_start, period_end, period_span_days, and period_type (instant | quarterly | half_year | nine_month | annual | duration) so a 3-month stub is never mistaken for the 12-month figure — a 10-K tags BOTH at the same period_end." - changed
Output schema / properties / lineage / properties / display / descriptionPrevious value: -"`numeric_value` ALREADY RENDERED — \"$391.04B\", \"$6.11\". QUOTE THIS character-for-character rather than re-rounding `numeric_value` yourself: the rendering also needs a scale, and `unit` alone cannot tell a fraction (0.5965 → \"59.65%\") from a percent (0.5965 → \"0.60%\"). Null when `numeric_value` is null."New value: +"Null when `numeric_value` is null." - removed
Output schema / properties / lineage / properties / standard_concept / descriptionRemoved value: -"Valuein's standardized concept name (TotalRevenue, NetIncome, …); null when the raw tag is unmapped."
- Changed
verify_facts20 fields changed- changed
Input schema / properties / facts / descriptionPrevious value: -"The facts to verify, 1–50 of them. Group a report's whole citation list here rather than calling once per figure. Duplicate (ticker, fact_id) pairs are resolved once and returned once, in first-seen order."New value: +"1 to 50 pairs of ticker and fact_id to check, e.g. [{\"ticker\": \"AAPL\", \"fact_id\": \"8a02707ced0d5a157ed2cdb28df035e52250daf4d0699952f7fc5420e1ce3afa\"}]." - changed
Input schema / properties / facts / items / properties / fact_id / descriptionPrevious value: -"Deterministic fact identity hash: SHA-256(entity_id|accession_id|concept|period_end|unit), 64-char lowercase hex, exactly as a previous tool result gave it to you. Never invent one."New value: +"64-character lowercase hex fact_id as an earlier result gave it, e.g. 8a02707ced0d5a157ed2cdb28df035e52250daf4d0699952f7fc5420e1ce3afa." - changed
Input schema / properties / facts / items / properties / ticker / descriptionPrevious value: -"Stock ticker symbol, e.g. AAPL, MSFT, BRK.B — or a CIK (SEC identifier), e.g. '0000320193'. The company the fact belongs to; a fact_id is only resolvable against its own filer."New value: +"Ticker symbol or SEC CIK of the company that reported the fact, e.g. AAPL." - removed
Output schema / properties / _meta / properties / cost_usdRemoved value: -{ - "additionalProperties": false, - "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.", - "properties": { - "amount_usd": { - "minimum": 0, - "type": "number" - }, - "basis": { - "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.", - "enum": [ - "payg_charge", - "payg_rate_card" - ], - "type": "string" - }, - "billed": { - "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.", - "type": "boolean" - } - }, - "required": [ - "amount_usd", - "billed", - "basis" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / data_planRemoved value: -{ - "description": "Access plan: sample | sp500 | pro | full", - "type": "string" -} - changed
Output schema / properties / _meta / properties / fundamentals_as_of / descriptionPrevious value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."New value: +"Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export." - removed
Output schema / properties / _meta / properties / last_updatedRemoved value: -{ - "description": "ISO timestamp when the snapshot was exported", - "type": "string" -} - removed
Output schema / properties / _meta / properties / latency_msRemoved value: -{ - "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.", - "minimum": 0, - "type": "integer" -} - removed
Output schema / properties / _meta / properties / limit_warningsRemoved value: -{ - "description": "Soft-warning array for partial fulfillment. Each entry carries a stable subcode + remediation.options[]. AI agents pattern-match on subcode.", - "items": { - "additionalProperties": true, - "properties": { - "code": { - "const": "LIMIT_EXCEEDED", - "type": "string" - }, - "current_plan": { - "type": "string" - }, - "extensions": { - "additionalProperties": {}, - "type": "object" - }, - "limit_type": { - "type": "string" - }, - "limit_value": {}, - "remediation": { - "additionalProperties": true, - "properties": { - "contact_sales": { - "type": "string" - }, - "default_action": { - "type": "string" - }, - "options": { - "items": { - "additionalProperties": {}, - "type": "object" - }, - "type": "array" - }, - "pricing_page": { - "type": "string" - } - }, - "required": [ - "options", - "default_action", - "pricing_page", - "contact_sales" - ], - "type": "object" - }, - "requested_value": {}, - "returned_value": {}, - "subcode": { - "type": "string" - } - }, - "required": [ - "code", - "subcode", - "limit_type", - "current_plan", - "remediation" - ], - "type": "object" - }, - "type": "array" -} - removed
Output schema / properties / _meta / properties / payg_overrideRemoved value: -{ - "additionalProperties": false, - "description": "Set when this single response was paid for via the agent-pay PAYG flow — the rate-limit / depth-limit checks were bypassed for this call only.", - "properties": { - "amount_cents": { - "type": "number" - }, - "entity_scope_hash": { - "type": "string" - }, - "meter": { - "type": "string" - }, - "quote_id": { - "type": "string" - }, - "retry_token_hash": { - "type": "string" - }, - "ticker_count": { - "type": "number" - }, - "tool": { - "type": "string" - } - }, - "required": [ - "quote_id", - "tool", - "meter", - "amount_cents", - "ticker_count", - "entity_scope_hash", - "retry_token_hash" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / rate_limitRemoved value: -{ - "additionalProperties": false, - "description": "Caller's remaining budget", - "properties": { - "limit": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_at": { - "description": "ISO 8601 timestamp when the window resets", - "type": "string" - }, - "window": { - "enum": [ - "minute", - "hour" - ], - "type": "string" - } - }, - "required": [ - "limit", - "remaining", - "reset_at", - "window" - ], - "type": "object" -} - removed
Output schema / properties / _meta / properties / request_idRemoved value: -{ - "description": "Per-request correlation id (8-char)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / schema_versionRemoved value: -{ - "description": "Parquet schema version from manifest.json", - "type": "string" -} - removed
Output schema / properties / _meta / properties / snapshotRemoved value: -{ - "description": "Snapshot directory name (e.g. snapshot_20260420)", - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / current_planRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_required_forRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / _meta / properties / truncation / properties / upgrade_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / _meta / requiredPrevious value: -[ - "data_plan", - "schema_version", - "snapshot", - "last_updated", - "source", - "pit_safe" -]New value: +[ + "source", + "pit_safe" +] - changed
Output schema / properties / results / descriptionPrevious value: -"One entry per UNIQUE requested pair, in first-seen order. Check `found` before reading `lineage`."New value: +"Check `found` before reading `lineage`." - changed
Output schema / properties / results / items / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "fact_id": { - "description": "The fact_id this item asked about — echoed so a caller can key results without relying on order.", - "type": "string" - }, - "found": { - "const": true, - "description": "The fact resolved; `lineage` carries its full provenance chain.", - "type": "boolean" - }, - "lineage": { - "additionalProperties": false, - "description": "Full provenance for one fact. Identity: fact_id, entity_id, ticker, company_name, concept, standard_concept, accession_id. Value: numeric_value (raw), `display` (the SAME number already rendered — \"$391.04B\" — QUOTE THIS rather than re-rounding numeric_value yourself), unit, plus derived_quarterly_value/derived_quarterly_display (a Q2/Q3 10-Q states year-to-date, so the quarter and the filing are different numbers). Filing: source_url, inline_viewer_url, document_url, filing_date, form_type, accepted_at. Duration: period_start, period_end, period_span_days, and period_type (instant | quarterly | half_year | nine_month | annual | duration) so a 3-month stub is never mistaken for the 12-month figure — a 10-K tags BOTH at the same period_end. ⚠️ There is no `value` key and no `cik` key; the fields are named exactly as emitted.", - "properties": { - "accepted_at": { - "description": "SEC acceptance timestamp (ISO 8601) — the moment this number became public. The PIT cut is taken on this.", - "type": [ - "string", - "null" - ] - }, - "accession_id": { - "description": "SEC accession number of the filing that reported this value, e.g. 0000320193-24-000123.", - "type": "string" - }, - "company_name": { - "description": "Registrant name as filed.", - "type": "string" - }, - "concept": { - "description": "Raw XBRL tag as the filer used it, e.g. us-gaap:Revenues.", - "type": "string" - }, - "derived_quarterly_display": { - "description": "`derived_quarterly_value` rendered the same way. Null when that value is null.", - "type": [ - "string", - "null" - ] - }, - "derived_quarterly_value": { - "description": "The three-month figure derived from a year-to-date filing. A Q2/Q3 10-Q states YTD, so THIS and `numeric_value` are different numbers for the same fact — a verifier comparing against whichever one it happened to read passes wrong numbers half the time. Null when no derivation applies.", - "type": [ - "number", - "null" - ] - }, - "display": { - "description": "`numeric_value` ALREADY RENDERED — \"$391.04B\", \"$6.11\". QUOTE THIS character-for-character rather than re-rounding `numeric_value` yourself: the rendering also needs a scale, and `unit` alone cannot tell a fraction (0.5965 → \"59.65%\") from a percent (0.5965 → \"0.60%\"). Null when `numeric_value` is null.", - "type": [ - "string", - "null" - ] - }, - "document_url": { - "description": "Direct link to the rendered primary document (not the index page). Null when the primary document is unknown.", - "type": [ - "string", - "null" - ] - }, - "entity_id": { - "description": "Zero-padded 10-digit SEC CIK of the filer. (The key is named entity_id — there is no `cik` field.)", - "type": "string" - }, - "fact_id": { - "description": "Deterministic fact identity: SHA-256(entity_id|accession_id|concept|period_end|unit), 64-char lowercase hex.", - "type": "string" - }, - "filing_date": { - "description": "Filing date (YYYY-MM-DD). Null when the filing join found nothing.", - "type": [ - "string", - "null" - ] - }, - "form_type": { - "description": "Filing form type — 10-K, 10-Q, 8-K, 20-F. Null when the filing join found nothing.", - "type": [ - "string", - "null" - ] - }, - "inline_viewer_url": { - "description": "SEC Inline-XBRL viewer opened on the rendered primary document — the strongest one-click verification link. Null when the filing is not Inline-XBRL or the primary document is unknown.", - "type": [ - "string", - "null" - ] - }, - "numeric_value": { - "description": "The raw reported value. Null when the fact carries no numeric value.", - "type": [ - "number", - "null" - ] - }, - "period_end": { - "description": "End of the reporting window (YYYY-MM-DD), or the instant date for balance-sheet facts.", - "type": [ - "string", - "null" - ] - }, - "period_span_days": { - "description": "Length of the reporting window in days. Null when not derivable.", - "type": [ - "number", - "null" - ] - }, - "period_start": { - "description": "Start of the reporting window (YYYY-MM-DD). Null for instant (balance-sheet) facts.", - "type": [ - "string", - "null" - ] - }, - "period_type": { - "description": "Coarse duration class: instant | quarterly | half_year | nine_month | annual | duration. A single 10-K tags BOTH a 12-month figure and a 3-month Q4 stub at the same period_end, so this is what stops a stub being quoted as the annual number.", - "type": "string" - }, - "source_url": { - "description": "SEC filing-index URL. Null when the filing join found nothing.", - "type": [ - "string", - "null" - ] - }, - "standard_concept": { - "description": "Valuein's standardized concept name (TotalRevenue, NetIncome, …); null when the raw tag is unmapped.", - "type": [ - "string", - "null" - ] - }, - "ticker": { - "description": "Uppercase ticker the lookup resolved through.", - "type": "string" - }, - "unit": { - "description": "Unit of the value, e.g. USD, USD/share, shares.", - "type": "string" - } - }, - "required": [ - "fact_id", - "entity_id", - "ticker", - "company_name", - "accession_id", - "concept", - "standard_concept", - "unit", - "numeric_value", - "derived_quarterly_value", - "display", - "derived_quarterly_display", - "accepted_at", - "source_url", - "inline_viewer_url", - "document_url", - "filing_date", - "form_type", - "period_start", - "period_end", - "period_span_days", - "period_type" - ], - "type": "object" - }, - "ticker": { - "description": "The uppercased ticker (or CIK) this item asked about.", - "type": "string" - } - }, - "required": [ - "ticker", - "fact_id", - "found", - "lineage" - ], - "type": "object" - }, - { - "additionalProperties": false, - "properties": { - "error": { - "additionalProperties": false, - "description": "Why this item could not be resolved. Never fabricate a lineage for an item that carries this.", - "properties": { - "code": { - "description": "Machine-readable reason: TICKER_NOT_FOUND (the company is outside the bucket your plan reads), DATA_NOT_AVAILABLE_FOR_PERIOD (the period is outside your history window), DATA_NOT_FOUND / FACT_NOT_FOUND (no fact carries that fact_id for that company), or any other code the lookup raised — the original code is preserved, never flattened.", - "type": "string" - }, - "message": { - "description": "Human-readable detail for this item.", - "type": "string" - } - }, - "required": [ - "code", - "message" - ], - "type": "object" - }, - "fact_id": { - "description": "The fact_id this item asked about.", - "type": "string" - }, - "found": { - "const": false, - "description": "This one fact could not be resolved. The other items in the call are unaffected — read them.", - "type": "boolean" - }, - "ticker": { - "description": "The uppercased ticker (or CIK) this item asked about.", - "type": "string" - } - }, - "required": [ - "ticker", - "fact_id", - "found", - "error" - ], - "type": "object" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "fact_id": { + "description": "The fact_id this item asked about — echoed so a caller can key results without relying on order.", + "type": "string" + }, + "found": { + "const": true, + "description": "The fact resolved; `lineage` carries its full provenance chain.", + "type": "boolean" + }, + "lineage": { + "additionalProperties": false, + "description": "Full provenance for one fact. Identity: fact_id, entity_id, ticker, company_name, concept, standard_concept, accession_id. Filing: source_url, inline_viewer_url, document_url, filing_date, form_type, accepted_at. Duration: period_start, period_end, period_span_days, and period_type (instant | quarterly | half_year | nine_month | annual | duration) so a 3-month stub is never mistaken for the 12-month figure — a 10-K tags BOTH at the same period_end.", + "properties": { + "accepted_at": { + "description": "SEC acceptance timestamp (ISO 8601) — the moment this number became public. The PIT cut is taken on this.", + "type": [ + "string", + "null" + ] + }, + "accession_id": { + "description": "SEC accession number of the filing that reported this value, e.g. 0000320193-24-000123.", + "type": "string" + }, + "company_name": { + "description": "Registrant name as filed.", + "type": "string" + }, + "concept": { + "description": "Raw XBRL tag as the filer used it, e.g. us-gaap:Revenues.", + "type": "string" + }, + "derived_quarterly_display": { + "description": "`derived_quarterly_value` rendered the same way. Null when that value is null.", + "type": [ + "string", + "null" + ] + }, + "derived_quarterly_value": { + "description": "The three-month figure derived from a year-to-date filing. A Q2/Q3 10-Q states YTD, so THIS and `numeric_value` are different numbers for the same fact — a verifier comparing against whichever one it happened to read passes wrong numbers half the time. Null when no derivation applies.", + "type": [ + "number", + "null" + ] + }, + "display": { + "description": "Null when `numeric_value` is null.", + "type": [ + "string", + "null" + ] + }, + "document_url": { + "description": "Direct link to the rendered primary document (not the index page). Null when the primary document is unknown.", + "type": [ + "string", + "null" + ] + }, + "entity_id": { + "description": "Zero-padded 10-digit SEC CIK of the filer. (The key is named entity_id — there is no `cik` field.)", + "type": "string" + }, + "fact_id": { + "description": "Deterministic fact identity: SHA-256(entity_id|accession_id|concept|period_end|unit), 64-char lowercase hex.", + "type": "string" + }, + "filing_date": { + "description": "Filing date (YYYY-MM-DD). Null when the filing join found nothing.", + "type": [ + "string", + "null" + ] + }, + "form_type": { + "description": "Filing form type — 10-K, 10-Q, 8-K, 20-F. Null when the filing join found nothing.", + "type": [ + "string", + "null" + ] + }, + "inline_viewer_url": { + "description": "SEC Inline-XBRL viewer opened on the rendered primary document — the strongest one-click verification link. Null when the filing is not Inline-XBRL or the primary document is unknown.", + "type": [ + "string", + "null" + ] + }, + "numeric_value": { + "description": "The raw reported value. Null when the fact carries no numeric value.", + "type": [ + "number", + "null" + ] + }, + "period_end": { + "description": "End of the reporting window (YYYY-MM-DD), or the instant date for balance-sheet facts.", + "type": [ + "string", + "null" + ] + }, + "period_span_days": { + "description": "Length of the reporting window in days. Null when not derivable.", + "type": [ + "number", + "null" + ] + }, + "period_start": { + "description": "Start of the reporting window (YYYY-MM-DD). Null for instant (balance-sheet) facts.", + "type": [ + "string", + "null" + ] + }, + "period_type": { + "description": "Coarse duration class: instant | quarterly | half_year | nine_month | annual | duration. A single 10-K tags BOTH a 12-month figure and a 3-month Q4 stub at the same period_end, so this is what stops a stub being quoted as the annual number.", + "type": "string" + }, + "source_url": { + "description": "SEC filing-index URL. Null when the filing join found nothing.", + "type": [ + "string", + "null" + ] + }, + "standard_concept": { + "type": [ + "string", + "null" + ] + }, + "ticker": { + "description": "Uppercase ticker the lookup resolved through.", + "type": "string" + }, + "unit": { + "description": "Unit of the value, e.g. USD, USD/share, shares.", + "type": "string" + } + }, + "required": [ + "fact_id", + "entity_id", + "ticker", + "company_name", + "accession_id", + "concept", + "standard_concept", + "unit", + "numeric_value", + "derived_quarterly_value", + "display", + "derived_quarterly_display", + "accepted_at", + "source_url", + "inline_viewer_url", + "document_url", + "filing_date", + "form_type", + "period_start", + "period_end", + "period_span_days", + "period_type" + ], + "type": "object" + }, + "ticker": { + "description": "The uppercased ticker (or CIK) this item asked about.", + "type": "string" + } + }, + "required": [ + "ticker", + "fact_id", + "found", + "lineage" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "error": { + "additionalProperties": false, + "description": "Why this item could not be resolved.", + "properties": { + "code": { + "type": "string" + }, + "message": { + "description": "Human-readable detail for this item.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + "fact_id": { + "description": "The fact_id this item asked about.", + "type": "string" + }, + "found": { + "const": false, + "description": "This one fact could not be resolved. The other items in the call are unaffected — read them.", + "type": "boolean" + }, + "ticker": { + "description": "The uppercased ticker (or CIK) this item asked about.", + "type": "string" + } + }, + "required": [ + "ticker", + "fact_id", + "found", + "error" + ], + "type": "object" + } +]
- Removed
verify_report_figures - Removed
watchlist_diff
Related MCP Connectors
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
US market data, point-in-time fundamentals, macro vintages, COT, 13F and backtests for AI agents.
Normalized SEC EDGAR data for AI agents: XBRL financials, 10-K risk diffs, Form 4 insider trades.
Primary-source SEC filing intelligence and financial/disclosure reconciliation for AI agents.
Related MCP Servers
AlicenseAqualityBmaintenanceProvides AI agents with direct access to SEC filing intelligence, company fundamentals, dilution risk scoring, and cross-company analytics for financial research.101227 npm1MIT- AlicenseNot gradedqualityCmaintenanceGive your AI agent live SEC EDGAR data: company financials, insider trades, 8-K events, 13F holdings, and the raw filings stream — all normalized to clean JSON, every number traceable back to its sec.gov source filing.8148 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with clean, normalized access to financial data including company fundamentals, insider trades, SEC filings, macro series from FRED, real-time quotes, and ETF holdings.MIT
- AlicenseNot gradedqualityAmaintenanceWall Street data feed for AI agents, providing access to 100M+ source-traced SEC records, institutional holdings, insider trades, congress trading, and more via MCP tools.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.