Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Price History (date range)

get_price_history
Read-onlyIdempotent

Daily EOD bar series (OHLCV) for a company over a date range. Returns up to 252 trading-day bars oldest-first — one bar per trading day. Each bar carries: open / high / low / close (raw, unadjusted), total_return_index (dividends reinvested and splits neutralized, forward-compounded from an arbitrary base so only RATIOS of it are meaningful — TOTAL RETURN BETWEEN TWO DATES IS tri_b / tri_a - 1; it is PIT-immutable, so a later dividend appends rather than restating), adjusted_close (a back-adjusted series — SPARSELY POPULATED, usually null, and retroactively restated on each corporate action so it is NOT PIT-immutable; prefer total_return_index), volume (shares traded), div_cash (ex-dividend cash per share on that date, 0 on non-dividend days), and split_factor (1.0 on non-split days). Never compute a return from raw close — a 4-for-1 split reads as a 75% crash. If total_return_index is null across the returned bars (a tier that has not re-exported since schema 2.29.0), the response note says so and you should compound close with div_cash / split_factor instead. For a company with more than one listing (dual-class, CVR), bars are the requested share class where the data supports it; listing_resolution and multi_listing on the response say which listing you actually received. Omit start_date for the trailing year before end_date. Omit end_date for the latest available close. Coverage follows your plan's tier slice: Pro and Institutional get the full daily bar series (full = all companies & all archived history, pro = all companies & last 15 years). On the free plans (sample, benchmark) this tool returns MONTH-END bars instead of daily ones: the close on the last trading day of each calendar month in range (not an average), COMPLETED months only (the month in progress appears once it ends), unadjusted, from up to 360 months (~30 years) of the same archive at coarser granularity — open/high/low/volume/adjusted_close are null on a monthly bar (nothing intraday to report), and close/total_return_index/div_cash/split_factor are populated. The response's granularity field says which series answered the call ('daily' or 'monthly'), and a monthly response's note spells out the upgrade path to daily bars. What every plan additionally has — the valuation multiples at each fiscal year end via get_financial_ratios (category 'valuation') and get_valuation_metrics, and 1/3/6/12-month momentum plus the 52-week high/low via get_earnings_signals. This archive is market data, NOT EDGAR, so it does NOT share the 1993 EDGAR floor that applies to fundamentals: the earliest bar differs per security and is 1994 or later. A request before a security's first bar returns zero bars on every tier, Institutional included, and is reported as DATA_COVERAGE rather than a plan limit.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "ticker": "<ticker>"
    },
    "name": "get_price_history"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum 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.
tickerYesStock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'.
end_dateNoInclusive 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.
start_dateNoInclusive 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.

Output Schema

