Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Point-in-Time Valuation Ratios

get_pit_valuation_ratios
Read-onlyIdempotent

Current and historical valuation multiples for a company. Omit as_of_date and it returns today's P/E, P/S, P/B, EV/EBITDA, EV/Revenue and FCF yield, computed from the latest EOD close and the latest TTM financials. Use it for any "what is X's P/E " / "how is X valued right now" question — never derive a multiple yourself by dividing a price by an earnings figure; that is exactly the arithmetic the provenance contract forbids. Pass as_of_date to get the same snapshot on a specific historical date — zero look-ahead bias (the 'Compustat + CRSP merge' pattern). The EOD close is sourced from stock_price_daily.parquet at as_of_date (or the nearest prior trading day), and all financial figures come from SEC filings with accepted_at ≤ as_of_date so no future information is used. TTM financials are computed by summing the four most recent standalone-quarter values (or using the most recent FY filing when no quarterly series is available). Returns: price snapshot (close, price_date, is_exact_date_match), TTM P&L (revenue, gross_profit, operating_income, EBITDA, net_income, OCF, CapEx, FCF), balance sheet snapshot (shares, cash, debt, book equity), derived market values (market_cap, enterprise_value), valuation multiples (P/E, P/S, P/B, EV/EBITDA, EV/Revenue, FCF yield %), and TTM margins (gross, operating, net). Use for: historical valuation screens, backtesting entry-point multiples, forensic audit of peak / trough valuations, comparing a company's current multiples to its own history. Pro and Institutional only — full = all companies & full history, pro = all companies & last 15 years. On the free plans this tool returns an ENTITLEMENT_DENIED upgrade envelope (required_plan 'pro') BEFORE any read: the EOD close it needs comes from the daily price series, licensed market data the free tiers do not carry. Every plan still has the multiples at each fiscal year end via get_financial_ratios (category 'valuation') and get_valuation_metrics.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'.
as_of_dateYesThe historical date for the valuation snapshot (YYYY-MM-DD). The EOD close on the nearest prior trading day will be used. All financials are PIT-filtered to filings accepted on or before this date. Use a date in the recent past (within the last year) to get current-ish multiples; use any historical date back to 1993 (subject to your plan's history window) to get the multiples as they would have been observable on that date.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
cikYes
cashYes
noteYes
_metaYesProvenance envelope — data lineage for every MCP response
closeYes
tickerYes
ttm_fcfYes
ttm_ocfYes
currencyYes
net_debtYes
pb_ratioYes
pe_ratioYes
ps_ratioYes
ev_ebitdaYes
ttm_capexYes
as_of_dateYes
ev_revenueYes
market_capYes
price_dateYes
total_debtYes
ttm_ebitdaYes
book_equityYes
ttm_revenueYes
company_nameYes
fcf_yield_pctYes
net_margin_pctYes
shares_dilutedYes
ttm_net_incomeYes
ttm_period_endYes
enterprise_valueYes
gross_margin_pctYes
ttm_gross_profitYes
is_exact_date_matchYes
operating_margin_pctYes
ttm_operating_incomeYes
financials_accepted_atYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. 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.\\-]+$"
  3. 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"
      +}
  4. 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"
      +}
  5. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already carry readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered; the description adds substantial context beyond that — the ENTITLEMENT_DENIED gate on free plans before any read, the PIT data sourcing (SEC filings with accepted_at ≤ as_of_date, nearest prior trading day), the zero look-ahead bias guarantee, and the TTM computation method. No contradiction with the annotations.

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

Conciseness4/5

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

Front-loaded with the core purpose and the omit-date behavior, then organized into thematic blocks (usage, sourcing, returns, plan gating, alternatives). It is long (~380 words for a 2-param tool) and the enumerated return list overlaps the existing output schema, so it could be trimmed — but every sentence carries real decision-relevant information and nothing is filler.

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

Completeness4/5

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

For a 2-param tool with an output schema and rich annotations, this is near-total: entitlements and upgrade envelope, provenance contract, data lineage, TTM methodology, and alternatives are all covered. The one genuine gap is the unresolved conflict between 'Omit as_of_date' and the schema's required field, which leaves an agent unable to reconcile the two sources of truth.

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

Parameters2/5

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

Schema coverage is 100%, so the baseline is 3, and the description does add meaning (CIK accepted as ticker, nearest-prior-trading-day resolution, plan-dependent history window). However, it actively misleads: 'Omit as_of_date and it returns today's...' directly contradicts the schema's required array, which lists as_of_date as required. An agent following the description would send a call that fails validation — the description fights the structured contract instead of reinforcing it.

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

Purpose5/5

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

States a specific resource and scope ('Current and historical valuation multiples for a company') and explicitly differentiates from siblings by name — get_financial_ratios and get_valuation_metrics are offered as the alternatives for fiscal-year-end multiples. An agent can tell exactly what this returns (P/E, P/S, P/B, EV/EBITDA, EV/Revenue, FCF yield) and how it differs from nearby valuation tools.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('any "what is X's P/E" / "how is X valued right now" question'), an explicit when-not ('never derive a multiple yourself — that is exactly the arithmetic the provenance contract forbids'), and named alternatives for free-plan users. It also lists concrete use cases (historical screens, backtesting entry-point multiples, forensic audits), leaving nothing 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.