Skip to main content
Glama
simonmak-ascent

Intangible Asset Valuation

Intangible Asset Valuation Engine

A complete intangible asset valuation library implementing 124+ functions from the Intangible Asset Valuation textbook — Python library, MCP server, and AI-agent skills.

CI PyPI License: MIT Python 3.11+ Coverage Docs MCP tools OpenSSF Scorecard Glama MCP

Overview

A production-grade Python library for intangible asset valuation, implementing every formula from the Intangible Asset Valuation textbook by Simon Mak, William Yuen, Paul Wu, and Wayne Hu (Valuation in Practice Series, Ascent Partners). Designed for developers, financial analysts, accountants, and AI agents who need auditable, structured valuation computations for ASC 805 / IFRS 3 compliant workflows.

Three-layer architecture:

graph TB
    subgraph Library["Python Library"]
        MOD["22 Modules<br/>124+ Functions"] --> VR["ValuationResult"]
    end
    subgraph MCP["MCP Server"]
        VR --> SVR["FastMCP Server<br/>14 folded tools"]
    end
    subgraph Skills["AI-agent skills"]
        SVR --> AV["Asset Valuation"]
        SVR --> DR["Discount Rates"]
        SVR --> PPA["Purchase Price Allocation"]
        SVR --> IMP["Impairment Testing"]
    end
    style Library fill:#0083AB,color:#fff
    style MCP fill:#4CAF50,color:#fff
    style Skills fill:#9C27B0,color:#fff
  1. Python Library — 22 modules, 124+ typed functions, all returning ValuationResult (value + assumptions + steps + formula reference)

  2. MCP Server — 14 folded tools (124+ formulas) for AI agents via stdio and hosted Streamable HTTP

  3. AI-agent skills — 4 skill definitions with workflow guidance for valuation domains

Related MCP server: modelforge

Installation

pip install intangible-valuation          # library only
pip install intangible-valuation[mcp]     # + MCP server
pip install intangible-valuation[dev]     # + pytest, ruff, mypy

Quick Start

Python Library

from intangible_valuation.core.time_value import present_value
from intangible_valuation.core.discount_rates import build_up_discount_rate
from intangible_valuation.income_methods.relief_from_royalty import relief_from_royalty

# Present Value
result = present_value(future_value=500_000, discount_rate=0.10, periods=8)
print(f"PV: ${result.value:,.2f}")  # $233,253.69

# Build-Up Discount Rate
rate = build_up_discount_rate(
    risk_free_rate=0.04, equity_risk_premium=0.06,
    size_premium=0.02, industry_risk_premium=0.01, specific_risk_premium=0.03,
)
print(f"Discount rate: {rate.value:.2%}")  # 16.00%

# Relief from Royalty — Patent Valuation
value = relief_from_royalty(
    revenue_projections=[1_000_000, 1_100_000, 1_200_000, 1_300_000, 1_400_000],
    royalty_rate=0.05, discount_rate=0.12, tax_rate=0.25, useful_life=5,
)
print(f"Patent value: ${value.value:,.2f}")

MCP Server (for AI Agents)

The server exposes 14 tools, each folding a family of formulas behind a method argument — time value, discount rates, cost/market/income approaches, IP, technology, customer and human-capital assets, goodwill and purchase price allocation, impairment, royalty analysis, uncertainty (Monte Carlo / decision trees), and transfer-pricing / litigation.

Local (stdio):

pip install "intangible-valuation[mcp]"
python mcp_server/server.py

Hosted (Streamable HTTP) — no install, no API key:

https://intangible-valuation.simonmak.com/api/mcp

OpenCode — add to opencode.json:

"intangible-valuation": {
  "type": "remote",
  "url": "https://intangible-valuation.simonmak.com/api/mcp",
  "timeout": 60000
}

Claude Desktop / Cursor — add the HTTP URL https://intangible-valuation.simonmak.com/api/mcp as an MCP server, or run the stdio entrypoint above.

MCP Registry & Glama — published as io.github.simonmak-ascent/intangible-valuation. The server.json manifest declares both the hosted streamable-http remote and a PyPI stdio package, and glama.json carries the Glama listing. Install and run the stdio server from either registry:

pip install "intangible-valuation[mcp]" && intangible-valuation-mcp   # pip
uvx --from intangible-valuation intangible-valuation-mcp              # uvx (no install)

Listed on Glama and the Official MCP Registry.

Prompts and resources. Besides the 14 tools, the server offers three guided prompts (purchase_price_allocation, value_ip_asset, impairment_test) and a machine-readable method catalog at intangible-valuation://methods, so agents can see every method's required parameters before calling a tool.

AI-agent skills

Copy the skills/ directory to your agent's skills folder:

  • asset-valuation — Patents, trademarks, technology, customer relationships, human capital

  • discount-rate-construction — Build-up, CAPM, WACC, risk premiums, adjustments

  • purchase-price-allocation — ASC 805 / IFRS 3 PPA workflow, goodwill calculation

  • impairment-testing — ASC 350, IAS 36 goodwill and intangible impairment

Valuation Methods by Category

Category

Methods

Chapter

Time Value

PV, FV, annuity, perpetuity, growing annuity, terminal value

2

Discount Rates

Build-up, CAPM, WACC, TAB, control premium, DLOM, currency adjustment

2

Statistics

Monte Carlo, decision trees, regression

2

Cost Approach

Reproduction cost, replacement cost

3

Market Approach

Comparable transactions, royalty capitalization

3

Income Methods

Relief from Royalty, MPEEM, incremental cash flow

4

Intellectual Property

Patent, trademark, copyright, trade secret

5

Royalty Analysis

Benchmarking, 25% rule, adjustment

6

Technology

Developed technology, software, data assets, platforms

7

Customer-Related

Customer relationships, distribution network, non-compete

8

Human Capital

Assembled workforce, key person

9

Goodwill & PPA

Goodwill calculation, PPA waterfall

10

Impairment

Goodwill & intangible impairment (ASC 350 / IAS 36)

11

Monte Carlo

Simulation, sensitivity analysis

15

Decision Trees

Backward induction

16

Litigation

Lost profits, pre-judgment interest

17

Transfer Pricing

CUP method, OECD guidelines

18

Why This Library?

  • Auditable — Every function returns ValuationResult with value, method, formula reference, assumptions, and step-by-step calculation breakdown

  • Textbook-accurate — All 124+ formulas verified against book example values with 1056 unit tests

  • AI-ready — MCP server (14 folded tools) and Skills for seamless AI agent integration

  • Complete coverage — All three valuation approaches (cost, market, income) across 19 chapters

  • Open source — MIT license, extensible, well-documented

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=src --cov-report=term-missing

# Lint
ruff check .

# Type check
mypy src/

# Regenerate the MCP stdio server from the canonical surface
python scripts/generate_mcp.py

Documentation

Companion Textbook

Intangible Asset Valuation: A Comprehensive Guide to Valuing Brands, IP, Technology, and Human Capital
Theory, Methods, Regulation, and Practice — Valuation in Practice Series by Ascent Partners
By Simon Mak, William Yuen, Paul Wu, Wayne Hu · 176 pages · 19 chapters · 3 appendices

Citing This Project

