startup-valuation
The server exposes 14 MCP tools covering 80+ startup valuation formulas, plus guided prompts and a method catalog.
Compute probability and expected values: discrete E[X], joint probability, probability-weighted value, VC portfolio return, Poisson, continuous E[X].
Discount and forecast cash flows: PV, NPV, annuity, DCF with Gordon terminal value, compound growth, CAGR.
Estimate cost of capital: standard CAPM, startup-adjusted CAPM, portfolio beta, WACC.
Value pre-revenue startups: Scorecard, Berkus, Risk-Factor Summation, VC Method (pre/post-money), exit terminal value, triangulated analysis.
Apply options/scenario models: Black-Scholes, binomial tree, named bull/base/bear scenario analysis.
Use comparables: P/E, P/S, EV/EBITDA, EV/Revenue, regression-adjusted multiple.
Analyze SaaS: LTV, CAC, MRR, ARR, NRR, magic number, Rule of 40, CAC payback, ARR revenue multiple.
Evaluate marketplaces: take rate, GMV multiple, buyer retention, network density.
Value fintech: payment revenue, lending, payment-processor DCF, neobank.
Value biotech: peak sales, decision tree, pipeline rNPV.
Value hardware/deep tech: TRL-adjusted valuation, gross margin, break-even volume.
Handle international valuation: PPP, country risk premium, international CAPM.
Allocate stakeholder equity: dilution, OPM, PWERM, liquidation, synergies, employee options, vesting, cash-vs-equity break-even, asset loan capacity.
Apply emerging methods: SAFE conversion, token value/NVT, ESG adjustments, Metcalfe, data moat, remote-first premium/NPV.
Use guided prompts (value_pre_revenue_startup, value_saas_startup, model_funding_round) and the method catalog at startup-valuation://methods; run locally via stdio or hosted Streamable HTTP with no API key, returning auditable ValuationResult objects.
Startup Valuation Engine
A comprehensive startup valuation library implementing 80+ formulas from the Startup Valuation textbook — Python library, MCP server, and AI-agent skills.
Overview
A production-grade Python library for startup valuation, implementing every formula from the Startup Valuation textbook by Simon Mak (Valuation in Practice Series, Ascent Partners). Designed for developers, financial analysts, and AI agents who need auditable, structured valuation computations.
Three-layer architecture:
graph TB
subgraph Library["Python Library"]
MOD["14 Modules<br/>80+ Functions"] --> VR["ValuationResult"]
end
subgraph MCP["MCP Server"]
VR --> SVR["FastMCP Server<br/>14 Tools"]
end
subgraph Skills["AI-agent skills"]
SVR --> CORE["Core"]
SVR --> ADV["Advanced"]
SVR --> IND["Industry"]
SVR --> STAKE["Stakeholder"]
SVR --> EMER["Emerging"]
end
style Library fill:#0083AB,color:#fff
style MCP fill:#4CAF50,color:#fff
style Skills fill:#9C27B0,color:#fffPython Library — 14 modules, 80+ typed functions, all returning
ValuationResult(value + assumptions + sensitivity)MCP Server — 14 folded tools (80+ formulas) for AI agents via stdio and hosted Streamable HTTP
AI-agent skills — 6 skill definitions with workflow guidance for valuation domains
Related MCP server: tvr-mcp-server
Installation
pip install startup-valuation # library only
pip install startup-valuation[mcp] # + MCP server
pip install startup-valuation[dev] # + pytest, ruff, mypyQuick Start
Python Library
from startup_valuation.core import scorecard_valuation, vc_method_post_money
from startup_valuation.advanced import black_scholes, scenario_analysis
from startup_valuation.types import Scenario
# Scorecard Method (pre-revenue startups)
result = scorecard_valuation(
average_valuation=1_500_000,
weights=[0.30, 0.25, 0.15, 0.10, 0.10, 0.05, 0.05],
scores=[1.25, 1.50, 1.20, 0.75, 1.00, 0.90, 1.00],
)
print(f"Scorecard: ${result.value:,.0f}") # $1,800,000
# Black-Scholes for real options (startup equity)
result = black_scholes(
underlying=20_000_000, strike=5_000_000,
risk_free_rate=0.05, volatility=0.40, time_to_maturity=1.0,
)
print(f"Option value: ${result.value:,.0f}") # $15,240,000
# Scenario Analysis
scenarios = [
Scenario("bull", 0.20, 10_000_000),
Scenario("base", 0.60, 5_000_000),
Scenario("bear", 0.20, 1_000_000),
]
result = scenario_analysis(scenarios)
print(f"Expected value: ${result.value:,.0f}") # $5,200,000MCP Server (for AI Agents)
The server exposes 14 tools, each folding a family of formulas behind a method
argument — probability, time value, CAPM, core pre-revenue methods, options,
comparables, SaaS, marketplaces, fintech, biotech, hardware, international,
stakeholder equity, emerging methods, and a triangulated full analysis.
Local (stdio):
pip install "startup-valuation[mcp]"
startup-valuation-mcp # console script installed with the [mcp] extra
**Prompts and resources.** Besides the 14 tools, the server offers three guided
prompts (`value_pre_revenue_startup`, `value_saas_startup`, `model_funding_round`)
and a machine-readable method catalog at `startup-valuation://methods`, so agents
can see every method's required parameters before calling a tool.
# or: python -m startup_valuation.mcp
# or ephemeral, no clone: uvx --from startup-valuation startup-valuation-mcpHosted (Streamable HTTP) — no install, no API key:
https://startup-valuation.simonmak.com/apiOpenCode — add to opencode.json:
"startup-valuation": {
"type": "remote",
"url": "https://startup-valuation.simonmak.com/api",
"timeout": 60000
}Claude Desktop / Cursor — add the HTTP URL https://startup-valuation.simonmak.com/api
as an MCP server, or run the stdio entrypoint above.
MCP Registry — published as io.github.simonmak-ascent/startup-valuation
(manifest: server.json) and listed on
Glama and the
Official MCP Registry. The
glama.json file holds the Glama maintainer entry.
AI-agent skills
Copy the skills/ directory to your agent's skills folder:
valuation-core— Scorecard, Berkus, VC Method, Risk Factor Summationvaluation-foundations— Probability, time value, CAPM, comparablesvaluation-advanced— Black-Scholes, Binomial, Monte Carlo, Scenario Analysisvaluation-industry— SaaS, Biotech, Fintech, Marketplace, Hardwarevaluation-stakeholder— Dilution, OPM, PWERM, Liquidation Preferencevaluation-emerging— SAFE, Crypto (MV=PQ), ESG, Metcalfe's Law
Valuation Methods by Category
Category | Methods | Chapter |
Probability | Expected value, joint probability, Poisson | 2 |
Time Value | PV, NPV, annuity | 2 |
CAPM | CAPM, portfolio beta, startup-adjusted | 2 |
Core | Scorecard, Berkus, Risk Factor, VC Method | 3 |
Advanced | Black-Scholes, Binomial, Monte Carlo, Scenario | 4 |
Comparables | P/E, P/S, EV/EBITDA, regression-adjusted | 5 |
SaaS | LTV, CAC, NRR, Magic Number, Rule of 40 | 11 |
Biotech | rNPV, decision tree, peak sales, pipeline | 11 |
Fintech | Payment revenue, lending, neobank, network effects | 11 |
Marketplace | GMV, take rate, liquidity, network density | 11 |
Hardware | TRL-adjusted, break-even, P-weighted DCF | 11 |
International | PPP, CRP, currency-adjusted DCF, Damodaran | 12 |
Stakeholders | Dilution, OPM, PWERM, liquidation, synergies | 13 |
Emerging | SAFE, MV=PQ, ESG, Metcalfe's, data moat | 14 |
Why This Library?
Auditable — Every function returns
ValuationResultwith value, method, inputs, assumptions, and sensitivity analysisTextbook-accurate — All formulas verified against book example values with unit tests
AI-ready — MCP server and Skills for seamless AI agent integration
Industry-specific — Dedicated modules for SaaS, biotech, fintech, marketplace, and hardware startups
Open source — MIT license, extensible, well-documented
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run with coverage
pytest --cov=startup_valuation --cov-report=term-missing
# Lint
ruff check .
# Type check
mypy src/startup_valuation --ignore-missing-importsDocumentation
API Reference: GitHub Pages
Wiki (Theory & Derivations): GitHub Wiki
Chapter Index: Maps every function to its textbook chapter
Examples: Interactive code snippets for each valuation category
Companion Textbook
Startup Valuation: A Comprehensive Guide to Valuing Fast-Growing Pre-Revenue Companies
Theory, Methods, Regulation, and Practice — Valuation in Practice Series by Ascent Partners
By Simon Mak · 338 pages · 15 chapters · 300+ exercises · 20+ real-world cases
Citing This Project
@software{startup_valuation_engine,
author = {Mak, Simon},
title = {Startup Valuation Engine},
year = {2026},
url = {https://github.com/simonmak-ascent/startup-valuation},
license = {MIT},
}Based on formulas from the Startup Valuation textbook.
Use with Context7
Up-to-date Startup Valuation Engine documentation is indexed on Context7, so coding agents can pull it into context on demand. With the Context7 MCP server or ctx7 CLI installed, name the library in your prompt:
use library /simonmak-ascent/startup-valuation for API and docsLicense
MIT — see LICENSE.
By Ascent Partners — part of the Valuation in Practice Series.
If this saves you time, a ⭐ on GitHub helps others find it.
Available Tools
14 toolsvaluation_advancedOptions & Scenario AnalysisARead-onlyIdempotentInspect
Advanced techniques: Black-Scholes call value, binomial-tree option value, and scenario analysis. Method selects the technique. For a quick expected value over arbitrary outcome lists, prefer valuation_probability with method 'probability_weighted'; scenario_analysis here is for explicit named bull/base/bear scenario tables. Parameters apply per method: black_scholes and binomial need underlying + strike + risk_free_rate + volatility + time_to_maturity (binomial adds steps); scenario_analysis needs scenarios. Not for plain discounted cash flow — for that use valuation_time_value. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | Binomial tree time steps (integer ≥ 1; higher = more accurate). | |
| method | Yes | Formula to apply. Options: black_scholes = C = N(d₁)S - N(d₂)Ke^(-rT).; binomial = Cox-Ross-Rubinstein binomial option value.; scenario_analysis = E[V] = Σ pᵢ·Vᵢ over named scenarios. | |
| strike | No | Strike / exercise price K, currency units. | |
| scenarios | No | Scenario objects: {name: str, probability: 0-1, value: currency}; probabilities should sum to 1. | |
| underlying | No | Underlying asset value S, currency units. | |
| volatility | No | Annualised volatility σ as a decimal (0.80 = 80%). | |
| risk_free_rate | No | Risk-free rate as a decimal (e.g. 0.04 for 4%). | |
| time_to_maturity | No | Time to expiry in years T, must be ≥ 0. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive, closed world), the description discloses error behavior for unknown methods and missing required params, that outputs are rounded to 2 decimals, that computation is pure arithmetic with no I/O or external calls, and that there is no auth or rate limiting.
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 techniques, then routing, then method-parameter requirements, then output/behavioral notes. Dense but each sentence carries information; the only slight redundancy is restating return fields when an output schema exists.
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 an 8-parameter, method-dispatched tool with an output schema, the description covers method selection, per-method required inputs, units/conventions, failure modes, and side-effect profile — nothing an agent needs 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% so per-parameter meanings are already documented, but the description adds the method-to-parameter mapping (which fields black_scholes/binomial/scenario_analysis require), notes steps only applies to binomial, and clarifies that rate/decimal inputs are fractions in [0,1] — genuine value 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?
States specific verbs and resources (Black-Scholes call value, binomial-tree option value, scenario analysis) and explicitly distinguishes itself from sibling tools, naming valuation_probability and valuation_time_value as the alternatives for other tasks.
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 explicit when-to-use routing: use valuation_probability with method 'probability_weighted' for quick expected values over arbitrary outcome lists, use scenario_analysis here for named bull/base/bear tables, and use valuation_time_value for plain DCF. Each alternative names the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_biotechBiotech Pipeline ValuationARead-onlyIdempotentInspect
Risk-adjusted biotech valuation: peak sales, decision-tree expected value, and full pipeline rNPV across drugs. Method selects the model. Use for pharma/drug pipelines; for hardware or deep tech use valuation_hardware. Parameters apply per method: peak_sales needs patient_population + penetration + price; decision_tree needs probabilities + terminal_value; pipeline needs drugs + discount_rate. Not for hardware or deep tech — for that use valuation_hardware. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| drugs | No | Pipeline drugs: {name, peak_sales, probability, years_to_market, multiple(optional)}. | |
| price | No | Price per unit / treatment, currency units. | |
| method | Yes | Formula to apply. Options: peak_sales = Peak = population × penetration × price × compliance.; decision_tree = EV = Π pᵢ × terminal value.; pipeline = V = Σ(peak sales × multiple × P_success) / (1+r)^n. | |
| compliance | No | Compliance / adherence rate as a decimal. | |
| penetration | No | Market penetration as a decimal (0.10 = 10%). | |
| discount_rate | No | Discount rate as a decimal (0.12 = 12%). | |
| probabilities | No | Probability of each outcome or stage, each in [0,1]; the list must sum to 1 where it is exhaustive. | |
| terminal_value | No | Expected exit / terminal value, currency units. | |
| patient_population | No | Target patient population treated per year. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/no open world, and the description adds real behavioral context beyond them: pure arithmetic with no I/O or external calls, rounding to 2 decimals, no auth or rate limits, and explicit error behavior for an unknown method or a missing method-required parameter.
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 and information-dense, but the hard-tech exclusion is stated twice ('for hardware or deep tech use valuation_hardware' early, then 'Not for hardware or deep tech — for that use valuation_hardware' later), and the method-parameter mapping is buried in a long run-on middle sentence.
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 9-param, method-switching calculator with an output schema present, the description covers selection, per-method parameter requirements, edge-case errors, and numerical conventions. Nothing an agent needs to call 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 description coverage is 100%, so the baseline is 3, but the description adds the conditional dependency structure the flat schema cannot express: peak_sales needs patient_population + penetration + price, decision_tree needs probabilities + terminal_value, pipeline needs drugs + discount_rate. It also clarifies fraction semantics (0.10 = 10%) and that unselected params should be omitted so defaults apply.
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?
Names a specific verb and resource ('risk-adjusted biotech valuation') and enumerates the three concrete models it produces (peak sales, decision tree, rNPV). It also explicitly separates itself from the sibling valuation_hardware, so an agent can route 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?
States the domain ('pharma/drug pipelines'), the exclusion ('not for hardware or deep tech'), and names the alternative tool to use instead. The 'method selects the model' framing plus the required-only-'method' note tells the agent exactly how invocation works.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_capmCAPM & Cost of EquityARead-onlyIdempotentInspect
Estimate the cost of capital: standard CAPM, startup-adjusted CAPM with size and illiquidity premiums, portfolio beta from weighted asset betas, and WACC blending after-tax cost of equity and debt. Method selects the formula. Use to derive the discount rate that feeds valuation_time_value and DCF models; for cross-border rates add valuation_international. Parameters apply per method: capm needs risk_free_rate + beta + market_return; startup_capm adds size_premium and liquidity_premium; portfolio_beta needs weights + betas, which must be equal length; wacc needs equity_value + debt_value + cost_of_equity + cost_of_debt + tax_rate. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| beta | No | Systematic risk beta (market = 1.0). | |
| betas | No | Asset betas aligned with weights; typically 0.5–3.0 (market = 1.0). | |
| method | Yes | Formula to apply. Options: capm = E(R) = Rf + β·(E(Rm) - Rf).; startup_capm = r = Rf + β·MRP + size premium + illiquidity premium.; portfolio_beta = βp = Σ wᵢ·βᵢ.; wacc = WACC = (E/V)·Re + (D/V)·Rd·(1 − T). | |
| weights | No | Portfolio or factor weights, each in [0,1] and summing to 1 (same order as the paired value list). | |
| tax_rate | No | Effective tax rate as a decimal in [0,1]. | |
| debt_value | No | Market value of debt, in currency units. | |
| cost_of_debt | No | Pre-tax cost of debt Rd as a decimal. | |
| equity_value | No | Value of equity offered, currency units. | |
| size_premium | No | Small-cap / size premium as a decimal. | |
| market_return | No | Expected market return as a decimal (e.g. 0.10 for 10%). | |
| cost_of_equity | No | After-tax cost of equity Re as a decimal. | |
| risk_free_rate | No | Risk-free rate as a decimal (e.g. 0.04 for 4%). | |
| liquidity_premium | No | Illiquidity premium as a decimal. | |
| market_risk_premium | No | Market risk premium as a decimal (e.g. 0.06). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, non-open-world behavior, and the description adds real context on top: pure arithmetic with no I/O or external calls, no auth or rate limits, rounding to 2 decimals, and that an unknown method or missing method-required parameter returns an error instead of a value. That is meaningful disclosure of failure modes and side-effect profile.
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 purpose, then usage, then method-dependent parameter mapping, then behavior — a sensible order with almost no filler. It is dense and slightly repetitive on units/weights already stated in the schema, so not quite maximal.
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 14-parameter, method-dependent tool, the description covers method selection, required-vs-optional inputs per method, cross-parameter constraints, input units, error behavior, and integration with sibling valuation tools. An output schema exists, so the brief return summary is redundant but harmless; nothing needed to call 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%, so the baseline is 3, but the description adds non-schema constraints: the per-method parameter mapping (capm = risk_free_rate + beta + market_return, etc.) and the cross-parameter rule that weights and betas must be equal length. Some unit guidance (fractions, [0,1] sums) duplicates the schema, keeping this below 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 ('Estimate the cost of capital') and enumerates exactly which computations it covers: standard CAPM, startup-adjusted CAPM with size/illiquidity premiums, portfolio beta, and WACC. It explicitly routes the agent away from itself toward valuation_time_value and valuation_international, so it is distinguishable from siblings 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?
Gives explicit when-to-use ('derive the discount rate that feeds valuation_time_value and DCF models') and a conditional alternative ('for cross-border rates add valuation_international'). It further specifies which parameters each method requires and that only 'method' is mandatory, which is actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_comparablesComparable MultiplesARead-onlyIdempotentInspect
Market multiples from comparables: P/E, P/S, EV/EBITDA, EV/Revenue, and a regression-adjusted multiple. Method selects the ratio. Use when public comparables exist; for pre-revenue or private startups use valuation_core. Parameters apply per method: pe_ratio needs market_cap + net_income; ps_ratio needs market_cap + revenue; ev_ebitda needs enterprise_value + ebitda; ev_revenue needs enterprise_value + revenue; regression_multiple needs intercept + growth_rate + growth_coefficient (plus optional maturity/stage/geography terms). Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| stage | No | Company stage indicator. | |
| ebitda | No | EBITDA, currency units. | |
| method | Yes | Formula to apply. Options: pe_ratio = P/E = market cap / net income.; ps_ratio = P/S = market cap / revenue.; ev_ebitda = EV/EBITDA = enterprise value / EBITDA.; ev_revenue = EV/Revenue = enterprise value / revenue.; regression_multiple = Multiple = β0 + β1·g + β2·M + β3·S + β4·G. | |
| revenue | No | Revenue for the period, currency units. | |
| geography | No | Geography indicator. | |
| intercept | No | Regression intercept β0 (base multiple). | |
| market_cap | No | Market capitalisation, currency units. | |
| net_income | No | Net income (earnings), currency units. | |
| growth_rate | No | Revenue growth rate as a decimal (0.40 = 40%). | |
| market_maturity | No | Market maturity indicator. | |
| enterprise_value | No | Enterprise value (market cap + net debt), currency units. | |
| stage_coefficient | No | Regression slope on stage. | |
| growth_coefficient | No | Regression slope on growth (multiple points per unit growth). | |
| maturity_coefficient | No | Regression slope on market maturity. | |
| geography_coefficient | No | Regression slope on geography. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial context beyond them: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and explicit error behavior for an unknown method or a missing method-required parameter. It also discloses unit conventions (fractions, 0.10 = 10%; probabilities/weights in [0,1] summing to 1).
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 purpose, then routing, then per-method parameter requirements, then units and return behavior — a logical order with no filler sentences. It is dense and slightly long, and the listing of return fields (value, method, inputs, assumptions, chapter, formula_number, calculation steps) partially duplicates the existing output schema, so it falls just short of maximal conciseness.
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 15-parameter, method-branching calculator with annotations and an output schema, the description covers everything an agent needs: routing, required vs. method-dependent parameters, unit conventions, determinism/rounding, error semantics, and side-effect profile. Nothing material is left to inference.
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?
With 100% schema coverage the baseline would be 3, but the description adds meaning the schema does not: an explicit mapping of which parameters each method requires (pe_ratio needs market_cap + net_income; ev_revenue needs enterprise_value + revenue; regression_multiple needs intercept + growth_rate + growth_coefficient, plus optional maturity/stage/geography terms). That method-to-parameter dependency is the single most useful piece of invocation guidance and is absent from the flat 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?
The opening sentence names the specific resource (market multiples from comparables) and enumerates the exact ratios produced (P/E, P/S, EV/EBITDA, EV/Revenue, regression-adjusted), with 'method selects the ratio' clarifying the tool's controlling input. It also names the sibling it is not (valuation_core) and the condition that routes elsewhere, so an agent can distinguish it 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?
Explicit routing guidance: 'Use when public comparables exist; for pre-revenue or private startups use valuation_core.' It further states only `method` is required, that other params are method-dependent, and that callers should supply only those the selected method names and omit the rest. When-to-use, when-not-to-use, and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_corePre-Revenue Core MethodsARead-onlyIdempotentInspect
The textbook's pre-revenue methods: Scorecard, Berkus, Risk-Factor Summation, VC Method (post- and pre-money), and exit terminal value. Use these first for early-stage startups. Method selects the formula, and each method names its own parameters: scorecard needs average_valuation + weights + scores; berkus takes five factor awards; risk_factor needs base_valuation + risk_ratings; vc_post_money needs terminal_value + target_return; vc_pre_money needs post_money + investment; terminal_value needs projected_revenue + multiple; triangulated needs the scorecard inputs plus terminal_value/target_return/investment. Routing: for SAFEs, tokens, ESG, network effects, or data-moat methods use valuation_emerging; for options or bull/base/bear scenario tables use valuation_advanced; for public-comparable multiples use valuation_comparables. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula to apply. Options: scorecard = V = V_avg · Σ(wᵢ·sᵢ) across 7 factors.; berkus = V = Σ factor awards, each capped at $500K.; risk_factor = V = V_base + Σ(rᵢ·$250K) over 12 risks.; vc_post_money = Post = Terminal / target ROI.; vc_pre_money = Pre = Post - Investment.; terminal_value = Terminal = projected revenue × multiple.; triangulated = Runs Scorecard and the VC Method together and returns their mean. | |
| scores | No | Factor multipliers aligned with weights (1.0 = average, >1 above average). | |
| weights | No | Portfolio or factor weights, each in [0,1] and summing to 1 (same order as the paired value list). | |
| multiple | No | Exit or market multiple applied to the metric. | |
| prototype | No | Berkus award for prototype / technology, 0 to 500,000. | |
| investment | No | Amount invested, currency units. | |
| post_money | No | Post-money valuation, currency units. | |
| sound_idea | No | Berkus award for soundness of the idea, 0 to 500,000 (USD). | |
| quality_team | No | Berkus award for management team, 0 to 500,000. | |
| risk_ratings | No | 12 risk factor ratings in [-2,2] (very low to very high); each unit shifts value ±250,000. | |
| target_return | No | VC target return multiple (e.g. 10 for a 10x target). | |
| base_valuation | No | Pre-adjustment baseline valuation, currency units. | |
| terminal_value | No | Expected exit / terminal value, currency units. | |
| product_rollout | No | Berkus award for product rollout / sales, 0 to 500,000. | |
| average_valuation | No | Average pre-revenue valuation for the sector, currency units. | |
| projected_revenue | No | Projected revenue at exit, currency units. | |
| strategic_relationships | No | Berkus award for strategic relationships, 0 to 500,000. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantial behavioral context beyond them: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and explicit error behavior on unknown method or missing required parameter.
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 method inventory and usage rule, then the per-method parameter mapping, then routing, then output/unit conventions — a logical order with no filler sentences. It is a dense single block and slightly long for one paragraph, but every clause carries decision-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?
Despite 17 parameters and 7 enum methods, the description supplies the per-method parameter mapping, unit semantics, error cases, and result shape; the output schema covers return fields (value, method, inputs, assumptions, chapter, formula_number, steps) which the description points to without duplicating. An agent has everything needed to call any method 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 would be 3, but the description adds cross-parameter conditional logic the schema cannot express: which parameters each method requires (scorecard → average_valuation + weights + scores; vc_pre_money → post_money + investment, etc.) plus unit conventions (fractions like 0.10, weight/probability lists in [0,1] summing to 1, method-dependent optional parameters that should be omitted).
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 (pre-revenue valuation methods) and enumerates exactly which methods it covers: Scorecard, Berkus, Risk-Factor Summation, VC Method both variants, and terminal value. It explicitly distinguishes itself from the sibling emerging/advanced/comparables tools, so an agent can route 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?
Gives explicit when-to-use ('Use these first for early-stage startups') plus three named alternatives with the exact conditions that select them (SAFEs/tokens/ESG/network effects → valuation_emerging; options or bull/base/bear tables → valuation_advanced; public comps → valuation_comparables). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_emergingEmerging & Alternative MethodsARead-onlyIdempotentInspect
Modern and alternative valuation: SAFE conversion (discount, cap, expected value), token valuation (equation of exchange, NVT), ESG adjustments (rate, premium, discount), Metcalfe network value, data-moat value, and remote-first premium/NPV. Method selects the model. Use for SAFEs, tokens, ESG, network effects, data moats, and remote-first adjustments; for classic pre-revenue methods use valuation_core. Parameters apply per method: safe_discount needs series_a_price + discount; safe_cap needs cap + series_a_price; safe_expected needs investment + cap + discount + series_a_valuation + series_a_price; token_value needs transaction_volume + price_per_tx + velocity + supply; metcalfe needs n; esg_* need base_valuation + a score; data_moat needs data_volume + data_uniqueness + monetization_rate + competitive_advantage_years. Routing: for classic pre-revenue methods (Scorecard, Berkus, Risk-Factor Summation, VC Method) use valuation_core; for options or scenario tables use valuation_advanced; for public-comparable multiples use valuation_comparables. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of events k for the Poisson probability P(X=k); integer ≥ 0. | |
| n | No | Number of users or nodes in the network. | |
| cap | No | SAFE valuation cap, currency units. | |
| rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| method | Yes | Formula to apply. Options: safe_discount = Price = Series A price × (1 - discount).; safe_cap = Price = cap / pre-money shares (cap-based).; safe_expected = Expected SAFE value across cap and discount outcomes.; token_value = Value = (volume × price) / (velocity × supply).; nvt_ratio = NVT = market cap / daily transaction volume.; esg_rate = r = base + ESG risk premium - ESG opportunity discount.; esg_premium = Valuation uplift = base × (1 + score × premium per point).; esg_discount = Valuation reduction = base × (1 - risk score × discount per point).; metcalfe = V = k · n².; data_moat = Discounted value of monetised proprietary data.; remote_npv = Perpetuity NPV = annual savings / discount rate.; remote_premium = Valuation premium from cost savings, talent access, and productivity. | |
| supply | No | Circulating token supply. | |
| discount | No | Conversion discount as a decimal (0.20 = 20% discount). | |
| velocity | No | Token velocity (turnover of supply per period). | |
| esg_score | No | ESG score in points (e.g. 0-100). | |
| investment | No | Amount invested, currency units. | |
| market_cap | No | Market capitalisation, currency units. | |
| data_volume | No | Volume of proprietary data held. | |
| price_per_tx | No | Protocol revenue per transaction, currency units. | |
| discount_rate | No | Discount rate as a decimal (0.12 = 12%). | |
| annual_savings | No | Annual cost savings, currency units. | |
| base_valuation | No | Pre-adjustment baseline valuation, currency units. | |
| esg_risk_score | No | ESG risk score in points (higher = riskier). | |
| series_a_price | No | Price per share in the next priced (Series A) round. | |
| data_uniqueness | No | Uniqueness / scarcity of the data in [0,1]. | |
| cost_savings_pct | No | Cost savings as a fraction of baseline. | |
| esg_risk_premium | No | ESG risk premium added to the rate, as a decimal. | |
| monetization_rate | No | Fraction of data value monetisable as a decimal. | |
| premium_per_point | No | Valuation premium per ESG point as a decimal. | |
| productivity_gain | No | Productivity gain as a decimal. | |
| discount_per_point | No | Valuation discount per ESG risk point as a decimal. | |
| series_a_valuation | No | Series A post-money valuation, currency units. | |
| transaction_volume | No | Total payment transaction volume, currency units. | |
| talent_access_premium | No | Talent-access premium as a decimal. | |
| esg_opportunity_discount | No | ESG opportunity discount subtracted from the rate. | |
| competitive_advantage_years | No | Years the data moat is expected to last. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered. The description still adds genuinely new behavior: 'pure arithmetic — no I/O and no external calls', 'no auth or rate limits', results 'rounded to 2 decimals', and the error contract ('An unknown method, or a missing method-required parameter, returns an error instead of a value'). The enumerated return fields (value, method, inputs, assumptions, chapter, formula_number, steps) largely restate the output schema and are the only soft spot, keeping this below 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?
The description is long but front-loaded and densely organized: method inventory, then usage, then per-method parameter dependencies, then routing, then input conventions, then return/error contract. Every section earns its place for a 30-parameter polymorphic tool, though the opening method roster partially duplicates the method enum and the per-method table could be slightly tighter.
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 a 30-param, one-of-N-method tool with an output schema present, the description covers everything an agent needs: which method to pick, which params each method requires, the fraction/percent and [0,1] conventions, sibling routing, error semantics, and determinism. Return-value detail is appropriately delegated to the output schema. The only minor looseness is 'esg_* need base_valuation + a score', which does not name esg_score vs esg_risk_score, but the enum plus schema fields resolve 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 coverage is 100%, so the baseline is 3, but the description materially exceeds it by mapping conditional parameter dependencies per method (safe_expected needs investment + cap + discount + series_a_valuation + series_a_price; metcalfe needs n; data_moat needs data_volume + data_uniqueness + monetization_rate + competitive_advantage_years). It also supplies unit conventions the schema states only per-field ('Rate and decimal inputs are fractions (0.10 = 10%)') and the omit-the-rest/defaults rule for the 29 optional params.
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 named, specific set of methods (SAFE conversion, token valuation, ESG adjustments, Metcalfe, data moat, remote-first) and states 'Method selects the model', so the verb (value/compute) and resource (emerging & alternative methods) are unambiguous. It explicitly carves out the sibling boundary by naming valuation_core, valuation_advanced, and valuation_comparables, letting an agent distinguish this tool from all 13 siblings 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?
It gives explicit when-to-use ('Use for SAFEs, tokens, ESG, network effects, data moats, and remote-first adjustments') and when-not ('for classic pre-revenue methods use valuation_core'), plus a full routing paragraph mapping alternatives: valuation_core for Scorecard/Berkus/Risk-Factor/VC, valuation_advanced for options/scenarios, valuation_comparables for multiples. Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_fintechFintech ValuationARead-onlyIdempotentInspect
Value and size fintech business models: payment revenue, lending valuation, payment-processor DCF, and neobank customer-based valuation. Method selects the model. Use for payments, lending, and neobanks; for SaaS-style unit economics use valuation_saas. Parameters apply per method: payment_revenue needs transaction_volume + take_rate; lending needs loan_book + roe + pe_multiple; payment_processor adds growth_rate + discount_rate + terminal_multiple; neobank needs customers + arpu + gross_margin + churn_rate + pe_multiple. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| roe | No | Return on equity as a decimal (0.20 = 20%). | |
| arpu | No | Average revenue per user per month, currency units. | |
| years | No | Forecast horizon in years; integer ≥ 1. | |
| method | Yes | Formula to apply. Options: payment_revenue = Revenue = volume × take rate.; lending = V = loan book × ROE × P/E - NPL reserves.; payment_processor = DCF of payment revenue with a terminal multiple.; neobank = Customer LTV × P/E applied to the customer base. | |
| customers | No | Number of customers. | |
| loan_book | No | Outstanding loan book / principal, currency units. | |
| take_rate | No | Take rate as a decimal (0.15 = 15% of GMV). | |
| churn_rate | No | Periodic churn rate as a decimal (0.02 = 2% per month). | |
| growth_rate | No | Revenue growth rate as a decimal (0.40 = 40%). | |
| pe_multiple | No | Price/earnings multiple applied to earnings. | |
| gross_margin | No | Gross margin as a decimal (0.80 = 80%). | |
| npl_reserves | No | Non-performing loan reserves deducted, currency units. | |
| discount_rate | No | Discount rate as a decimal (0.12 = 12%). | |
| terminal_multiple | No | Terminal value multiple applied at the horizon. | |
| transaction_volume | No | Total payment transaction volume, currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial behavior beyond them: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and explicit failure behavior on unknown method or missing method-required parameters.
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 purpose and routing before diving into the parameter matrix, and every clause is informative. It is long and has minor redundancy ('all other parameters are method-dependent, so supply those the selected method names and omit the rest'), but nothing is 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?
For a 15-parameter, 4-mode tool with an output schema present, the description covers routing, per-method inputs, unit conventions, error behavior, and a brief return-value summary without duplicating the output schema in detail. An agent has everything needed to invoke 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 per-parameter meaning is already documented. The description still adds real value the schema cannot express: a method-to-required-parameter matrix (e.g. lending needs loan_book + roe + pe_multiple; neobank needs customers + arpu + gross_margin + churn_rate + pe_multiple) plus unit conventions (fractions, probability lists summing to 1).
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 ('Value and size fintech business models') and enumerates the four sub-models it covers (payment revenue, lending, processor DCF, neobank). It also names the sibling it is not (valuation_saas), so an agent can distinguish it without opening sibling 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?
Explicit routing guidance: 'Use for payments, lending, and neobanks; for SaaS-style unit economics use valuation_saas.' It also explains the selection mechanism (method selects the model) and the exclusion condition (missing/unknown method returns an error rather than a value).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_hardwareHardware & Unit EconomicsARead-onlyIdempotentInspect
Hardware and deep-tech valuation: TRL-risk-adjusted valuation, gross margin, and break-even volume. Method selects the metric. Use for hardware and deep tech with technology-readiness risk; for drug pipelines use valuation_biotech. Parameters apply per method: trl needs market_size + market_share + margin + multiple + trl_discount; gross_margin needs asp + variable_cost; break_even_volume needs fixed_costs + asp + variable_cost. Not for drug pipelines — for those use valuation_biotech. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| asp | No | Average selling price per unit, currency units. | |
| margin | No | Profit margin as a decimal. | |
| method | Yes | Formula to apply. Options: trl = V = market × share × margin × multiple × (1 - TRL discount).; gross_margin = GM = (ASP - COGS) / ASP.; break_even_volume = Units = fixed costs / (ASP - variable cost). | |
| multiple | No | Exit or market multiple applied to the metric. | |
| fixed_costs | No | Fixed costs for the period, currency units. | |
| market_size | No | Total addressable market, currency units. | |
| market_share | No | Target market share as a decimal in [0,1]. | |
| trl_discount | No | TRL risk discount as a decimal (applied as 1 - discount). | |
| variable_cost | No | Variable cost per unit, currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds that unknown methods or missing method-required parameters return an error, that inputs are fractions (0.10 = 10%), that probability/weight lists are in [0,1] summing to 1, and that it is pure arithmetic with no auth or rate limits. The return fields are listed, though an output schema exists so that is bonus rather than necessary.
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 purpose, then method routing, then the 'not for' exclusion, parameter guidance, and input conventions. It is information-dense and every sentence carries useful content, though the 'Not for drug pipelines — for those use valuation_biotech' clause repeats the earlier sibling exclusion, which is slightly redundant.
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 9-parameter tool with one required parameter, method-dependent inputs, an output schema, and enum-valued method, the description covers selection, per-method inputs, conventions, error behavior, and return shape. An agent has everything needed to invoke 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 schema already documents each parameter type and meaning; baseline would be 3. The description adds method-to-parameter mapping (trl needs market_size + market_share + margin + multiple + trl_discount; gross_margin needs asp + variable_cost; break_even_volume needs fixed_costs + asp + variable_cost) and the fraction/list conventions, which is meaningful cross-parameter semantics the schema does not encode.
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 specific verbs and resources — 'TRL-risk-adjusted valuation, gross margin, and break-even volume' — matching the three enum methods. It explicitly distinguishes from the sibling valuation_biotech, making it easy for an agent to select among the valuation_* family.
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?
Explicit when-to-use ('for hardware and deep tech with technology-readiness risk') and when-not ('Not for drug pipelines — for those use valuation_biotech'), naming the alternative tool twice. Method-dependent parameter requirements are also spelled out so the agent knows which inputs to supply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_internationalInternational ValuationARead-onlyIdempotentInspect
Cross-border adjustments: purchasing-power parity, country risk premium, and international CAPM. Method selects the adjustment. Use for cross-border cash flows and country risk; pair with valuation_capm and valuation_time_value. Parameters apply per method: ppp needs spot_rate + inflation_foreign + inflation_domestic; country_risk_premium needs sovereign_yield + us_treasury_yield; intl_capm needs risk_free_rate + beta + mrp + crp. Not for the domestic cost of equity — for that use valuation_capm. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| crp | No | Country risk premium as a decimal. | |
| mrp | No | Market risk premium as a decimal. | |
| beta | No | Systematic risk beta (market = 1.0). | |
| method | Yes | Formula to apply. Options: ppp = Eₜ = E₀·(1+π_foreign)/(1+π_domestic).; country_risk_premium = CRP = sovereign yield - US Treasury yield.; intl_capm = r = Rf + β·MRP + CRP. | |
| spot_rate | No | Spot FX rate (domestic per foreign), e.g. 7.2 CNY/USD. | |
| risk_free_rate | No | Risk-free rate as a decimal (e.g. 0.04 for 4%). | |
| sovereign_yield | No | Foreign sovereign bond yield as a decimal. | |
| inflation_foreign | No | Foreign inflation rate as a decimal. | |
| us_treasury_yield | No | US Treasury yield as a decimal. | |
| inflation_domestic | No | Domestic inflation rate as a decimal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/no-open-world, and the description adds substantial context beyond them: pure arithmetic with no I/O or external calls, no auth or rate limits, rounding to 2 decimals, and the failure mode (unknown method or missing method-required parameter returns an error rather than a value). It even lists the return fields.
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 purpose and method-selection logic, then parameter rules and return behavior; every sentence is substantive. Slightly overlong and includes the irrelevant 'probability and weight lists' clause that appears carried over from a sibling 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?
Covers purpose, method selection, per-method parameter requirements, units, error behavior, and return contents. With a 10-parameter schema, one required parameter, and an output schema present, nothing essential is missing for correct invocation.
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 would be 3, but the description adds the crucial method-to-parameter mapping (ppp needs spot_rate + inflation_foreign + inflation_domestic, etc.) and unit conventions (0.10 = 10%) that the schema does not express. Minor noise from mentioning 'probability and weight lists in [0,1] sum to 1', which do not exist in this 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?
States a specific resource (cross-border valuation adjustments) and enumerates the three supported methods (PPP, country risk premium, international CAPM), so the agent knows exactly what computation this tool performs. It explicitly distinguishes itself from valuation_capm for domestic cost of equity, making it separable from siblings 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?
Explicitly names the use case ('cross-border cash flows and country risk'), names the alternatives ('pair with valuation_capm and valuation_time_value'), and states the exclusion ('Not for the domestic cost of equity — for that use valuation_capm'). It also tells the agent exactly which parameters to supply per method and to omit the rest.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_marketplaceMarketplace MetricsARead-onlyIdempotentInspect
Marketplace health and valuation: take rate, GMV revenue-multiple valuation, buyer retention, and network density. Method selects the metric. Use for two-sided transaction marketplaces; for subscription software use valuation_saas. Parameters apply per method: take_rate needs revenue + gmv; gmv_multiple needs gmv + multiple; buyer_retention needs buyers_period_1 + buyers_repeat; network_density needs active_buyers + active_sellers + total_users. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| gmv | No | Gross merchandise value (total transaction volume), currency units. | |
| method | Yes | Formula to apply. Options: take_rate = Take rate = revenue / GMV.; gmv_multiple = Valuation = GMV × multiple.; buyer_retention = Retention = repeat buyers / base-period buyers.; network_density = Density = active buyers × active sellers / total users. | |
| revenue | No | Revenue for the period, currency units. | |
| multiple | No | Exit or market multiple applied to the metric. | |
| total_users | No | Total users (buyers + sellers) in the period. | |
| active_buyers | No | Active buyers in the period. | |
| buyers_repeat | No | Distinct buyers from the base period who purchased again. | |
| active_sellers | No | Active sellers in the period. | |
| buyers_period_1 | No | Distinct buyers in the base period. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, closed-world), and the description adds strong behavioral context: defaults apply where defined, fractions convention, [0,1] probability constraints, rounding to 2 decimals, no auth/rate limits, and that unknown methods or missing method-required parameters return an error. This is exactly the sort of value-add the annotations cannot provide.
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 purpose, then usage, then per-method parameter mapping. Dense but no wasted sentences; the method-parameter block is long but earns its place given 9 params and 4 methods. Slightly overloaded for a single paragraph.
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 9-param, 4-method calculator with an output schema present, the description covers selection, per-method inputs, conventions, error behavior, and return fields. Nothing an agent needs to invoke 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 already 100%, but the description adds crucial cross-parameter semantics: which params each method consumes, that only method is required, that method-dependent params should be supplied and others omitted, and the fraction/[0,1] conventions. This meaningfully exceeds the schema's per-field descriptions.
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 domain (two-sided transaction marketplaces) and enumerates the metrics (take rate, GMV multiple valuation, buyer retention, network density). Explicitly distinguishes itself from the subscription sibling by naming valuation_saas and the condition that selects it.
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 ('two-sided transaction marketplaces') and a when-to-use-other ('for subscription software use valuation_saas'), plus per-method parameter requirements. An agent can route without opening the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_probabilityProbability & Expected ValueARead-onlyIdempotentInspect
Compute expected value and probability-weighted outcomes for startup scenarios: discrete E[X], joint probability of sequential events, probability-weighted value, VC portfolio expected return, Poisson event probability, and continuous E[X] over a range. Method selects the formula. Use for probability-weighted central estimates; for named bull/base/bear tables or option pricing use valuation_advanced, and to discount cash flows use valuation_time_value. Parameters apply per method: expected_value_discrete and probability_weighted need outcomes + probabilities; portfolio_return needs weights + returns; poisson needs mean_events + k; expected_value_continuous needs lower + upper. outcomes and probabilities must be equal length, and the probabilities should sum to 1. Routing: use valuation_advanced method 'scenario_analysis' for named bull/base/bear scenario tables, and its black_scholes/binomial methods for option pricing; use this tool for arbitrary outcome lists and probability-weighted central estimates. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of events k for the Poisson probability P(X=k); integer ≥ 0. | |
| lower | No | Lower integration bound (standard-normal domain, e.g. -1.0). | |
| upper | No | Upper integration bound (standard-normal domain, e.g. 1.0). | |
| method | Yes | Formula to apply. Options: expected_value_discrete = E[X] = Σ xᵢ·P(X=xᵢ) over a discrete outcome list.; joint_probability = P(total) = Π pᵢ for independent sequential events.; probability_weighted = E[V] = Σ pᵢ·Vᵢ.; portfolio_return = E[R] = Σ wᵢ·Rᵢ across a VC portfolio.; poisson = P(X=k) = e^-λ λ^k / k! for rare events.; expected_value_continuous = E[X] = ∫ x·f(x) dx over [lower, upper] on the standard normal. | |
| returns | No | Return of each asset or scenario as a decimal (0.20 = 20%), aligned with weights. | |
| weights | No | Portfolio or factor weights, each in [0,1] and summing to 1 (same order as the paired value list). | |
| outcomes | No | Possible outcome values x_i, in any currency unit (must match probabilities in length/order). | |
| mean_events | No | Poisson mean λ = expected number of events in the interval. | |
| probabilities | No | Probability of each outcome or stage, each in [0,1]; the list must sum to 1 where it is exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, closed-world profile, and the description goes well beyond them: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and the explicit error behavior when method is unknown or a required parameter is 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 method list, and each block is useful. However the valuation_advanced routing for bull/base/bear tables is stated twice, which is mild redundancy in an already dense description.
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 9-parameter, enum-driven calculator with an output schema, the description covers everything an agent needs: which method needs which inputs, input-format conventions, and the return payload. The listed return fields are redundant with the output schema but do no harm.
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%, but the description adds a method-to-parameter mapping the schema does not encode (discrete/probability_weighted need outcomes+probabilities, portfolio_return needs weights+returns, poisson needs mean_events+k, continuous needs lower+upper) plus constraints (equal length, probabilities sum to 1, fractions). Slight leftover gap: it doesn't spell out the joint_probability parameter pairing.
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 ('Compute expected value and probability-weighted outcomes') and enumerates the concrete computations (discrete E[X], joint probability, portfolio return, Poisson, continuous E[X]). It explicitly distinguishes itself from siblings valuation_advanced and valuation_time_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 explicit when-to-use routing: use this tool for arbitrary outcome lists and probability-weighted central estimates, and names the alternatives with the exact conditions that select them ('use valuation_advanced method scenario_analysis for named bull/base/bear tables', 'use valuation_time_value to discount cash flows').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_saasSaaS Metrics & ValuationARead-onlyIdempotentInspect
SaaS unit economics and valuation: LTV, CAC, MRR, ARR, net revenue retention, magic number, Rule of 40, CAC payback, and ARR revenue-multiple valuation. Method selects the metric. Use for subscription software; for marketplace GMV metrics use valuation_marketplace and for payments/lending use valuation_fintech. Parameters apply per method: ltv needs arpu + gross_margin + churn_rate; cac needs sales_marketing_expense + new_customers; arr needs subscription_values; nrr needs starting_revenue + ending_revenue; revenue_multiple needs arr + revenue_multiple. Not for company-level pre-revenue value — for that use valuation_core. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| arr | No | Annual recurring revenue, currency units. | |
| cac | No | Customer acquisition cost per customer, currency units. | |
| arpu | No | Average revenue per user per month, currency units. | |
| method | Yes | Formula to apply. Options: ltv = LTV = ARPU × gross margin / churn.; cac = CAC = S&M expense / new customers.; mrr = MRR = ARR / 12 (reverse of ARR).; arr = ARR = Σ monthly subscriptions × 12.; nrr = NRR = (start + expansion) / start, net of churn.; magic_number = Magic Number = net new ARR / prior-quarter S&M.; rule_of_40 = Score = growth rate + profit margin.; cac_payback = Months to recover CAC from gross profit.; revenue_multiple = Valuation = ARR × multiple. | |
| arr_value | No | Annual recurring revenue, currency units. | |
| churn_rate | No | Periodic churn rate as a decimal (0.02 = 2% per month). | |
| growth_rate | No | Revenue growth rate as a decimal (0.40 = 40%). | |
| net_new_arr | No | Net new ARR added in the period, currency units. | |
| gross_margin | No | Gross margin as a decimal (0.80 = 80%). | |
| new_customers | No | Number of customers acquired in the period. | |
| profit_margin | No | Profit margin as a decimal (0.15 = 15%). | |
| ending_revenue | No | Revenue from the same cohort at period end, currency units. | |
| mrr_per_customer | No | Monthly recurring revenue per customer, currency units. | |
| revenue_multiple | No | SaaS revenue multiple (e.g. 8 for 8x ARR). | |
| sm_expense_prior | No | Sales & marketing expense in the prior period, currency units. | |
| starting_revenue | No | Revenue from the cohort at period start, currency units. | |
| expansion_revenue | No | Expansion revenue from the cohort in the period. | |
| subscription_values | No | Monthly subscription revenue per customer (summed x12 for ARR). | |
| sales_marketing_expense | No | Sales & marketing spend for the period, currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare read-only/idempotent/non-destructive/closed-world, the description adds real behavioral context: pure arithmetic with no I/O or external calls, rounded to 2 decimals, no auth or rate limits, a documented error path for unknown methods or missing method-required parameters, and the shape of the returned assumptions/steps. This goes well beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
For a 19-parameter, nine-method tool the length is justified and the purpose/routing is front-loaded before parameter mechanics. It is a dense single block, however, and the per-method parameter list would read better structured, so it is efficient rather than exemplary.
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 values need not be re-explained, yet the description still summarizes the return shape and documents failure behavior. Sibling routing, parameter conventions, and the error contract are all present, leaving nothing an agent needs to invoke 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% (baseline 3), but the description adds value the schema does not encode: the per-method parameter mapping (ltv→arpu+gross_margin+churn_rate, cac→sales_marketing_expense+new_customers, etc.) and the grouping convention (only method required, omit the rest). It covers only five of the nine methods, leaving mrr, magic_number, rule_of_40, and cac_payback unmapped, 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?
The description names the exact resource (SaaS unit economics and valuation), enumerates the specific metrics computed (LTV, CAC, MRR, ARR, NRR, magic number, Rule of 40, CAC payback, revenue multiple), and states that the `method` argument selects among them. It explicitly distinguishes itself from siblings valuation_marketplace, valuation_fintech, and valuation_core by domain.
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 states when to use it (subscription software), when not to (marketplace GMV → valuation_marketplace; payments/lending → valuation_fintech; pre-revenue company-level → valuation_core), and which parameters each method requires. Routing to alternatives is explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_stakeholderStakeholder & Equity AllocationARead-onlyIdempotentInspect
Allocate value across stakeholders and equity classes: single-round dilution, OPM common stock, PWERM, liquidation value, M&A synergy, employee-option values, vesting adjustment, cash-vs-equity break-even, and asset-based loan capacity. Method selects the model. Use only after the company-level value is known (from valuation_core, valuation_saas, or valuation_comparables) to split that value across the cap table; for the company value itself do not use this tool. Parameters apply per method: dilution needs ownership_before + investment + post_money; opm needs enterprise_value + liquidation_pref + time_to_exit + volatility; pwerm and employee_option need scenarios; liquidation needs assets + recovery_rates; risk_adjusted_synergy needs revenue_synergies + cost_synergies; vesting_adjusted needs total_value + vested_fraction; max_asset_loan takes collateral values. Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| cash | No | Cash and equivalents, currency units. | |
| years | No | Forecast horizon in years; integer ≥ 1. | |
| assets | No | Map of asset name to book value, e.g. {"cash": 500000}. | |
| method | Yes | Formula to apply. Options: dilution = Ownership = before × (1 - investment / post-money).; opm = Option-pricing allocation of equity value to common shares.; pwerm = Probability-weighted expected return method across exit scenarios.; liquidation = V = Σ(asset × recovery rate).; risk_adjusted_synergy = Probability-weighted, discounted M&A revenue + cost synergies.; intrinsic_option = Intrinsic value = max(0, FMV - strike) × shares.; employee_option = Probability-weighted employee option value across scenarios.; vesting_adjusted = Option value adjusted for vesting schedule and retention probability.; cash_equity_breakeven = Break-even comparing salary reduction against discounted equity.; max_asset_loan = Borrowing capacity from asset collateral values. | |
| shares | No | Number of option shares. | |
| tax_rate | No | Effective tax rate as a decimal in [0,1]. | |
| equipment | No | Equipment, currency units. | |
| inventory | No | Inventory, currency units. | |
| prob_cost | No | Probability of realising cost synergies, 0-1. | |
| scenarios | No | Scenario objects: {name: str, probability: 0-1, value: currency}; probabilities should sum to 1. | |
| investment | No | Amount invested, currency units. | |
| post_money | No | Post-money valuation, currency units. | |
| volatility | No | Annualised volatility σ as a decimal (0.80 = 80%). | |
| real_estate | No | Real estate, currency units. | |
| total_value | No | Total grant value, currency units. | |
| equity_value | No | Value of equity offered, currency units. | |
| prob_revenue | No | Probability of realising revenue synergies, 0-1. | |
| strike_price | No | Option strike price, currency units. | |
| time_to_exit | No | Expected time to exit / liquidity in years. | |
| discount_rate | No | Discount rate as a decimal (0.12 = 12%). | |
| cost_synergies | No | Cost synergy value, currency units. | |
| recovery_rates | No | Map of asset name to recovery rate in [0,1], matching assets. | |
| retention_prob | No | Probability the holder stays, 0-1. | |
| vested_fraction | No | Fraction vested in [0,1]. | |
| years_remaining | No | Years of vesting remaining. | |
| annual_vest_rate | No | Annual vesting rate as a decimal. | |
| enterprise_value | No | Enterprise value (market cap + net debt), currency units. | |
| liquidation_pref | No | Liquidation preference amount, currency units. | |
| ownership_before | No | Founder ownership before the round as a decimal (0.60 = 60%). | |
| salary_reduction | No | Annual salary foregone for equity, currency units. | |
| fair_market_value | No | Current fair market value per share, currency units. | |
| revenue_synergies | No | Revenue synergy value, currency units. | |
| accounts_receivable | No | Accounts receivable, currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description goes further: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and deterministic error behavior for unknown methods or missing method-required parameters. That is meaningful behavioral disclosure beyond structured fields.
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 method list and per-method parameter map are front-loaded and dense, and every clause carries routing or invocation information about a 33-parameter tool. It is a long semicolon-chained sentence, but the length is largely justified by the surface area, with only minor density 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?
For a broad multi-method calculator with 33 parameters and an output schema, the description covers selection, prerequisites, per-method inputs, unit conventions, error cases, and return fields. An agent has everything needed to invoke it correctly, and return-value detail is optional given the output 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 real value by mapping each method to its required parameters (e.g. opm needs enterprise_value + liquidation_pref + time_to_exit + volatility) and stating unit conventions (fractions, probability lists in [0,1] summing to 1). It stops short of documenting every parameter/method pair, so it beats the baseline without being exhaustive.
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 (allocate value) and resource (stakeholders and equity classes), then enumerates the ten supported methods so the agent knows the exact scope. It also positions itself against siblings, making it clearly distinguishable from valuation_core and the vertical valuation tools.
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 ('only after the company-level value is known') and names the three upstream tools that produce that value, plus an explicit when-not-to-use ('for the company value itself do not use this tool'). Nothing about routing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valuation_time_valueTime Value of MoneyARead-onlyIdempotentInspect
Discount, compound, and forecast value over time: single future value PV, net present value of a cash-flow stream, annuity present value, discounted cash flow with a Gordon terminal value, constant-rate compound growth of revenue or cash flow, and the implied compound annual growth rate (CAGR). Method selects the formula. Use to convert future cash to today's value, to value a full forecast with a terminal value (dcf), to project a revenue or cash-flow series forward, or to derive the growth rate implied by two values; get the discount rate from valuation_capm or valuation_international. Parameters apply per method: present_value needs future_value + rate + periods; npv needs cash_flows + rate; annuity needs payment + rate + periods; dcf needs cash_flows + rate (optional: terminal_growth); compound_growth needs starting_value + growth_rate + periods; cagr needs starting_value + ending_value + periods. growth_rate must be greater than -1, cagr requires starting_value > 0 and periods > 0, and dcf requires rate greater than terminal_growth. Not for option values (use valuation_advanced) or for expected values over outcomes (use valuation_probability). Only method is required; all other parameters are method-dependent, so supply those the selected method names and omit the rest (defaults apply where defined). Rate and decimal inputs are fractions (0.10 = 10%); probability and weight lists are in [0,1] and sum to 1. Returns value, method, inputs, assumptions, chapter, formula_number and calculation steps; pure arithmetic — no I/O and no external calls — rounded to 2 decimals, with no auth or rate limits. An unknown method, or a missing method-required parameter, returns an error instead of a value.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| method | Yes | Formula to apply. Options: present_value = PV = C / (1+r)^t.; npv = NPV = Σ Cₜ / (1+r)^t.; annuity = PV = P·[1-(1+r)^-n]/r.; compound_growth = V_n = V_0 (1+g)^n.; cagr = CAGR = (V_n / V_0)^(1/n) - 1.; dcf = DCF = Σ Cₜ/(1+r)^t + [C_n(1+g)/(r−g)]/(1+r)^n. | |
| payment | No | Recurring payment per period, in currency units. | |
| periods | No | Number of compounding periods, must be ≥ 1 (may be fractional). | |
| cash_flows | No | Cash flows by period, first element at t=1; negatives allowed for outflows. | |
| growth_rate | No | Revenue growth rate as a decimal (0.40 = 40%). | |
| ending_value | No | Value at t=n to compare against the starting value, in currency units. | |
| future_value | No | Future cash amount to discount, in currency units. | |
| starting_value | No | Value at t=0 (revenue or cash flow) to grow forward, in currency units. | |
| terminal_growth | No | Perpetual growth rate g applied after the forecast window, as a decimal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate steps for traceability. |
| value | Yes | Computed valuation or metric. |
| inputs | No | Echo of the normalised inputs used. |
| method | No | Formula / method name that produced the result. |
| chapter | No | Source textbook chapter. |
| assumptions | No | Modelling assumptions applied. |
| formula_number | No | Source textbook formula number (e.g. '3.1'). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, but the description adds substantive context: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, no auth or rate limits, and error behavior (unknown method or missing method-required parameter returns an error). The validation constraints (growth_rate > -1, cagr needs starting_value > 0 and periods > 0, dcf needs rate > terminal_growth) further disclose failure modes.
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?
It is long but front-loaded: purpose and method list first, then usage, then per-method parameter requirements, then constraints and exclusions. Nearly every sentence carries load, though the density is high and a few clauses could be trimmed. No filler or restating of the name.
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 10-parameter, six-method, multi-constraint tool this covers everything an agent needs: method selection, per-method inputs, required constraints, unit conventions, error behavior, and sibling routing. An output schema exists, so return-value explanation is optional, yet the description still summarizes the return shape, which is a bonus rather than a gap.
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 each parameter is already documented individually (baseline 3). The description adds meaning the schema does not: the per-method parameter mapping, the rule that only method is required and the rest are method-dependent and should be omitted, and the fractions convention. This is genuine added value over the flat schema, though the parameter-level definitions themselves largely duplicate schema 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 leads with specific verbs (discount, compound, forecast) and enumerates six concrete methods, each tied to a named financial computation. It explicitly distinguishes itself from sibling tools by naming valuation_advanced (options) and valuation_probability (expected values) as the wrong choices, so an agent can route correctly 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?
It gives a when-to-use clause per method ('to convert future cash to today's value', 'to value a full forecast with a terminal value', 'to derive the growth rate implied by two values') and routes the agent to valuation_capm or valuation_international for the discount rate. Exclusions are explicit and named, covering the full when/when-not/alternatives triad.
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.
14 tool updates
v2.1.1- Changed
valuation_advanced3 fields changed- changed
Input schema / properties / steps / descriptionPrevious value: -"Binomial tree time steps (higher = more accurate)."New value: +"Binomial tree time steps (integer ≥ 1; higher = more accurate)." - changed
Input schema / properties / time_to_maturity / descriptionPrevious value: -"Time to expiry in years T."New value: +"Time to expiry in years T, must be ≥ 0." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_biotech1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_capm3 fields changed- changed
Input schema / properties / betas / descriptionPrevious value: -"Asset betas aligned with weights."New value: +"Asset betas aligned with weights; typically 0.5–3.0 (market = 1.0)." - changed
Input schema / properties / tax_rate / descriptionPrevious value: -"Effective tax rate as a decimal."New value: +"Effective tax rate as a decimal in [0,1]." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_comparables1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_core1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_emerging2 fields changed- changed
Input schema / properties / k / descriptionPrevious value: -"Number of events k for the Poisson probability P(X=k)."New value: +"Number of events k for the Poisson probability P(X=k); integer ≥ 0." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_fintech2 fields changed- changed
Input schema / properties / years / descriptionPrevious value: -"Forecast horizon in years."New value: +"Forecast horizon in years; integer ≥ 1." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_hardware2 fields changed- changed
Input schema / properties / market_share / descriptionPrevious value: -"Target market share as a decimal."New value: +"Target market share as a decimal in [0,1]." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_international1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_marketplace1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_probability2 fields changed- changed
Input schema / properties / k / descriptionPrevious value: -"Number of events k for the Poisson probability P(X=k)."New value: +"Number of events k for the Poisson probability P(X=k); integer ≥ 0." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_saas1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_stakeholder3 fields changed- changed
Input schema / properties / tax_rate / descriptionPrevious value: -"Effective tax rate as a decimal."New value: +"Effective tax rate as a decimal in [0,1]." - changed
Input schema / properties / years / descriptionPrevious value: -"Forecast horizon in years."New value: +"Forecast horizon in years; integer ≥ 1." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_time_value2 fields changed- changed
Input schema / properties / periods / descriptionPrevious value: -"Number of compounding periods (may be fractional)."New value: +"Number of compounding periods, must be ≥ 1 (may be fractional)." - added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
2 tool updates
v0.1.5- Changed
valuation_capm7 fields changed- added
Input schema / properties / cost_of_debtAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Pre-tax cost of debt Rd as a decimal." +} - added
Input schema / properties / cost_of_equityAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "After-tax cost of equity Re as a decimal." +} - added
Input schema / properties / debt_valueAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Market value of debt, in currency units." +} - added
Input schema / properties / equity_valueAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Value of equity offered, currency units." +} - changed
Input schema / properties / method / descriptionPrevious value: -"Formula to apply. Options: capm = E(R) = Rf + β·(E(Rm) - Rf).; startup_capm = r = Rf + β·MRP + size premium + illiquidity premium.; portfolio_beta = βp = Σ wᵢ·βᵢ."New value: +"Formula to apply. Options: capm = E(R) = Rf + β·(E(Rm) - Rf).; startup_capm = r = Rf + β·MRP + size premium + illiquidity premium.; portfolio_beta = βp = Σ wᵢ·βᵢ.; wacc = WACC = (E/V)·Re + (D/V)·Rd·(1 − T)." - changed
Input schema / properties / method / enumPrevious value: -[ - "capm", - "startup_capm", - "portfolio_beta" -]New value: +[ + "capm", + "startup_capm", + "portfolio_beta", + "wacc" +] - added
Input schema / properties / tax_rateAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Effective tax rate as a decimal." +}
- Changed
valuation_time_value3 fields changed- changed
Input schema / properties / method / descriptionPrevious value: -"Formula to apply. Options: present_value = PV = C / (1+r)^t.; npv = NPV = Σ Cₜ / (1+r)^t.; annuity = PV = P·[1-(1+r)^-n]/r.; compound_growth = V_n = V_0 (1+g)^n.; cagr = CAGR = (V_n / V_0)^(1/n) - 1."New value: +"Formula to apply. Options: present_value = PV = C / (1+r)^t.; npv = NPV = Σ Cₜ / (1+r)^t.; annuity = PV = P·[1-(1+r)^-n]/r.; compound_growth = V_n = V_0 (1+g)^n.; cagr = CAGR = (V_n / V_0)^(1/n) - 1.; dcf = DCF = Σ Cₜ/(1+r)^t + [C_n(1+g)/(r−g)]/(1+r)^n." - changed
Input schema / properties / method / enumPrevious value: -[ - "present_value", - "npv", - "annuity", - "compound_growth", - "cagr" -]New value: +[ + "present_value", + "npv", + "annuity", + "compound_growth", + "cagr", + "dcf" +] - added
Input schema / properties / terminal_growthAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Perpetual growth rate g applied after the forecast window, as a decimal." +}
1 tool update
v0.1.4- Changed
valuation_time_value5 fields changed- added
Input schema / properties / ending_valueAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Value at t=n to compare against the starting value, in currency units." +} - added
Input schema / properties / growth_rateAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Revenue growth rate as a decimal (0.40 = 40%)." +} - changed
Input schema / properties / method / descriptionPrevious value: -"Formula to apply. Options: present_value = PV = C / (1+r)^t.; npv = NPV = Σ Cₜ / (1+r)^t.; annuity = PV = P·[1-(1+r)^-n]/r."New value: +"Formula to apply. Options: present_value = PV = C / (1+r)^t.; npv = NPV = Σ Cₜ / (1+r)^t.; annuity = PV = P·[1-(1+r)^-n]/r.; compound_growth = V_n = V_0 (1+g)^n.; cagr = CAGR = (V_n / V_0)^(1/n) - 1." - changed
Input schema / properties / method / enumPrevious value: -[ - "present_value", - "npv", - "annuity" -]New value: +[ + "present_value", + "npv", + "annuity", + "compound_growth", + "cagr" +] - added
Input schema / properties / starting_valueAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Value at t=0 (revenue or cash flow) to grow forward, in currency units." +}
14 tool updates
v0.1.0- First observed
valuation_advanced - First observed
valuation_biotech - First observed
valuation_capm - First observed
valuation_comparables - First observed
valuation_core - First observed
valuation_emerging - First observed
valuation_fintech - First observed
valuation_hardware - First observed
valuation_international - First observed
valuation_marketplace - First observed
valuation_probability - First observed
valuation_saas - First observed
valuation_stakeholder - First observed
valuation_time_value
TDQS
Scored across 14 tools
Each tool targets a distinct valuation domain (pre-revenue, probability, time value, cost of capital, advanced, comparables, industry-specific, international, stakeholder, emerging). Descriptions explicitly route overlapping methods (e.g., scenario analysis vs probability-weighted outcomes) to the correct tool, leaving little ambiguity.
All 14 tools follow the identical valuation_<domain> snake_case pattern, with consistent prefixes and readable domain names. No deviations in case or verb style.
14 tools is within the recommended 3–15 range and each tool covers a distinct methodology cluster; the count maps well to the breadth of startup valuation without redundancy.
The surface covers an impressive range of pre-revenue, industry, and advanced methods, but lacks explicit support for a few common techniques like precedent transaction multiples or detailed term-sheet waterfall modeling; minor gaps only.
Maintenance
Related MCP Connectors
Deterministic company valuation and corporate finance tools for AI agents — IRR, NPV, MOIC, DCF, WACC, enterprise value, EV multiples, CAPM, beta and sensitivity analysis via Model Context Protocol. Useful for financial analysis, equity analysis, quantitative analysis, financial projections, financial formulas and financial modeling.
44 calculators for AI agents: US tax, finance, business + an MCP engineering & security suite.
13-model stock valuation engine for AI agents - fair values for 5,900+ US stocks, updated daily.
Deterministic time-value-of-money and fund-performance tools for AI agents — future value, present value, CAGR, annuities, perpetuities, loan payments, payback, discounted payback, DPI, RVPI and TVPI via Model Context Protocol. Useful for corporate finance, financial projections, financial analysis, quantitative analysis, financial formulas and financial modeling.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides professional property assessment capabilities including community ratings, community valuations, and individual property appraisals for real estate transactions, investment due diligence, and risk management in China.51 npm4MIT
- AlicenseNot gradedqualityCmaintenanceCryptocurrency fundamental analysis tools via MCP. Enables users and AI agents to evaluate cryptocurrencies across 8 metrics using Sound Value principles. Provides educational material, fair value estimates, and valuation categories.1MIT
- FlicenseNot gradedqualityDmaintenanceEnables querying index valuations (PE, PB, etc.) for 63 Chinese stock indices, with support for fuzzy search, batch queries, historical data, and trend analysis.1-
- FlicenseNot gradedqualityCmaintenanceProvides startup verification tools including domain/package/org availability checks, unit economics, runway, market size, and cap table calculations with transparent formulas and warnings to prevent common agent errors.-