Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Compute LBO Returns (IRR + MOIC)

compute_lbo
Read-onlyIdempotent

Leveraged buyout returns analysis: caller provides entry/exit multiples, leverage, and a hold period; the tool builds a Day-1 pro-forma opening balance sheet from the deal's own sources & uses (cash-free, debt-free convention — entry_debt = leverage_multiple x EBITDA, sponsor_equity = entry_enterprise_value + minimum_cash - entry_debt), then runs it through the same linked three-statement engine as project_three_statement (100% FCF-to-debt-paydown sweep by default). Returns MOIC and IRR (solved by bounded bisection over the sponsor's cash flow stream — interim dividends if any, plus exit equity proceeds). EBITDA is PROXIED by operating income (no separate D&A concept exists in the dataset) unless entry_ebitda_override is supplied — see result.entry_ebitda_is_proxy. result.irr.converged:false means no root was found (e.g. a total wipeout) — never a fabricated rate. Every simplification is listed in result.caveats[]. Tier: sp500+.

Input Schema

NameRequiredDescriptionDefault
tickerYesStock ticker symbol of the LBO target, e.g. AAPL.
tax_rateNoEffective tax rate on positive pretax income. Default 0.21.
as_of_dateNoPoint-in-time cutoff (YYYY-MM-DD) for the seed period. Omit to use the latest knowable annual period.
minimum_cashNoMinimum operating cash left on the pro-forma opening balance sheet. Default 0.
exit_multipleNoEV/EBITDA multiple assumed at exit. Defaults to entry_multiple (no multiple expansion/contraction) when omitted.
cash_sweep_pctNoFraction (0-1) of each year's FCF swept to debt paydown. Default 1.0 (standard LBO — 100% sweep).
entry_multipleYesEV/EBITDA multiple paid at entry (e.g. 10 = 10x).
hold_period_yearsNoHold period in years (1-10). Defaults to 5.
leverage_multipleYesDebt/EBITDA raised at entry (e.g. 5 = 5x leverage).
dividend_payout_pctNoFraction (0-1) of net income distributed to the sponsor each year (dividend recap style). Default 0 — most LBOs return capital only at exit.
revenue_growth_rateYesFlat annual revenue growth rate applied every year of the hold (e.g. 0.05 = 5%/yr).
entry_ebitda_overrideNoOverride the EBITDA figure used for both entry and exit multiples. Without this, EBITDA is proxied by operating income.
interest_rate_on_debtNoAnnual interest rate on beginning-of-period LBO debt. Default 0.08 (leveraged debt typically prices above IG).

Output Schema