@software{intangible_valuation_engine,
  author = {Mak, Simon and Yuen, William and Wu, Paul and Hu, Wayne},
  title = {Intangible Asset Valuation Engine},
  year = {2026},
  url = {https://github.com/simonmak-ascent/intangible-valuation},
  license = {MIT},
}

Based on formulas from the Intangible Asset Valuation textbook.

Use with Context7

Up-to-date Intangible Asset 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/intangible-valuation for API and docs

License

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 tools
valuation_complianceTransfer Pricing & LitigationA
Read-onlyIdempotent
Inspect

Transfer pricing and litigation: the Comparable Uncontrolled Price arm's-length range and patent infringement damages with pre-judgment interest. Method selects the formula. Use for OECD transfer-pricing pricing of intercompany intangibles and for patent infringement damages awards. For royalty-rate benchmarking to set a rate use valuation_royalty_analysis; for the substantive asset valuation use valuation_ip or valuation_income_methods. Per method: cup_transfer_price needs controlled_price + uncontrolled_prices; patent_infringement_damages needs lost_profits_or_royalty + infringement_period + discount_rate + prejudgment_interest_rate. uncontrolled_prices must contain at least one comparable price for the arm's-length range. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: cup_transfer_price = Arm's-length range from comparable uncontrolled prices.; patent_infringement_damages = Lost profits or reasonable royalty plus prejudgment interest.
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
controlled_priceNoIntercompany (controlled) price, in currency units.
infringement_periodNoInfringement period in years (≥ 0).
uncontrolled_pricesNoComparable uncontrolled prices, in currency units.
lost_profits_or_royaltyNoAnnual lost profits or reasonable royalty, in currency units.
prejudgment_interest_rateNoPre-judgment interest rate as a decimal (e.g. 0.05 = 5%).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.8/5.0
Behavior5/5

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 substantial behavior the agent cannot infer: pure arithmetic with no I/O, rounding to 2 decimals, foreign-method parameters being accepted and silently ignored, and error-on-unknown-method or missing-required-param. That is exactly the extra context the annotation bar asks for.

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

Conciseness4/5

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

The definition is front-loaded with purpose, then the alternative routing, then per-method requirements, then behavioral rules, then error semantics – a logical order. It is dense but each sentence carries distinct information; only mild tightening is possible in the per-method parameter list.

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

Completeness5/5

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

For a method-dispatching calculator with an output schema present, the description covers everything an agent needs: which method, what each method requires, unit conventions, additional-parameter handling, and failure modes. Return-value explanation is correctly left to the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by stating which parameters each method requires (cup_transfer_price needs controlled_price + uncontrolled_prices; patent_infringement_damages needs lost_profits_or_royalty + infringement_period + discount_rate + prejudgment_interest_rate), the decimal convention, and that only method is universally required. It stops short of explaining the formula mechanics behind each price/rate parameter.

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

Purpose5/5

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

The description states two specific computations – the CUP arm's-length range and patent infringement damages with pre-judgment interest – with the resource (transfer pricing / litigation) named explicitly. It also names the sibling tools it is not (valuation_royalty_analysis, valuation_ip, valuation_income_methods), so an agent can disambiguate 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.

Usage Guidelines5/5

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

It gives explicit when-to-use conditions for both methods ('OECD transfer-pricing pricing of intercompany intangibles', 'patent infringement damages awards') and routes the agent away to specific alternatives for royalty-rate benchmarking and substantive asset valuation. Both the positive and the exclusion cases are covered.

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

valuation_cost_approachCost ApproachA
Read-onlyIdempotent
Inspect

Cost approach: depreciated reproduction cost from a cost breakdown and depreciated replacement cost with equivalent utility, both reduced by obsolescence. Method selects the formula. Use when no income or market evidence exists, or to corroborate income and market indications for internally developed intangibles. For income-based indications use valuation_income_methods; for market evidence use valuation_market_approach. Per method: reproduction_cost needs development_costs (optional: obsolescence_factors); replacement_cost needs current_cost (optional: obsolescence_factors). obsolescence_factors values are decimals that are summed and applied to the cost base; omit them for no obsolescence. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: reproduction_cost = Sum of cost categories less total obsolescence.; replacement_cost = Current cost of equivalent utility less obsolescence.
current_costNoCurrent cost to replace the asset with equivalent utility, in currency units.
development_costsNoCost breakdown by category, e.g. {"r_and_d": 1000000, "testing": 250000}, in currency units.
obsolescence_factorsNoObsolescence factors, e.g. {"functional": 0.10, "technological": 0.15, "economic": 0.05}.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, no open world), and the description adds substantial context beyond them: pure arithmetic with no I/O or external calls, 2-decimal rounding, and explicit error behavior for unknown methods or missing method-required parameters. It also states that parameters belonging to other methods are accepted and ignored, which is genuinely useful non-obvious behavior.

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

Conciseness4/5

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

Front-loads scope and routing before the per-method mechanics, and every sentence carries operational content (alternatives, method requirements, decimal convention, error handling). It is dense and slightly long, but no sentence is filler.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. For a 4-parameter, method-branching arithmetic tool with full annotation coverage, the description supplies everything an agent needs: method selection, required vs. optional parameters per method, units/format, and failure modes.

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

Parameters4/5

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

Schema coverage is 100%, so the per-parameter definitions are already documented and the baseline is 3. The description goes beyond it by explaining cross-parameter semantics: which parameters each method requires, that only method is mandatory, that other-method parameters are ignored, that obsolescence_factors are summed and applied to the cost base, and that rates are decimals.

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

Purpose5/5

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

States a specific method family (cost approach) and names both sub-formulas — depreciated reproduction cost from a cost breakdown and depreciated replacement cost with equivalent utility — along with the obsolescence reduction. It clearly distinguishes itself from the income and market siblings by naming them.

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

Usage Guidelines5/5

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

Gives explicit when-to-use conditions ('when no income or market evidence exists, or to corroborate income and market indications for internally developed intangibles') and routes to named alternatives (valuation_income_methods, valuation_market_approach). 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_customerCustomer-Related AssetsA
Read-onlyIdempotent
Inspect

Customer-related intangibles: customer relationships with attrition, distribution networks by channel profitability, and non-compete agreements on protected profits. Method selects the formula. Use for customer relationships, distribution networks, and non-compete assets; customer_relationships projects multi-period revenue with a retention rate. For the workforce and key-person assets use valuation_human_capital; for technology assets use valuation_technology. Per method: customer_relationships needs customer_count + avg_revenue_per_customer + retention_rate + profit_margin + discount_rate + projection_period; distribution_network needs channel_count + revenue_per_channel + channel_margin + useful_life + discount_rate; non_compete needs protected_revenue + profit_margin + term + enforcement_probability + discount_rate. retention_rate and enforcement_probability are in [0,1]; projection_period sets the number of discounted periods. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
termNoNon-compete term in years (≥ 0).
methodYesFormula to apply. Options: customer_relationships = Multi-period revenue net of attrition, discounted.; distribution_network = Channel revenue times margin over the useful life.; non_compete = Protected profit under an enforcement probability, discounted.
useful_lifeNoUseful life in years n (integer ≥ 1).
channel_countNoNumber of distribution channels (integer ≥ 0).
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
profit_marginNoProfit margin as a decimal (0.20 = 20%).
channel_marginNoChannel profit margin as a decimal in [0,1].
customer_countNoNumber of customers (integer ≥ 0).
retention_rateNoAnnual customer retention rate, in [0,1].
projection_periodNoProjection horizon in years (integer ≥ 1).
protected_revenueNoAnnual revenue protected by the non-compete, in currency units.
revenue_per_channelNoAnnual revenue per channel, in currency units.
enforcement_probabilityNoProbability the non-compete is enforceable, in [0,1].
avg_revenue_per_customerNoAverage annual revenue per customer, in currency units.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare this as a read-only, idempotent, closed-world operation, and the description adds genuinely new behavioral facts: pure arithmetic with no I/O or external calls, results rounded to 2 decimals, defaults applied where defined, and that parameters belonging to other methods are accepted and silently ignored. It also discloses the failure mode (unknown method or missing method-required parameter returns an error rather than a value), which is exactly the kind of contract detail an agent needs.

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

Conciseness4/5

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

It is front-loaded correctly — asset scope and sibling routing come first, method-to-parameter mapping follows, and global caveats (decimal convention, arithmetic-only behavior, error semantics) close it out. The middle section is a dense, comma-spliced run-on that could be bulleted for faster scanning, but essentially every clause carries information an agent needs for a 14-parameter tool.

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

Completeness5/5

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

With an output schema present, return values need not be explained, and the description covers everything else: enum semantics for method, per-method required inputs, unit conventions, rounding, default handling, ignored parameters, and error behavior. Nothing needed to invoke this tool correctly is missing.

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

Parameters5/5

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 goes well beyond it by mapping each method to its required parameter set and clarifying cross-parameter rules that no individual schema description states: which parameters are method-dependent, that only 'method' is required, that unspecified parameters fall back to defaults, and that retention_rate/enforcement_probability are unit fractions in [0,1] and projection_period sets the number of discounted periods.

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

Purpose5/5

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

The description names the specific asset class (customer-related intangibles) and enumerates the three concrete formulas it computes: customer relationships with attrition, distribution networks by channel profitability, and non-compete agreements. It also explicitly routes the agent away from siblings by naming valuation_human_capital and valuation_technology, so the tool is distinguishable 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.

Usage Guidelines5/5

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