NameRequiredDescriptionDefault
cikYes
barsYes
noteYes
planYes
_metaYesProvenance envelope — data lineage for every MCP response
tickerYes
end_dateYes
bar_countYes
start_dateYes
granularityYes
company_nameYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / properties / _meta / properties / cost_usd / description
      Previous value: -"Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price."New value: +"Per-call cost transparency. Omitted for subscription-only and free tools, which have no MPP price."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real pay-per-call charge (a card or MPP payment through agent-pay). payg_rate_card = indicative price, not billed."New value: +"mpp_charge = real pay-per-call charge (a card or MPP payment through agent-pay). mpp_rate_card = indicative price, not billed."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / enum
      Previous value: -[
      -  "payg_charge",
      -  "payg_rate_card"
      -]New value: +[
      +  "mpp_charge",
      +  "mpp_rate_card"
      +]
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / billed / description
      Previous value: -"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value only: no charge was made for this call (it was within your plan)."New value: +"true = this amount was actually charged via MPP for this call. false = indicative MPP-equivalent value only: no charge was made for this call (it was within your plan)."
    • addedOutput schema / properties / _meta / properties / latency_ms / maximum
      Added value: +9007199254740991
    • changedOutput schema / properties / _meta / properties / limit_warnings / items / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / _meta / properties / limit_warnings / items / properties / extensions / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / _meta / properties / limit_warnings / items / properties / remediation / additionalProperties
      Previous value: -trueNew value: +{}
    • addedOutput schema / properties / _meta / properties / limit_warnings / items / properties / remediation / properties / options / items / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / mpp_offer
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when figures still need payment: the MPP option (price, resource_url, request body) for the full run.",
      +  "propertyNames": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / _meta / properties / mpp_override
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Set when this single response was paid for over MPP (card, agent-pay): the payment's order was honoured for this call only. agent-pay captures the payment only when this is present.",
      +  "properties": {
      +    "amount_cents": {
      +      "type": "number"
      +    },
      +    "category": {
      +      "type": "string"
      +    },
      +    "companies": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "company_count": {
      +      "type": "number"
      +    },
      +    "order_id": {
      +      "type": "string"
      +    },
      +    "run": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "run_token_hash": {
      +      "type": "string"
      +    },
      +    "scope_hash": {
      +      "type": "string"
      +    },
      +    "tool": {
      +      "type": "string"
      +    },
      +    "unlock_level": {
      +      "enum": [
      +        "pro",
      +        "full"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "order_id",
      +    "tool",
      +    "category",
      +    "amount_cents",
      +    "company_count",
      +    "scope_hash",
      +    "run_token_hash",
      +    "unlock_level",
      +    "companies",
      +    "run"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / _meta / properties / mpp_verification
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Verification tools only, when some figures are outside the caller's plan. Figures the plan covers are always verified free; a Valuein account also verifies its first figures free, once, figures outside its plan included (the verification trial, size in pricing://current). served_free = own-plan figures plus trial figures; trial_used / trial_remaining = this run's draw and what the account has left; needs_payment = figures still to pay for (the paid verification run). A guest has no trial: note says how to get it.",
      +  "properties": {
      +    "figures": {
      +      "type": "number"
      +    },
      +    "needs_payment": {
      +      "type": "number"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "served_free": {
      +      "type": "number"
      +    },
      +    "trial_remaining": {
      +      "type": "number"
      +    },
      +    "trial_used": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "figures",
      +    "served_free",
      +    "trial_used",
      +    "needs_payment"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / properties / _meta / properties / payg_override
      Removed 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"
      -}
    • addedOutput schema / properties / _meta / properties / rate_limit / properties / limit / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / _meta / properties / rate_limit / properties / limit / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / _meta / properties / rate_limit / properties / remaining / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / _meta / properties / rate_limit / properties / remaining / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / _meta / properties / result_count / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / _meta / properties / result_count / minimum
      Added value: +-9007199254740991
    • addedOutput schema / properties / _meta / properties / truncation / properties / plan_limit / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / _meta / properties / truncation / properties / requested / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / _meta / properties / truncation / properties / returned / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / bar_count / maximum
      Added value: +9007199254740991
  2. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."New value: +"payg_charge = real pay-per-call charge (a card or MPP payment through agent-pay). payg_rate_card = indicative price, not billed."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed."New value: +"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / billed / description
      Previous value: -"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free."New value: +"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value only: no charge was made for this call (it was within your plan)."
  4. Changed21 schema fields changed
    • changedInput schema / properties / end_date / description
      Previous value: -"Last date of the range, YYYY-MM-DD; omit for the latest completed month, e.g. 2024-12-31."New 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."
    • changedInput schema / properties / limit / description
      Previous 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."New 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."
    • changedInput schema / properties / start_date / description
      Previous 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."New 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."
    • changedInput schema / properties / ticker / description
      Previous value: -"Ticker symbol or SEC CIK of the company, e.g. AAPL."New value: +"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."
    • addedOutput schema / properties / _meta / properties / cost_usd
      Added 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"
      +}
    • addedOutput schema / properties / _meta / properties / data_plan
      Added value: +{
      +  "description": "Access plan: sample | sp500 | pro | full",
      +  "type": "string"
      +}
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous 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."New 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."
    • addedOutput schema / properties / _meta / properties / last_updated
      Added value: +{
      +  "description": "ISO timestamp when the snapshot was exported",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / latency_ms
      Added value: +{
      +  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / _meta / properties / limit_warnings
      Added 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"
      +}
    • addedOutput schema / properties / _meta / properties / payg_override
      Added 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"
      +}
    • addedOutput schema / properties / _meta / properties / rate_limit
      Added 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"
      +}
    • addedOutput schema / properties / _meta / properties / request_id
      Added value: +{
      +  "description": "Per-request correlation id (8-char)",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / schema_version
      Added value: +{
      +  "description": "Parquet schema version from manifest.json",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / snapshot
      Added value: +{
      +  "description": "Snapshot directory name (e.g. snapshot_20260420)",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / truncation / properties / current_plan
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / truncation / properties / upgrade_required_for
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / truncation / properties / upgrade_url
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / _meta / required
      Previous value: -[
      -  "pit_safe"
      -]New value: +[
      +  "data_plan",
      +  "schema_version",
      +  "snapshot",
      +  "last_updated",
      +  "pit_safe"
      +]
    • addedOutput schema / properties / plan
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "_meta",
      -  "ticker",
      -  "cik",
      -  "company_name",
      -  "start_date",
      -  "end_date",
      -  "bar_count",
      -  "granularity",
      -  "bars",
      -  "note"
      -]New value: +[
      +  "_meta",
      +  "ticker",
      +  "plan",
      +  "cik",
      +  "company_name",
      +  "start_date",
      +  "end_date",
      +  "bar_count",
      +  "granularity",
      +  "bars",
      +  "note"
      +]
  5. Changed22 schema fields changed
    • changedInput schema / properties / end_date / description
      Previous 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."
    • changedInput schema / properties / limit / description
      Previous 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."
    • changedInput schema / properties / start_date / description
      Previous 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."
    • changedInput schema / properties / ticker / description
      Previous 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."
    • removedOutput schema / properties / _meta / properties / cost_usd
      Removed 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"
      -}
    • removedOutput schema / properties / _meta / properties / data_plan
      Removed value: -{
      -  "description": "Access plan: sample | sp500 | pro | full",
      -  "type": "string"
      -}
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous 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."
    • removedOutput schema / properties / _meta / properties / last_updated
      Removed value: -{
      -  "description": "ISO timestamp when the snapshot was exported",
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / latency_ms
      Removed value: -{
      -  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      -  "minimum": 0,
      -  "type": "integer"
      -}
    • removedOutput schema / properties / _meta / properties / limit_warnings
      Removed 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"
      -}
    • removedOutput schema / properties / _meta / properties / payg_override
      Removed 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"
      -}
    • removedOutput schema / properties / _meta / properties / rate_limit
      Removed 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"
      -}
    • removedOutput schema / properties / _meta / properties / request_id
      Removed value: -{
      -  "description": "Per-request correlation id (8-char)",
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / schema_version
      Removed value: -{
      -  "description": "Parquet schema version from manifest.json",
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / snapshot
      Removed value: -{
      -  "description": "Snapshot directory name (e.g. snapshot_20260420)",
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / source
      Removed value: -{
      -  "const": "SEC EDGAR",
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / truncation / properties / current_plan
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / truncation / properties / upgrade_required_for
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / _meta / properties / truncation / properties / upgrade_url
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / _meta / required
      Previous value: -[
      -  "data_plan",
      -  "schema_version",
      -  "snapshot",
      -  "last_updated",
      -  "source",
      -  "pit_safe"
      -]New value: +[
      +  "pit_safe"
      +]
    • removedOutput schema / properties / plan
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / required
      Previous 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"
      +]
  6. Changed4 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of bars to return (1–252; default 252 ≈ 1 trading year). When the range contains more bars than `limit`, the most recent `limit` bars within the range are returned."New 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."
    • changedInput schema / properties / limit / maximum
      Previous value: -252New value: +360
    • addedOutput schema / properties / granularity
      Added value: +{
      +  "enum": [
      +    "daily",
      +    "monthly"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "_meta",
      -  "ticker",
      -  "plan",
      -  "cik",
      -  "company_name",
      -  "start_date",
      -  "end_date",
      -  "bar_count",
      -  "bars",
      -  "note"
      -]New value: +[
      +  "_meta",
      +  "ticker",
      +  "plan",
      +  "cik",
      +  "company_name",
      +  "start_date",
      +  "end_date",
      +  "bar_count",
      +  "granularity",
      +  "bars",
      +  "note"
      +]
  7. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the 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."New 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."
  8. Changed2 schema fields changed
    • changedInput schema / properties / ticker / description
      Previous value: -"Stock ticker symbol, e.g. AAPL, MSFT"New value: +"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."
    • changedInput schema / properties / ticker / pattern
      Previous value: -"^[A-Za-z.\\-]+$"New value: +"^[A-Za-z0-9.\\-]+$"
  9. Changed2 schema fields changed
    • addedOutput schema / properties / bars / items / properties / total_return_index
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / bars / items / required
      Previous value: -[
      -  "price_date",
      -  "open",
      -  "high",
      -  "low",
      -  "close",
      -  "adjusted_close",
      -  "volume",
      -  "div_cash",
      -  "split_factor"
      -]New value: +[
      +  "price_date",
      +  "open",
      +  "high",
      +  "low",
      +  "close",
      +  "adjusted_close",
      +  "total_return_index",
      +  "volume",
      +  "div_cash",
      +  "split_factor"
      +]
  10. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / fundamentals_as_of
      Added value: +{
      +  "description": "ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the 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.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / price_as_of
      Added value: +{
      +  "description": "ISO timestamp when the price surfaces were last refreshed.",
      +  "type": "string"
      +}
  11. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / cost_usd
      Added 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"
      +}
    • addedOutput schema / properties / _meta / properties / latency_ms
      Added value: +{
      +  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  12. Added

TDQS

A4.3/5.0
Behavior5/5

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

Goes far beyond the readOnly/idempotent annotations: discloses PIT-immutability semantics of total_return_index versus retroactive restatement of adjusted_close, which fields are sparsely populated, tier-dependent granularity (daily vs month-end bars with null intraday fields), multi-listing resolution fields, and the DATA_COVERAGE-vs-plan-limit distinction. This is exactly the caveat surface an agent needs before computing a return.

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

Conciseness3/5

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

Front-loaded and technically dense, but it is a single sprawling block with several sentences that do not belong to this tool — the "what every plan additionally has" valuation/momentum cross-sell, the EDGAR 1993 floor aside, and restatement of tier limits already in the schema. Size is defensible for the caveat load, but trimming the off-tool material would sharpen selection.

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

Completeness5/5

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

An output schema exists and the description still flags the response fields that matter for correct interpretation (granularity, note, listing_resolution, multi_listing, per-field nullability). Coverage/tier rules, empty-result semantics, and the split-adjustment trap are all addressed, leaving no material ambiguity for calling the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so limit bounds (1-252 daily / 1-360 monthly), ticker/CIK acceptance, and date defaults are already documented. The description mostly restates those facts and adds only marginal framing (trailing-year default, most-recent-bars-wins). Baseline 3 is appropriate when the schema carries the parameter burden.

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

Purpose5/5

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

Opens with a precise verb+resource+shape: "Daily EOD bar series (OHLCV) for a company over a date range," then enumerates exactly what each bar carries and what the return is not (a raw-close return). An agent knows immediately this is a time-series bar retrieval tool, not a quote or a fundamentals call.

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

Usage Guidelines4/5

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

Rich conditional guidance: omit start_date for the trailing year, omit end_date for the latest close, prefer total_return_index over adjusted_close, fall back to compounding close with div_cash/split_factor when tri is null, and upgrade path for free-tier monthly data. It also routes to get_financial_ratios / get_valuation_metrics / get_earnings_signals for adjacent needs. The one notable gap is that it never mentions the obvious sibling get_stock_price, leaving the single-quote-vs-history choice to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.