NameRequiredDescriptionDefault
_metaYesProvenance envelope — data lineage for every MCP response
resultYes
tickerYes
seed_period_endYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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."
  2. 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)."
  3. Changed28 schema fields changed
    • changedInput schema / properties / as_of_date / description
      Previous value: -"Point-in-time cutoff for the reported inputs, YYYY-MM-DD: only filings accepted by this date, e.g. 2024-06-30."New value: +"Point-in-time cutoff (YYYY-MM-DD) for the seed period. Omit to use the latest knowable annual period."
    • changedInput schema / properties / cash_sweep_pct / description
      Previous value: -"Share of each year's free cash flow used to repay debt, 0 to 1; defaults to 1, e.g. 0.75."New value: +"Fraction (0-1) of each year's FCF swept to debt paydown. Default 1.0 (standard LBO — 100% sweep)."
    • changedInput schema / properties / dividend_payout_pct / description
      Previous value: -"Share of each year's net income distributed to the sponsor, 0 to 1; defaults to 0, e.g. 0.2."New 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."
    • changedInput schema / properties / entry_ebitda_override / description
      Previous value: -"EBITDA in USD that sets the entry price and debt instead of operating income, e.g. 130000000000."New value: +"Override the EBITDA figure used for both entry and exit multiples. Without this, EBITDA is proxied by operating income."
    • changedInput schema / properties / entry_multiple / description
      Previous value: -"Purchase price as a multiple of EBITDA, above zero, e.g. 10."New value: +"EV/EBITDA multiple paid at entry (e.g. 10 = 10x)."
    • changedInput schema / properties / exit_multiple / description
      Previous value: -"Sale price as a multiple of the final year's EBITDA; defaults to entry_multiple, e.g. 12."New value: +"EV/EBITDA multiple assumed at exit. Defaults to entry_multiple (no multiple expansion/contraction) when omitted."
    • changedInput schema / properties / hold_period_years / description
      Previous value: -"Years from purchase to sale, 1 to 10; defaults to 5, e.g. 7."New value: +"Hold period in years (1-10). Defaults to 5."
    • changedInput schema / properties / interest_rate_on_debt / description
      Previous value: -"Interest rate on buyout debt at the start of each year, 0 to 0.5; defaults to 0.08, e.g. 0.09."New value: +"Annual interest rate on beginning-of-period LBO debt. Default 0.08 (leveraged debt typically prices above IG)."
    • changedInput schema / properties / leverage_multiple / description
      Previous value: -"Debt raised at entry as a multiple of EBITDA, zero or more, e.g. 5."New value: +"Debt/EBITDA raised at entry (e.g. 5 = 5x leverage)."
    • changedInput schema / properties / minimum_cash / description
      Previous value: -"Cash left on the opening balance sheet, in USD; defaults to 0, e.g. 1000000000."New value: +"Minimum operating cash left on the pro-forma opening balance sheet. Default 0."
    • changedInput schema / properties / revenue_growth_rate / description
      Previous value: -"Yearly revenue growth over the hold as a decimal, -0.5 to 1, e.g. 0.05."New value: +"Flat annual revenue growth rate applied every year of the hold (e.g. 0.05 = 5%/yr)."
    • changedInput schema / properties / tax_rate / description
      Previous value: -"Tax rate on positive pretax income, 0 to 1; defaults to 0.21, e.g. 0.25."New value: +"Effective tax rate on positive pretax income. Default 0.21."
    • changedInput schema / properties / ticker / description
      Previous value: -"Ticker symbol or SEC CIK of the buyout target, e.g. AAPL."New value: +"Stock ticker symbol of the LBO target, e.g. AAPL."
    • 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: -[
      -  "source",
      -  "pit_safe"
      -]New value: +[
      +  "data_plan",
      +  "schema_version",
      +  "snapshot",
      +  "last_updated",
      +  "source",
      +  "pit_safe"
      +]
  4. Changed28 schema fields changed
    • changedInput schema / properties / as_of_date / description
      Previous 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."
    • changedInput schema / properties / cash_sweep_pct / description
      Previous 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."
    • changedInput schema / properties / dividend_payout_pct / description
      Previous 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."
    • changedInput schema / properties / entry_ebitda_override / description
      Previous 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."
    • changedInput schema / properties / entry_multiple / description
      Previous 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."
    • changedInput schema / properties / exit_multiple / description
      Previous 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."
    • changedInput schema / properties / hold_period_years / description
      Previous 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."
    • changedInput schema / properties / interest_rate_on_debt / description
      Previous 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."
    • changedInput schema / properties / leverage_multiple / description
      Previous 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."
    • changedInput schema / properties / minimum_cash / description
      Previous 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."
    • changedInput schema / properties / revenue_growth_rate / description
      Previous 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."
    • changedInput schema / properties / tax_rate / description
      Previous 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."
    • changedInput schema / properties / ticker / description
      Previous 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."
    • 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 / 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: +[
      +  "source",
      +  "pit_safe"
      +]
  5. 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."
  6. 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"
      +}
  7. Added

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare read-only/idempotent safety; the description goes far beyond them by disclosing the Day-1 pro-forma build (cash-free/debt-free convention), the 100% FCF sweep default, the EBITDA-proxy caveat, that non-converged IRR is returned rather than fabricated, and that simplifications surface in `result.caveats[]`. These are exactly the behaviors that change how an agent interprets output.

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 purpose, then mechanics in a single dense paragraph. Every clause carries information (formulas, proxy behavior, convergence semantics), though the parenthetical algebra and the trailing 'Tier' note make it heavier than ideal for a first read.

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

Completeness5/5

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

For a 13-parameter model with an output schema, the description covers what the schema cannot: computational methodology, default sweep behavior, universe restriction, and named result fields (`result.entry_ebitda_is_proxy`, `result.irr.converged`, `result.caveats[]`). Nothing material is missing for correct invocation or interpretation.

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

Parameters4/5

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

Schema coverage is 100%, so the 3 baseline applies, but the description adds genuine meaning: the entry_debt = leverage x EBITDA and sponsor_equity = EV + minimum_cash - entry_debt derivations, the exit-multiple default to entry, and how `entry_ebitda_override` changes the EBITDA basis for both multiples.

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 verb and resource: 'Leveraged buyout returns analysis' producing MOIC and IRR. It implicitly separates itself from `compute_dcf` (no LBO/sources-&-uses math) and `generate_lbo_xlsx` (this computes rather than exports), and it names the shared engine with `project_three_statement`.

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

Usage Guidelines3/5

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

Usage is implied through the required inputs (entry/exit multiples, leverage, hold period) and the 'Tier: sp500+' constraint, but there is no explicit statement of when to pick this over `compute_dcf`, `compute_accretion_dilution`, or `generate_lbo_xlsx`. The `project_three_statement` reference describes mechanics, not tool selection.

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.