It states when to use this tool ('Use for customer relationships, distribution networks, and non-compete assets') and gives explicit alternatives for the adjacent domains (workforce/key-person -> valuation_human_capital; technology -> valuation_technology). It further tells the agent how to select among the three internal methods via the required 'method' parameter.

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

valuation_discount_rateDiscount & Capitalization RatesA
Read-onlyIdempotent
Inspect

Construct discount and capitalization rates: build-up, CAPM, WACC, tax-amortization benefit, control premium, Finnerty DLOM, and currency/country-risk adjustment. Method selects the formula. Use to derive the rate that feeds every income-based method; build_up and capm estimate cost of equity, wacc blends debt and equity. For a cross-border rate with currency and country premia use method currency_adjusted; for the cash flows the rate discounts use valuation_time_value. Per method: build_up needs risk_free_rate + equity_risk_premium (optional: size_premium, industry_risk_premium, specific_risk_premium); capm needs risk_free_rate + beta + market_return; wacc needs equity_value + debt_value + cost_of_equity + cost_of_debt + tax_rate; tax_amortization_benefit needs discount_rate + useful_life + tax_rate + asset_value; control_premium needs minority_price + control_price; dlom_finnerty needs restricted_period + volatility + risk_free_rate; currency_adjusted needs base_rate (optional: currency_risk_premium, country_risk_premium). All rates and premiums are decimals; wacc requires both equity_value and debt_value, and dlom_finnerty volatility is an annualized decimal. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
betaNoSystematic risk beta (market = 1.0).
methodYesFormula to apply. Options: build_up = r = Rf + ERP + size + industry + specific premiums.; capm = r = Rf + beta * (Rm - Rf).; wacc = WACC = (E/V) Re + (D/V) Rd (1 - Tc).; tax_amortization_benefit = PV of the tax shield from amortizing the asset.; control_premium = (Control price - minority price) / minority price.; dlom_finnerty = Finnerty average-strike put option DLOM.; currency_adjusted = r = base rate + currency premium + country premium.
tax_rateNoMarginal tax rate as a decimal (0.25 = 25%).
base_rateNoBase discount rate before currency/country adjustment, as a decimal (e.g. 0.12 = 12%).
debt_valueNoMarket value of debt D, in currency units.
volatilityNoAnnualized volatility sigma as a decimal (0.30 = 30%).
asset_valueNoAsset value the tax amortization benefit is computed on, in currency units.
useful_lifeNoUseful life in years n (integer ≥ 1).
cost_of_debtNoPre-tax cost of debt Rd as a decimal (e.g. 0.06 = 6%).
equity_valueNoMarket value of equity E, in currency units.
size_premiumNoSmall-size premium as a decimal (e.g. 0.03 = 3%).
control_priceNoControlling-interest share price or value, in currency units.
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
market_returnNoExpected market return as a decimal (0.10 = 10%).
cost_of_equityNoCost of equity Re as a decimal (e.g. 0.12 = 12%).
minority_priceNoMinority (pre-control) share price or value, in currency units.
risk_free_rateNoRisk-free rate as a decimal (0.04 = 4%).
restricted_periodNoRestricted / marketability period in years t (≥ 0).
equity_risk_premiumNoEquity risk premium as a decimal (0.06 = 6%).
country_risk_premiumNoCountry risk premium as a decimal (e.g. 0.03 = 3%).
currency_risk_premiumNoCurrency risk premium as a decimal (e.g. 0.02 = 2%).
industry_risk_premiumNoIndustry risk premium as a decimal (e.g. 0.02 = 2%).
specific_risk_premiumNoCompany-specific risk premium as a decimal (e.g. 0.03 = 3%).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.7/5.0
Behavior4/5

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

Adds error semantics not covered by annotations: an unknown method or a missing method-required parameter returns an error instead of a value, extra parameters for other methods are accepted and ignored, and results are rounded to 2 decimals. 'No I/O and no external calls' partially overlaps openWorldHint=false/readOnlyHint=true, but the failure-mode and parameter-tolerance disclosure is genuinely additive.

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

Conciseness4/5

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

Front-loaded with purpose, then usage routing, then per-method parameter requirements — a sensible order with no filler. It does repeat the decimal convention ('All rates and premiums are decimals' appears twice), which is minor but redundant.

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

Completeness5/5

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

For a 23-parameter, single-required-parameter tool with an output schema, the description covers everything an agent needs: method selection, per-method inputs, defaults/omission behavior, and error conditions. Return-value format is appropriately left to the output schema.

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

Parameters5/5

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

Schema description coverage is 100%, so the baseline would be 3, but the description supplies cross-parameter conditional semantics the schema cannot express: the exact required/optional parameter set per method (e.g., build_up needs risk_free_rate + equity_risk_premium with size/industry/specific optional; wacc needs both equity_value and debt_value), plus the note that only method is required and other parameters should be omitted.

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

Purpose5/5

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

States a specific verb and resource ('Construct discount and capitalization rates') and enumerates the exact methods covered (build-up, CAPM, WACC, tax-amortization benefit, control premium, Finnerty DLOM, currency-adjusted). It also distinguishes itself from the sibling valuation_time_value by naming what that tool handles instead.

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

Usage Guidelines5/5

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

Explicit routing guidance: 'Use to derive the rate that feeds every income-based method,' build_up/capm estimate cost of equity, wacc blends debt and equity, and currency_adjusted is prescribed for cross-border rates, with valuation_time_value named for the cash flows being discounted. When-to-use and the alternative are both stated.

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

valuation_goodwill_ppaGoodwill & Purchase Price AllocationA
Read-onlyIdempotent
Inspect

Goodwill and purchase price allocation: goodwill as the residual, a full PPA waterfall across identified intangibles, and useful-life estimation. Method selects the formula. Use for ASC 805 / IFRS 3 business combinations; purchase_price_allocation allocates consideration to identified intangibles with the remainder to goodwill. For subsequent goodwill and intangible impairment testing use valuation_impairment; for individual intangible fair values feed valuation_ip, valuation_technology or valuation_customer into the allocation. Per method: goodwill needs purchase_price + fair_value_net_identifiable_assets; purchase_price_allocation needs purchase_price + tangible_assets_fv + identified_intangibles (optional: liabilities_fv); useful_life needs asset_type (optional: legal_life, economic_factors, obsolescence_rate). identified_intangibles values are summed before goodwill is taken as the residual; liabilities_fv reduces net identifiable assets. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: goodwill = Goodwill = purchase price - fair value of net identifiable assets.; purchase_price_allocation = Allocate consideration across identified intangibles.; useful_life = Estimate economic/legal useful life of an intangible.
asset_typeNoAsset type, e.g. "patent", "trademark", "software", "customer_list".
legal_lifeNoLegal protection period in years (overrides the asset-type default).
liabilities_fvNoFair value of assumed liabilities, in currency units.
purchase_priceNoTotal consideration / purchase price, in currency units.
economic_factorsNoEconomic adjustment factors, e.g. {"market_growth": 0.05, "competition": 0.4, "tech_change": 0.1}.
obsolescence_rateNoAnnual obsolescence rate as a decimal in [0,1].
tangible_assets_fvNoFair value of tangible assets, in currency units.
identified_intangiblesNoIdentified intangibles, each {name, value} or {name, fair_value}.
fair_value_net_identifiable_assetsNoFair value of net identifiable assets, in currency units.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, closed-world, but the description adds behavior beyond them: 'Pure arithmetic: no I/O and no external calls, rounded to 2 decimals', 'parameters belonging to other methods are accepted and ignored', and explicit failure behavior ('An unknown method, or a missing method-required parameter, returns an error instead of a value'). This is exactly the extra context annotations cannot convey.

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

Conciseness4/5

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

Purpose and scope are front-loaded in the first two sentences, followed by alternative routing and then the per-method parameter rules. It is dense and long, but each sentence carries distinct information; only the per-method detail could be trimmed by relying more on the enum descriptions.

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

Completeness5/5

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

For a 10-parameter, method-dispatched arithmetic tool with an output schema present, the description covers purpose, alternatives, conditional parameter requirements, units, rounding, and error behavior. Nothing an agent needs to invoke it correctly is missing, and return values are legitimately delegated to the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds the cross-parameter dependency matrix schema cannot express: which parameters each method requires, which are optional, and the semantics that 'identified_intangibles values are summed before goodwill is taken as the residual' and 'liabilities_fv reduces net identifiable assets'. It also restates the decimal convention for rates.

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

Purpose5/5

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

The description names a specific verb+resource ('goodwill as the residual, a full PPA waterfall across identified intangibles, and useful-life estimation') and immediately scopes it to ASC 805 / IFRS 3 business combinations. It also differentiates itself from siblings by naming valuation_impairment for subsequent testing and valuation_ip/technology/customer for individual intangible fair values.

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

Usage Guidelines5/5

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

Explicit routing: 'Use for ASC 805 / IFRS 3 business combinations', 'For subsequent goodwill and intangible impairment testing use valuation_impairment', and 'for individual intangible fair values feed valuation_ip, valuation_technology or valuation_customer into the allocation'. Both when-to-use and alternatives are stated, plus the per-method parameter conditions.

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

valuation_human_capitalHuman CapitalA
Read-onlyIdempotent
Inspect

Human capital: assembled-workforce value by replacement cost and key-person value from revenue contribution and departure risk. Method selects the formula. Use for assembled workforce and key-person intangibles; assembled_workforce nets training and attrition into a replacement cost. For customer-related assets use valuation_customer; for technology assets use valuation_technology. Per method: assembled_workforce needs employee_count + avg_replacement_cost + training_cost + productivity_factor + attrition_rate; key_person needs revenue_contribution + replacement_cost + departure_probability + discount_rate. attrition_rate is in [0,1]; productivity_factor scales the replacement cost (1.0 = parity). Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: assembled_workforce = Replacement cost including training, net of attrition.; key_person = Revenue contribution and replacement cost under departure risk.
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
training_costNoTraining cost per employee, in currency units.
attrition_rateNoAnnual attrition rate, in [0,1].
employee_countNoNumber of employees (integer ≥ 0).
replacement_costNoCost to replace the key person, in currency units.
productivity_factorNoProductivity factor on replacement cost (1.0 = parity).
avg_replacement_costNoAverage cost to replace one employee, in currency units.
revenue_contributionNoAnnual revenue contribution, in currency units.
departure_probabilityNoAnnual probability the key person departs, in [0,1].

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.8/5.0
Behavior5/5

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 genuinely new behavioral facts: pure arithmetic with no I/O or external calls, 2-decimal rounding, unknown-method and missing-required-parameter both returning errors, and extra method parameters being accepted and ignored.

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

Conciseness4/5

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

Front-loaded with purpose, then routing, then per-method parameter requirements, then semantics — a sensible order. It is dense rather than tautological, though the single long paragraph slightly restates schema-level conventions (rate ranges, factor parity) that could be trimmed.

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

Completeness5/5

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

For a 10-parameter, 1-required tool with full schema coverage and an output schema, the description supplies the missing glue: method-to-parameter mapping, defaults-apply behavior, error conditions, and the numeric conventions. Nothing essential to correct invocation is left unstated.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the per-field text by grouping parameters per method (assembled_workforce vs key_person) and clarifying that only method is required while the rest are method-dependent defaults. It restates a few conventions (attrition_rate in [0,1], productivity_factor 1.0 = parity, decimals) that the schema already carries, keeping it from a 5.

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

Purpose5/5

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

States a specific resource (human capital intangibles) and the two distinct valuation outputs (assembled-workforce replacement cost, key-person value), with the method parameter as the selector. It also names the sibling tools it is not (valuation_customer, valuation_technology), so an agent can route 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.

Usage Guidelines5/5

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

Explicit when-to-use ('Use for assembled workforce and key-person intangibles') and explicit alternatives for adjacent asset classes (customer-related → valuation_customer, technology → valuation_technology). It also spells out which method to pick via the parameter lists, leaving little to inference.

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

valuation_impairmentImpairment TestingA
Read-onlyIdempotent
Inspect

Impairment testing: goodwill impairment and intangible impairment under US GAAP (ASC 350) or IFRS (IAS 36). Method selects the formula. Use for annual or triggering-event impairment testing; goodwill_impairment compares a reporting unit's carrying value with its fair value. To compute the initial goodwill or allocation use valuation_goodwill_ppa; for the underlying asset fair values use the relevant asset-type tool. Per method: goodwill_impairment needs carrying_value + fair_value (optional: reporting_unit, standard); intangible_impairment needs carrying_value (optional: fair_value, recoverable_amount, standard). fair_value is required for ASC350; recoverable_amount is required for IAS36. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: goodwill_impairment = Impairment = carrying value - fair value (if positive).; intangible_impairment = Impairment of an intangible under ASC 350 or IAS 36.
standardNoAccounting standard: ASC350 for US GAAP, IAS36 for IFRS.
fair_valueNoFair value of the reporting unit or asset, in currency units.
carrying_valueNoCarrying value of the reporting unit or asset, in currency units.
reporting_unitNoReporting unit name (goodwill only).
recoverable_amountNoRecoverable amount (IAS 36), in currency units.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.6/5.0
Behavior4/5

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 context beyond them: pure arithmetic with no I/O or external calls, 2-decimal rounding, error behavior for unknown methods or missing required params, and that foreign-method parameters are accepted and ignored. The only gap is that it doesn't say what a zero/negative result means (no impairment indicated).

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

Conciseness4/5

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

Dense but front-loaded: purpose and standards first, then routing, then per-method parameter requirements, then behavioral notes. Nearly every sentence carries load, though the rate/premium decimal sentence adds no value for a parameter set that contains no rates.

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

Completeness5/5

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

An output schema exists so return values need no explanation, annotations carry the safety profile, and the description covers the remaining agent-facing unknowns: method selection, method-dependent required params, error conditions, and numeric precision. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so names/types/defaults are already documented, but the description adds cross-parameter conditional logic the schema cannot express: goodwill_impairment requires carrying_value + fair_value (optional reporting_unit, standard), intangible_impairment requires carrying_value, with fair_value required for ASC350 and recoverable_amount for IAS36. A minor relevance slip is mentioning rate/premium decimal conventions when no rate parameter exists.

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

Purpose5/5

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

States a specific resource (impairment testing for goodwill and intangibles) with named standards (ASC 350 / IAS 36), and explicitly distinguishes itself from siblings by routing initial goodwill work to valuation_goodwill_ppa and asset fair values to asset-type tools. An agent can tell exactly what this computes and what it does not.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (annual or triggering-event impairment testing) and names the alternative tools with the conditions that select them (valuation_goodwill_ppa for initial goodwill/allocation, asset-type tools for underlying fair values). Boundary handling between siblings is fully specified.

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

valuation_income_methodsIncome MethodsA
Read-onlyIdempotent
Inspect

Income approach: relief from royalty, multi-period and single-period excess earnings, incremental cash flow, and contributory asset charges. Method selects the formula. Use for the income-approach arithmetic: relief_from_royalty for IP with observable royalty rates, and excess earnings (mpeem or single_period_excess_earnings) for the residual intangible. For a complete asset-specific valuation of customer, technology, IP or workforce assets, prefer the dedicated valuation_customer, valuation_technology, valuation_ip and valuation_human_capital tools. For royalty-rate inputs use valuation_royalty_analysis; for asset-specific income valuations use valuation_customer, valuation_technology, valuation_ip or valuation_human_capital; for cost or market indications use valuation_cost_approach and valuation_market_approach. Per method: relief_from_royalty needs revenue_projections + royalty_rate + discount_rate + tax_rate + useful_life (optional: tab_enabled); mpeem needs cash_flow_projections + contributory_asset_charges + discount_rate + tax_rate (optional: tab_enabled); single_period_excess_earnings needs normalized_earnings + contributory_asset_charges + capitalization_rate; incremental_cashflow needs cash_flows_with + cash_flows_without + discount_rate; contributory_asset_charges needs assets. cash_flow_projections and contributory_asset_charges must be period-aligned; cash_flows_with and cash_flows_without must be equal length. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetsNoContributory assets, each {value, return_rate}.
methodYesFormula to apply. Options: relief_from_royalty = PV of after-tax royalties avoided by ownership.; mpeem = PV of excess earnings after contributory asset charges.; single_period_excess_earnings = Capitalize one period of excess earnings.; incremental_cashflow = PV of cash flows with the asset minus without it.; contributory_asset_charges = Total contributory asset charges.
tax_rateNoMarginal tax rate as a decimal (0.25 = 25%).
tab_enabledNoWhether to include the tax amortization benefit in the result.
useful_lifeNoUseful life in years n (integer ≥ 1).
royalty_rateNoRoyalty rate as a decimal (0.05 = 5% of revenue).
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
cash_flows_withNoCash flows per period with the asset, in currency units.
cash_flows_withoutNoCash flows per period without the asset, in currency units.
capitalization_rateNoCapitalization rate as a decimal (0.15 = 15%).
normalized_earningsNoSingle-period normalized earnings, in currency units.
revenue_projectionsNoProjected revenue per period t=1..n, in currency units.
cash_flow_projectionsNoProjected after-tax cash flows per period t=1..n, in currency units.
contributory_asset_chargesNoContributory asset charge per period t=1..n, in currency units.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/closed-world, but the description adds substantive behavior: it is pure arithmetic with no I/O or external calls, results are rounded to 2 decimals, non-selected method parameters are accepted and ignored, and an unknown method or missing required parameter returns an error instead of a value. That error semantics and ignore-behavior detail go 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.

Conciseness4/5

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

Front-loaded with purpose, then routing, then per-method inputs, and nearly every sentence carries load. However the asset-specific sibling list is stated twice (once as 'prefer the dedicated...' and again as 'for asset-specific income valuations use...'), which is avoidable repetition in an otherwise dense block.

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

Completeness5/5

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

An output schema exists so return values need no prose, and the description still covers method enumeration, per-method required inputs, alignment constraints, unit conventions, ignored extra parameters, and error behavior. For a 14-parameter, 5-method dispatch tool, the agent has everything needed to call it correctly.

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

Parameters5/5

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 per-method required-parameter recipes, cross-parameter constraints (cash_flow_projections and contributory_asset_charges must be period-aligned; cash_flows_with/without must be equal length), the decimal convention for rates, and the omit-unused-kwargs rule. This meaningfully exceeds what the schema alone conveys.

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

Purpose5/5

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

Opens with a specific domain (income approach) and enumerates the exact methods (relief from royalty, MPEE, single-period excess earnings, incremental cash flow, CAC), stating that 'method selects the formula'. It explicitly distinguishes itself from the dedicated asset valuation siblings, so an agent can place it 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.

Usage Guidelines5/5

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

Gives explicit when-to-use routing: 'relief_from_royalty for IP with observable royalty rates', 'excess earnings for the residual intangible', and steers asset-specific work to valuation_customer/technology/ip/human_capital plus valuation_royalty_analysis, valuation_cost_approach and valuation_market_approach. Alternatives and their selecting conditions are named, not inferred.

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

valuation_ipIntellectual PropertyA
Read-onlyIdempotent
Inspect

Intellectual property: risk-adjusted patent value, trademark/brand value, copyright income value, and trade-secret value under secrecy risk. Method selects the formula. Use to value a specific IP right; patent weights projected cash flows by probability of success, trademark uses brand strength to set the royalty. For technology, software, data, and platform assets use valuation_technology; for customer and workforce assets use valuation_customer and valuation_human_capital. Per method: patent needs remaining_life + cash_flow_projections + probability_of_success + discount_rate (optional: comparable_license_rates); trademark needs revenue + profit_margin + brand_strength_index + discount_rate + useful_life (optional: brand_method); copyright needs projected_revenue + useful_life + discount_rate + royalty_rate; trade_secret needs development_cost + economic_life + competitive_advantage_period + discount_rate + secrecy_probability. cash_flow_projections for patent run over remaining_life. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: patent = Risk-adjusted DCF over the patent's remaining life.; trademark = Brand value by relief-from-royalty or excess earnings.; copyright = PV of expected copyright royalty income.; trade_secret = Value under secrecy risk over the economic life.
revenueNoAnnual revenue attributable to the asset, in currency units.
useful_lifeNoUseful life in years n (integer ≥ 1).
brand_methodNoTrademark method: relief_from_royalty adjusts the royalty rate by brand strength; excess_earnings capitalizes excess earnings.
royalty_rateNoRoyalty rate as a decimal (0.05 = 5% of revenue).
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
economic_lifeNoEconomic life in years (≥ 1).
profit_marginNoProfit margin as a decimal (0.20 = 20%).
remaining_lifeNoRemaining legal/economic life of the patent in years (≥ 0).
development_costNoDevelopment or acquisition cost, in currency units.
projected_revenueNoProjected annual revenue subject to the copyright royalty, in currency units.
secrecy_probabilityNoProbability the trade secret remains secret, in [0,1].
brand_strength_indexNoBrand strength index on a 0-100 scale (75 = strong).
cash_flow_projectionsNoProjected after-tax cash flows per period t=1..n, in currency units.
probability_of_successNoProbability of technical and commercial success, in [0,1].
comparable_license_ratesNoComparable license royalty rates as decimals.
competitive_advantage_periodNoYears the competitive advantage is expected to persist (≥ 0).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent/no-open-world behavior, but the description adds real context beyond them: pure arithmetic with no I/O or external calls, rounding to 2 decimals, extra method-foreign parameters accepted and ignored, and an error returned for unknown methods or missing required params. It stops short of describing the returned structure, though an output schema exists.

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

Conciseness4/5

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

Purpose and sibling routing are front-loaded, and the per-method parameter lists are dense but useful. It is fairly long and re-states some schema facts (decimal convention, field names), which costs a little, but no sentence is purely wasteful.

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

Completeness5/5

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

For a 17-parameter tool with only one required field, the description supplies the missing method-parameter dependency map, error behavior, and unit conventions, and an output schema exists so return values need not be explained. An agent has everything required to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the per-parameter descriptions carry the baseline. The description's added value is the method→parameter mapping (which params each of patent/trademark/copyright/trade_secret requires and which are optional), a cross-parameter dependency the schema does not encode. It partially repeats schema content ('rates... are decimals', field names), so it is not a full 5.

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

Purpose5/5

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

States a specific verb and resource ('Use to value a specific IP right') and enumerates the four value types it computes (patent, trademark, copyright, trade-secret). It explicitly names the siblings it is not for (valuation_technology, valuation_customer, valuation_human_capital), so an agent can route 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.

Usage Guidelines5/5

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

Gives explicit when-to-use ('value a specific IP right') and names the alternative tools plus the asset classes that select them (technology/software/data → valuation_technology; customer/workforce → valuation_customer / valuation_human_capital). 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_market_approachMarket ApproachA
Read-onlyIdempotent
Inspect

Market approach: value from comparable transaction revenue multiples or capitalize a royalty stream into a perpetuity value. Method selects the formula. Use when reliable comparable transactions or royalty rates exist for the subject asset. For income-based excess earnings use valuation_income_methods; for royalty-rate selection and adjustment use valuation_royalty_analysis. Per method: comparable_transactions needs comparables + subject_revenue (optional: adjustments); royalty_capitalization needs revenue + royalty_rate + discount_rate. Each comparable is {revenue, multiple}; comparable_transactions applies the comparable multiple to subject_revenue. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: comparable_transactions = Subject revenue times the median comparable multiple.; royalty_capitalization = Value = (revenue * royalty rate) / discount rate.
revenueNoAnnual revenue attributable to the asset, in currency units.
adjustmentsNoOptional multiplicative adjustments, e.g. {"size": 0.9, "growth": 1.1}.
comparablesNoComparable transactions, each {revenue, multiple}.
royalty_rateNoRoyalty rate as a decimal (0.05 = 5% of revenue).
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
subject_revenueNoSubject company revenue, in currency units.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld=false, but the description adds genuinely new behavior: pure arithmetic with no I/O, rounding to 2 decimals, cross-method parameters accepted and ignored, and error semantics (unknown method or missing required param returns an error instead of a value). That is exactly the beyond-annotation context this dimension rewards.

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

Conciseness4/5

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

Front-loaded with the core purpose, then alternatives, then per-method parameter rules and behavioral notes. Dense but no sentence is wasted; the length is justified by two distinct formulas and seven method-dependent parameters.

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

Completeness5/5

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

A mutation-free, output-schema-backed arithmetic tool: the description covers formulas, parameter routing, units, rounding, ignored parameters, defaults, and error behavior. 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.

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by mapping which parameters each method requires (comparable_transactions: comparables + subject_revenue; royalty_capitalization: revenue + royalty_rate + discount_rate), noting only method is required, explaining the {revenue, multiple} comparable shape, and restating the decimal convention. This resolves the method-dependent ambiguity the schema alone leaves open.

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

Purpose5/5

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

States a specific valuation method with the two formulas (comparable transactions multiples vs. royalty capitalization), and explicitly names the sibling tools that handle adjacent concerns (valuation_income_methods, valuation_royalty_analysis). An agent can distinguish this from its many valuation 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.

Usage Guidelines5/5

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

Gives an explicit when-to-use condition ('when reliable comparable transactions or royalty rates exist') and routes two nearby cases to named alternatives. This is the when/when-not/alternative pattern at full strength.

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

valuation_royalty_analysisRoyalty Rate AnalysisA
Read-onlyIdempotent
Inspect

Royalty analysis: benchmark royalty-rate ranges by IP type and industry, adjust a base rate for deal factors, and apply the 25% rule of thumb. Method selects the formula. Use to select and support a royalty rate before a relief-from-royalty or royalty-capitalization valuation. To apply the chosen rate in a valuation use valuation_income_methods (relief_from_royalty) or valuation_market_approach (royalty_capitalization); for transfer-pricing pricing use valuation_compliance. Per method: benchmark needs ip_type + industry (optional: comparable_database); adjust needs base_royalty_rate + adjustment_factors; twenty_five_percent_rule needs licensee_expected_profit (optional: profit_attribution_to_ip). adjustment_factors multiply the base rate, so values above 1.0 raise the rate. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: benchmark = Benchmark royalty-rate range by IP type and industry.; adjust = Adjusted rate = base rate * product of factors.; twenty_five_percent_rule = Royalty = licensee profit * IP attribution * 25%.
ip_typeNoIntellectual-property type, e.g. "patent", "trademark", "copyright", "trade_secret".
industryNoIndustry, e.g. "software", "pharmaceutical".
base_royalty_rateNoBase royalty rate before adjustment, as a decimal (0.05 = 5%).
adjustment_factorsNoMultiplicative adjustment factors, e.g. {"profitability": 1.1, "market": 0.9}.
comparable_databaseNoOptional comparable licenses, each {rate} or {royalty_rate}.
licensee_expected_profitNoLicensee expected profit, in currency units.
profit_attribution_to_ipNoFraction of profit attributable to the IP, in [0,1].

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, closed-world), and the description adds substantive behavior: pure arithmetic with no I/O, 2-decimal rounding, that off-method parameters are accepted and ignored, and that unknown methods or missing required params error out rather than returning a value.

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

Conciseness4/5

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

Front-loaded with purpose and then routing, with per-method parameter requirements grouped together. It is dense and somewhat long, but nearly every sentence carries distinct routing or parameter information; only minor tightening is possible.

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

Completeness5/5

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

For an 8-parameter, single-required-field tool with an output schema and full annotation coverage, the description supplies everything an agent needs: method-dependent parameter selection, unit conventions, error behavior, and sibling routing.

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

Parameters5/5

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

Schema coverage is 100% so baseline is 3, but the description goes well beyond the schema by mapping each method to the parameters it consumes (benchmark→ip_type+industry; adjust→base_royalty_rate+adjustment_factors; twenty_five_percent_rule→licensee_expected_profit), defining the multiplicative semantics of adjustment_factors, and fixing the decimal convention (0.10 = 10%).

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

Purpose5/5

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

States a specific verb+resource ('benchmark royalty-rate ranges… adjust a base rate… apply the 25% rule') and enumerates the three selectable methods. An agent can distinguish this from valuation_income_methods and valuation_market_approach 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.

Usage Guidelines5/5

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

Explicitly scopes usage ('Use to select and support a royalty rate before a relief-from-royalty or royalty-capitalization valuation') and names the alternatives for the adjacent steps: valuation_income_methods (relief_from_royalty), valuation_market_approach (royalty_capitalization), and valuation_compliance for transfer pricing.

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

valuation_simulationUncertainty & SensitivityA
Read-onlyIdempotent
Inspect

Uncertainty analysis: Monte Carlo valuation, Monte Carlo sensitivity ranking, decision-tree expected values, and one-at-a-time sensitivity analysis. Method selects the formula. Use to quantify and stress the uncertainty around a point valuation; monte_carlo simulates all listed inputs, monte_carlo_sensitivity ranks the drivers. For a single deterministic point value use the relevant valuation tool; sensitivity_analysis varies one parameter of a core function only. Per method: monte_carlo needs input_distributions (optional: iterations, seed); monte_carlo_sensitivity needs base_params + distributions (optional: iterations, seed); decision_tree needs tree; sensitivity_analysis needs function_name + parameter_name + parameter_range + fixed_parameters. monte_carlo_sensitivity requires iterations between 1000 and 100000. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed (integer ≥ 0) for reproducible simulations.
treeNoDecision tree {"nodes": [...], "edges": [...]}; node types decision, chance, terminal.
methodYesFormula to apply. Options: monte_carlo = Simulate all listed inputs, sum-based valuation.; monte_carlo_sensitivity = Rank parameters by their impact on the valuation.; decision_tree = Backward induction over a decision tree.; sensitivity_analysis = One-at-a-time sensitivity of a core function.
iterationsNoSimulation iterations; monte_carlo_sensitivity requires 1000-100000.
base_paramsNoBase values for all parameters, including those held fixed.
distributionsNoMap of parameter name to {distribution, params} for the simulated inputs.
function_nameNoCore function to vary, e.g. "present_value", "capm_discount_rate", "wacc".
parameter_nameNoName of the parameter to vary.
parameter_rangeNoValues to test for the varied parameter.
fixed_parametersNoValues for all other parameters, held constant.
input_distributionsNoInputs to simulate, each {name, distribution, params}; distribution is normal (mean, std), uniform (low, high) or triangular (low, high, mode).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description still earns credit by adding non-obvious behavior: 'Pure arithmetic: no I/O and no external calls, rounded to 2 decimals,' the decimal convention for rates, the 1000-100000 iteration constraint for monte_carlo_sensitivity, and that unknown/missing-required-method inputs return an error rather than a value. This is useful context but not exhaustive (e.g. no detail on error shape or output rounding edge cases).

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

Conciseness5/5

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

Dense but front-loaded and well-organized: purpose first, then routing, then per-method parameter requirements, then conventions and error behavior. Every sentence carries distinct information (which method, which params, what defaults, what fails), with no filler.

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

Completeness5/5

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

For an 11-parameter, method-branching tool with an output schema present, the description covers the conditional parameter contract, decimal conventions, iteration bounds, default behavior for unused params, and failure modes. Nothing an agent needs to select a method and supply the right inputs is missing, and return-value explanation is correctly left to the output schema.

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

Parameters5/5

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

Although schema description coverage is 100%, the description goes well beyond the schema by mapping which parameters each method requires (e.g. monte_carlo needs input_distributions; decision_tree needs tree; sensitivity_analysis needs function_name + parameter_name + parameter_range + fixed_parameters), clarifying that only method is required and the rest are method-dependent, and stating the decimal-rate convention and iteration bounds. That conditional cross-parameter logic is not derivable from the flat schema alone.

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

Purpose5/5

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

The description opens with a specific resource ('Uncertainty analysis') and enumerates the four concrete methods (Monte Carlo valuation, sensitivity ranking, decision-tree EVs, one-at-a-time sensitivity), so the agent knows exactly what computation this tool performs. It also distinguishes itself from siblings by directing deterministic point valuations to 'the relevant valuation tool'.

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

Usage Guidelines5/5

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

Explicit routing: 'Use to quantify and stress the uncertainty around a point valuation,' contrasted with 'For a single deterministic point value use the relevant valuation tool,' and 'sensitivity_analysis varies one parameter of a core function only.' It also states the when-not condition for each method and notes params of other methods are ignored, leaving nothing to inference.

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

valuation_technologyTechnology AssetsA
Read-onlyIdempotent
Inspect

Technology assets: developed technology under life-cycle risk, software under cost and income, data assets with a quality adjustment, and platforms with network effects. Method selects the formula. Use for developed technology, software, data, and platform intangibles; developed_technology and software blend cost and income evidence. For patents, trademarks, copyrights, and trade secrets use valuation_ip; for customer relationships use valuation_customer. Per method: developed_technology needs rd_costs + life_cycle_stage + competitive_advantage + discount_rate + cash_flow_projections; software needs development_cost + maintenance_cost + user_base + revenue_model + useful_life + discount_rate; data_asset needs acquisition_cost + quality_score + revenue_contribution + useful_life + discount_rate; platform needs network_size + network_effects_coefficient + revenue_per_user + growth_rate + discount_rate. cash_flow_projections for developed_technology run over the remaining useful life. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: developed_technology = Cost and income value adjusted for life-cycle stage.; software = Software value from development, maintenance, and revenue.; data_asset = Quality-adjusted revenue contribution plus acquisition cost.; platform = Network-effect revenue grown and discounted.
rd_costsNoCumulative research and development costs, in currency units.
user_baseNoNumber of users (integer ≥ 0).
growth_rateNoPer-period growth rate as a decimal (0.03 = 3%).
useful_lifeNoUseful life in years n (integer ≥ 1).
network_sizeNoNumber of network participants (integer ≥ 0).
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
quality_scoreNoData quality score, in [0,1].
revenue_modelNoRevenue model, e.g. {"subscription_price": 20, "paying_users": 10000}.
acquisition_costNoCost to acquire the data, in currency units.
development_costNoDevelopment or acquisition cost, in currency units.
life_cycle_stageNoLife-cycle stage, e.g. "growth", "mature", "decline".
maintenance_costNoAnnual maintenance cost, in currency units.
revenue_per_userNoRevenue per user, in currency units.
revenue_contributionNoAnnual revenue contribution, in currency units.
cash_flow_projectionsNoProjected after-tax cash flows per period t=1..n, in currency units.
competitive_advantageNoYears of competitive advantage (≥ 0).
network_effects_coefficientNoNetwork-effects coefficient scaling revenue with network size (typically 0.5–2.0).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark this read-only, idempotent, closed-world and non-destructive, but the description adds substantially more: it is pure arithmetic with no I/O or external calls, results are rounded to 2 decimals, cross-method parameters are accepted and silently ignored, and an unknown method or missing method-required parameter returns an error rather than a value. That error/ignored-parameter contract is exactly the kind of behavior an agent needs and cannot get from annotations.

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

Conciseness4/5

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

The opening sentence and the sibling-routing sentence are well front-loaded, and the dense per-method parameter block earns its length given 18 parameters and 4 formulas. It is borderline long, but no sentence is filler; the slight deduction is for the run-on density of the per-method list.

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

Completeness5/5

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

With an output schema present, return values need not be explained, and the description covers everything else an agent needs: scope, alternatives, per-method required inputs, unit conventions, error behavior, and no-side-effect guarantees. Nothing material is missing for correct invocation.

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

Parameters5/5

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

Schema coverage is 100% and each parameter is described, but the description goes beyond it by mapping which parameters each method requires (e.g. developed_technology needs rd_costs + life_cycle_stage + competitive_advantage + discount_rate + cash_flow_projections) — information the flat schema cannot express. It also clarifies the decimal convention and that only 'method' is required while the rest are method-dependent and should otherwise be omitted.

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

Purpose5/5

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

States a specific domain (technology asset valuation) and enumerates exactly which intangible types it covers — developed technology, software, data assets, platforms — with the distinct methods each uses. It also explicitly names the sibling tools it is not for (valuation_ip, valuation_customer), so an agent can route correctly 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.

Usage Guidelines5/5

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

Explicit when-to-use ('Use for developed technology, software, data, and platform intangibles') and when-not ('For patents, trademarks, copyrights, and trade secrets use valuation_ip; for customer relationships use valuation_customer'). Routing between alternatives is fully specified.

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 MoneyA
Read-onlyIdempotent
Inspect

Time value of money: discount or compound a single sum, value level and growing annuities and perpetuities, and compute a terminal value by Gordon growth or exit multiple. Method selects the formula. Use to move cash flows through time or to value a terminal value in a DCF; combine with a rate from valuation_discount_rate. For uneven multi-period cash flows use valuation_income_methods; for rate construction use valuation_discount_rate. Per method: present_value needs future_value + discount_rate + periods; future_value needs present_value + discount_rate + periods; annuity_pv needs payment + discount_rate + periods; perpetuity_pv needs payment + discount_rate; growing_annuity_pv needs payment + discount_rate + growth_rate + periods; terminal_value_gordon_growth needs final_year_cashflow + perpetual_growth_rate + discount_rate; terminal_value_exit_multiple needs final_year_cashflow + exit_multiple. Rates and growth are decimals (0.10 = 10%); for terminal_value_gordon_growth the discount rate must exceed the perpetual growth rate. Only method is required; all other parameters are method-dependent — supply those the selected method names and omit the rest (defaults apply where defined). Rates and premiums are decimals (0.10 = 10%). Pure arithmetic: no I/O and no external calls, rounded to 2 decimals; parameters belonging to other methods are accepted and ignored. An unknown method, or a missing method-required parameter, returns an error instead of a value.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply. Options: present_value = PV = FV / (1 + r)^n.; future_value = FV = PV * (1 + r)^n.; annuity_pv = PV = PMT * [1 - (1 + r)^-n] / r.; perpetuity_pv = PV = PMT / r.; growing_annuity_pv = PV of a constant-growth annuity.; terminal_value_gordon_growth = TV = FCF * (1 + g) / (r - g).; terminal_value_exit_multiple = TV = FCF * exit multiple.
paymentNoRecurring payment per period, in currency units.
periodsNoNumber of periods n (non-negative).
growth_rateNoPer-period growth rate as a decimal (0.03 = 3%).
future_valueNoFuture cash amount to discount, in currency units.
discount_rateNoPer-period discount rate as a decimal (0.10 = 10%).
exit_multipleNoExit multiple applied to the final-year cash flow (e.g. 8.0 for 8x).
present_valueNoPresent amount to compound, in currency units.
final_year_cashflowNoFinal-year projected cash flow (FCF), in currency units.
perpetual_growth_rateNoPerpetual growth rate g as a decimal; must be below discount_rate for Gordon growth.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError message when the call fails.
stepsNoIntermediate calculation steps for traceability (one string per step).
valueYesComputed valuation, rate, or metric.
methodNoFormula / method name that produced the result.
assumptionsNoModelling assumptions applied (list of strings or key/value object).
defaults_appliedNoOptional parameters that were not supplied, so their documented defaults were used.
formula_referenceNoMathematical formula or reference applied.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses pure arithmetic with no I/O or external calls, two-decimal rounding, ignored non-matching parameters, and error behavior for unknown methods or missing required parameters. It also states the Gordon-growth constraint that discount rate must exceed perpetual growth rate.

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

Conciseness4/5

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

The description is front-loaded with purpose and usage, then lists method-specific parameters efficiently for a complex seven-method tool. It loses a point for repeating the decimal convention and mentioning 'premiums', which is not a parameter here, making one sentence redundant.

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

Completeness5/5

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

With an output schema present, the description need not explain return values. It covers method selection, parameter dependencies, decimal formatting, an edge-case constraint, error behavior, and sibling alternatives, giving an agent enough context to call the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds a per-method parameter map and clarifies that only method is required while other parameters are method-dependent and defaults apply where defined. It also explains decimal conventions and the discount_rate > perpetual_growth_rate constraint, though some of this repeats schema descriptions.

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

Purpose5/5

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

The description names a specific finance operation: discounting/compounding single sums, valuing annuities and perpetuities, and computing terminal values. It distinguishes itself from valuation_income_methods and valuation_discount_rate, so an agent can tell what it computes 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.

Usage Guidelines5/5

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

It explicitly states when to use the tool, including moving cash flows through time or valuing a terminal value in a DCF. It also routes alternatives: uneven multi-period cash flows to valuation_income_methods and rate construction to valuation_discount_rate, and gives per-method parameter requirements.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv2.1.1
    • Changedvaluation_compliance1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_cost_approach1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_customer1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_discount_rate1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_goodwill_ppa1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_human_capital1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_impairment1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_income_methods1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_ip1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_market_approach1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_royalty_analysis1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_simulation1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_technology1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedvaluation_time_value1 field changed
      • addedOutput schema / properties / defaults_applied
        Added value: +{
        +  "description": "Optional parameters that were not supplied, so their documented defaults were used.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  2. 9 tool updatesv2.0.1
    • Changedvaluation_compliance2 fields changed
      • changedInput schema / properties / infringement_period / description
        Previous value: -"Infringement period in years."New value: +"Infringement period in years (≥ 0)."
      • changedInput schema / properties / prejudgment_interest_rate / description
        Previous value: -"Pre-judgment interest rate as a decimal."New value: +"Pre-judgment interest rate as a decimal (e.g. 0.05 = 5%)."
    • Changedvaluation_customer6 fields changed
      • changedInput schema / properties / channel_count / description
        Previous value: -"Number of distribution channels."New value: +"Number of distribution channels (integer ≥ 0)."
      • changedInput schema / properties / channel_margin / description
        Previous value: -"Channel profit margin as a decimal."New value: +"Channel profit margin as a decimal in [0,1]."
      • changedInput schema / properties / customer_count / description
        Previous value: -"Number of customers."New value: +"Number of customers (integer ≥ 0)."
      • changedInput schema / properties / projection_period / description
        Previous value: -"Projection horizon in years."New value: +"Projection horizon in years (integer ≥ 1)."
      • changedInput schema / properties / term / description
        Previous value: -"Non-compete term in years."New value: +"Non-compete term in years (≥ 0)."
      • changedInput schema / properties / useful_life / description
        Previous value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
    • Changedvaluation_discount_rate10 fields changed
      • changedInput schema / properties / base_rate / description
        Previous value: -"Base discount rate before currency/country adjustment, as a decimal."New value: +"Base discount rate before currency/country adjustment, as a decimal (e.g. 0.12 = 12%)."
      • changedInput schema / properties / cost_of_debt / description
        Previous value: -"Pre-tax cost of debt Rd as a decimal."New value: +"Pre-tax cost of debt Rd as a decimal (e.g. 0.06 = 6%)."
      • changedInput schema / properties / cost_of_equity / description
        Previous value: -"Cost of equity Re as a decimal."New value: +"Cost of equity Re as a decimal (e.g. 0.12 = 12%)."
      • changedInput schema / properties / country_risk_premium / description
        Previous value: -"Country risk premium as a decimal."New value: +"Country risk premium as a decimal (e.g. 0.03 = 3%)."
      • changedInput schema / properties / currency_risk_premium / description
        Previous value: -"Currency risk premium as a decimal."New value: +"Currency risk premium as a decimal (e.g. 0.02 = 2%)."
      • changedInput schema / properties / industry_risk_premium / description
        Previous value: -"Industry risk premium as a decimal."New value: +"Industry risk premium as a decimal (e.g. 0.02 = 2%)."
      • changedInput schema / properties / restricted_period / description
        Previous value: -"Restricted / marketability period in years t."New value: +"Restricted / marketability period in years t (≥ 0)."
      • changedInput schema / properties / size_premium / description
        Previous value: -"Small-size premium as a decimal."New value: +"Small-size premium as a decimal (e.g. 0.03 = 3%)."
      • changedInput schema / properties / specific_risk_premium / description
        Previous value: -"Company-specific risk premium as a decimal."New value: +"Company-specific risk premium as a decimal (e.g. 0.03 = 3%)."
      • changedInput schema / properties / useful_life / description
        Previous value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
    • Changedvaluation_goodwill_ppa1 field changed
      • changedInput schema / properties / obsolescence_rate / description
        Previous value: -"Annual obsolescence rate as a decimal."New value: +"Annual obsolescence rate as a decimal in [0,1]."
    • Changedvaluation_human_capital1 field changed
      • changedInput schema / properties / employee_count / description
        Previous value: -"Number of employees."New value: +"Number of employees (integer ≥ 0)."
    • Changedvaluation_income_methods1 field changed
      • changedInput schema / properties / useful_life / description
        Previous value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
    • Changedvaluation_ip4 fields changed
      • changedInput schema / properties / competitive_advantage_period / description
        Previous value: -"Years the competitive advantage is expected to persist."New value: +"Years the competitive advantage is expected to persist (≥ 0)."
      • changedInput schema / properties / economic_life / description
        Previous value: -"Economic life in years."New value: +"Economic life in years (≥ 1)."
      • changedInput schema / properties / remaining_life / description
        Previous value: -"Remaining legal/economic life of the patent in years."New value: +"Remaining legal/economic life of the patent in years (≥ 0)."
      • changedInput schema / properties / useful_life / description
        Previous value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
    • Changedvaluation_simulation1 field changed
      • changedInput schema / properties / seed / description
        Previous value: -"Random seed for reproducible simulations."New value: +"Random seed (integer ≥ 0) for reproducible simulations."
    • Changedvaluation_technology5 fields changed
      • changedInput schema / properties / competitive_advantage / description
        Previous value: -"Years of competitive advantage."New value: +"Years of competitive advantage (≥ 0)."
      • changedInput schema / properties / network_effects_coefficient / description
        Previous value: -"Network-effects coefficient scaling revenue with network size."New value: +"Network-effects coefficient scaling revenue with network size (typically 0.5–2.0)."
      • changedInput schema / properties / network_size / description
        Previous value: -"Number of network participants."New value: +"Number of network participants (integer ≥ 0)."
      • changedInput schema / properties / useful_life / description
        Previous value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
      • changedInput schema / properties / user_base / description
        Previous value: -"Number of users."New value: +"Number of users (integer ≥ 0)."
  3. 14 tool updatesv0.1.4
    • Changedvaluation_compliance2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_cost_approach2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_customer2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_discount_rate2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_goodwill_ppa2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_human_capital2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_impairment2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_income_methods2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_ip2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_market_approach2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_royalty_analysis2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_simulation2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_technology2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
    • Changedvaluation_time_value2 fields changed
      • changedOutput schema / properties / steps / description
        Previous value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)."
      • removedOutput schema / properties / steps / items / type
        Removed value: -"object"
  4. 14 tool updatesv0.1.0
    • First observedvaluation_compliance
    • First observedvaluation_cost_approach
    • First observedvaluation_customer
    • First observedvaluation_discount_rate
    • First observedvaluation_goodwill_ppa
    • First observedvaluation_human_capital
    • First observedvaluation_impairment
    • First observedvaluation_income_methods
    • First observedvaluation_ip
    • First observedvaluation_market_approach
    • First observedvaluation_royalty_analysis
    • First observedvaluation_simulation
    • First observedvaluation_technology
    • First observedvaluation_time_value

TDQS

A4.7/5.0

Scored across 14 tools

Disambiguation4/5

Tools are cleanly partitioned by valuation subdomain (discount rates, cost/market/income approaches, asset types, PPA, impairment, simulation), and every description explicitly states when to prefer another tool. The only overlap is between valuation_income_methods and the asset-specific tools (valuation_ip, valuation_technology, valuation_customer), which the descriptions acknowledge and guide around, so boundaries are mostly distinct but require careful reading.

Naming Consistency5/5

All 14 tools use a single predictable snake_case convention with the uniform valuation_ prefix followed by a domain noun. There is no mixing of camelCase, verb styles, or naming schemes.

Tool Count5/5

14 tools is well within the ideal 3-15 range and each tool groups a coherent family of methods (e.g. all income-approach formulas together, all rate construction together). No tool feels redundant or missing at the set level, and the method-parameter pattern keeps the surface compact.

Completeness5/5

The surface covers the full intangible-valuation lifecycle: discount-rate construction, time value, cost, market, and income approaches, asset-specific valuations (IP, technology, customer, human capital), royalty analysis, transfer-pricing/litigation, PPA/goodwill, impairment, and uncertainty simulation. There are no obvious dead ends for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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.

  • Institutional hotel valuations in seconds: NOI/cap rate, USALI P&L, IRR/MOIC, markets, compsets.

  • 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.

  • IFRS engine: 31 standards, 21 tools. Journal entries, XBRL tags, ECL, CGU impairment, deferred tax.

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    63 deterministic quant computation tools for autonomous financial agents. Options pricing, derivatives, risk metrics, portfolio optimization, statistics, crypto/DeFi, macro/FX, time value of money. 1,000 free calls/day, no signup required.
    74
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Financial model factory MCP server: turns a spec into a live-formula Excel workbook. 14 templates (LBO, DCF, M\&A, IPO, restructuring, project finance, NPL, structured credit, 3-statement) with every cell formulated and every number source-traced to its document page.
    2
    Academic Free v1.1
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables reverse DCF/FCFF valuations, solving for required margins, growth, or reinvestment to achieve a target enterprise value, with forward DCF, consistency validation, feasibility grids, and automated evals.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables agents to evaluate real financing decisions through deterministic tools for IRR, NPV, payback, working capital, break-even, and sensitivity analysis.
    8
    1
    MIT