Intangible Asset Valuation
A comprehensive MCP server for intangible asset valuation, offering 14 tools to compute valuations, rates, allocations, impairment, and uncertainty analyses.
Compute time value of money: present/future value, annuities, perpetuities, terminal value (Gordon growth, exit multiple)
Construct discount/capitalization rates: build-up, CAPM, WACC, tax amortization benefit, control premium, DLOM, currency/country adjustment
Apply cost, market, and income approaches: reproduction/replacement cost, comparables, royalty capitalization, relief from royalty, MPEEM, incremental cash flow, contributory asset charges
Value specific intangibles: IP (patent, trademark, copyright, trade secret), technology (software, data, platform), customer assets (relationships, distribution, non-compete), human capital (assembled workforce, key person)
Perform goodwill & purchase price allocation: goodwill, PPA waterfall, useful-life estimation
Run impairment testing under ASC 350 / IAS 36: goodwill and intangible impairment
Analyze royalty rates: benchmark ranges, adjustments, 25% rule
Quantify uncertainty: Monte Carlo simulation/sensitivity, decision trees, one-at-a-time sensitivity
Support transfer pricing and litigation: CUP arm's-length range, patent infringement damages with pre-judgment interest
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.
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:#fffPython Library — 22 modules, 124+ typed functions, all returning
ValuationResult(value + assumptions + steps + formula reference)MCP Server — 14 folded tools (124+ formulas) for AI agents via stdio and hosted Streamable HTTP
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, mypyQuick 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.pyHosted (Streamable HTTP) — no install, no API key:
https://intangible-valuation.simonmak.com/api/mcpOpenCode — 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 capitaldiscount-rate-construction— Build-up, CAPM, WACC, risk premiums, adjustmentspurchase-price-allocation— ASC 805 / IFRS 3 PPA workflow, goodwill calculationimpairment-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
ValuationResultwith value, method, formula reference, assumptions, and step-by-step calculation breakdownTextbook-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.pyDocumentation
API Reference: intangible-valuation.simonmak.com
MCP Server Guide: docs/mcp.md
AI Skills Guide: docs/skills.md
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 docsLicense
MIT — see LICENSE.
By Ascent Partners — part of the Valuation in Practice Series.
If this saves you time, a ⭐ on GitHub helps others find it.
Available Tools
14 toolsvaluation_complianceTransfer Pricing & LitigationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| controlled_price | No | Intercompany (controlled) price, in currency units. | |
| infringement_period | No | Infringement period in years (≥ 0). | |
| uncontrolled_prices | No | Comparable uncontrolled prices, in currency units. | |
| lost_profits_or_royalty | No | Annual lost profits or reasonable royalty, in currency units. | |
| prejudgment_interest_rate | No | Pre-judgment interest rate as a decimal (e.g. 0.05 = 5%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds 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.
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.
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.
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.
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.
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 ApproachARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula to apply. Options: reproduction_cost = Sum of cost categories less total obsolescence.; replacement_cost = Current cost of equivalent utility less obsolescence. | |
| current_cost | No | Current cost to replace the asset with equivalent utility, in currency units. | |
| development_costs | No | Cost breakdown by category, e.g. {"r_and_d": 1000000, "testing": 250000}, in currency units. | |
| obsolescence_factors | No | Obsolescence factors, e.g. {"functional": 0.10, "technological": 0.15, "economic": 0.05}. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 AssetsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Non-compete term in years (≥ 0). | |
| method | Yes | Formula 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_life | No | Useful life in years n (integer ≥ 1). | |
| channel_count | No | Number of distribution channels (integer ≥ 0). | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| profit_margin | No | Profit margin as a decimal (0.20 = 20%). | |
| channel_margin | No | Channel profit margin as a decimal in [0,1]. | |
| customer_count | No | Number of customers (integer ≥ 0). | |
| retention_rate | No | Annual customer retention rate, in [0,1]. | |
| projection_period | No | Projection horizon in years (integer ≥ 1). | |
| protected_revenue | No | Annual revenue protected by the non-compete, in currency units. | |
| revenue_per_channel | No | Annual revenue per channel, in currency units. | |
| enforcement_probability | No | Probability the non-compete is enforceable, in [0,1]. | |
| avg_revenue_per_customer | No | Average annual revenue per customer, in currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 RatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| beta | No | Systematic risk beta (market = 1.0). | |
| method | Yes | Formula 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_rate | No | Marginal tax rate as a decimal (0.25 = 25%). | |
| base_rate | No | Base discount rate before currency/country adjustment, as a decimal (e.g. 0.12 = 12%). | |
| debt_value | No | Market value of debt D, in currency units. | |
| volatility | No | Annualized volatility sigma as a decimal (0.30 = 30%). | |
| asset_value | No | Asset value the tax amortization benefit is computed on, in currency units. | |
| useful_life | No | Useful life in years n (integer ≥ 1). | |
| cost_of_debt | No | Pre-tax cost of debt Rd as a decimal (e.g. 0.06 = 6%). | |
| equity_value | No | Market value of equity E, in currency units. | |
| size_premium | No | Small-size premium as a decimal (e.g. 0.03 = 3%). | |
| control_price | No | Controlling-interest share price or value, in currency units. | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| market_return | No | Expected market return as a decimal (0.10 = 10%). | |
| cost_of_equity | No | Cost of equity Re as a decimal (e.g. 0.12 = 12%). | |
| minority_price | No | Minority (pre-control) share price or value, in currency units. | |
| risk_free_rate | No | Risk-free rate as a decimal (0.04 = 4%). | |
| restricted_period | No | Restricted / marketability period in years t (≥ 0). | |
| equity_risk_premium | No | Equity risk premium as a decimal (0.06 = 6%). | |
| country_risk_premium | No | Country risk premium as a decimal (e.g. 0.03 = 3%). | |
| currency_risk_premium | No | Currency risk premium as a decimal (e.g. 0.02 = 2%). | |
| industry_risk_premium | No | Industry risk premium as a decimal (e.g. 0.02 = 2%). | |
| specific_risk_premium | No | Company-specific risk premium as a decimal (e.g. 0.03 = 3%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 AllocationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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_type | No | Asset type, e.g. "patent", "trademark", "software", "customer_list". | |
| legal_life | No | Legal protection period in years (overrides the asset-type default). | |
| liabilities_fv | No | Fair value of assumed liabilities, in currency units. | |
| purchase_price | No | Total consideration / purchase price, in currency units. | |
| economic_factors | No | Economic adjustment factors, e.g. {"market_growth": 0.05, "competition": 0.4, "tech_change": 0.1}. | |
| obsolescence_rate | No | Annual obsolescence rate as a decimal in [0,1]. | |
| tangible_assets_fv | No | Fair value of tangible assets, in currency units. | |
| identified_intangibles | No | Identified intangibles, each {name, value} or {name, fair_value}. | |
| fair_value_net_identifiable_assets | No | Fair value of net identifiable assets, in currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 CapitalARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula to apply. Options: assembled_workforce = Replacement cost including training, net of attrition.; key_person = Revenue contribution and replacement cost under departure risk. | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| training_cost | No | Training cost per employee, in currency units. | |
| attrition_rate | No | Annual attrition rate, in [0,1]. | |
| employee_count | No | Number of employees (integer ≥ 0). | |
| replacement_cost | No | Cost to replace the key person, in currency units. | |
| productivity_factor | No | Productivity factor on replacement cost (1.0 = parity). | |
| avg_replacement_cost | No | Average cost to replace one employee, in currency units. | |
| revenue_contribution | No | Annual revenue contribution, in currency units. | |
| departure_probability | No | Annual probability the key person departs, in [0,1]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds 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.
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.
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.
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.
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.
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 TestingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula to apply. Options: goodwill_impairment = Impairment = carrying value - fair value (if positive).; intangible_impairment = Impairment of an intangible under ASC 350 or IAS 36. | |
| standard | No | Accounting standard: ASC350 for US GAAP, IAS36 for IFRS. | |
| fair_value | No | Fair value of the reporting unit or asset, in currency units. | |
| carrying_value | No | Carrying value of the reporting unit or asset, in currency units. | |
| reporting_unit | No | Reporting unit name (goodwill only). | |
| recoverable_amount | No | Recoverable amount (IAS 36), in currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed world), yet the description adds substantial 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.
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.
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.
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.
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.
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 MethodsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Contributory assets, each {value, return_rate}. | |
| method | Yes | Formula 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_rate | No | Marginal tax rate as a decimal (0.25 = 25%). | |
| tab_enabled | No | Whether to include the tax amortization benefit in the result. | |
| useful_life | No | Useful life in years n (integer ≥ 1). | |
| royalty_rate | No | Royalty rate as a decimal (0.05 = 5% of revenue). | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| cash_flows_with | No | Cash flows per period with the asset, in currency units. | |
| cash_flows_without | No | Cash flows per period without the asset, in currency units. | |
| capitalization_rate | No | Capitalization rate as a decimal (0.15 = 15%). | |
| normalized_earnings | No | Single-period normalized earnings, in currency units. | |
| revenue_projections | No | Projected revenue per period t=1..n, in currency units. | |
| cash_flow_projections | No | Projected after-tax cash flows per period t=1..n, in currency units. | |
| contributory_asset_charges | No | Contributory asset charge per period t=1..n, in currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 PropertyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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. | |
| revenue | No | Annual revenue attributable to the asset, in currency units. | |
| useful_life | No | Useful life in years n (integer ≥ 1). | |
| brand_method | No | Trademark method: relief_from_royalty adjusts the royalty rate by brand strength; excess_earnings capitalizes excess earnings. | |
| royalty_rate | No | Royalty rate as a decimal (0.05 = 5% of revenue). | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| economic_life | No | Economic life in years (≥ 1). | |
| profit_margin | No | Profit margin as a decimal (0.20 = 20%). | |
| remaining_life | No | Remaining legal/economic life of the patent in years (≥ 0). | |
| development_cost | No | Development or acquisition cost, in currency units. | |
| projected_revenue | No | Projected annual revenue subject to the copyright royalty, in currency units. | |
| secrecy_probability | No | Probability the trade secret remains secret, in [0,1]. | |
| brand_strength_index | No | Brand strength index on a 0-100 scale (75 = strong). | |
| cash_flow_projections | No | Projected after-tax cash flows per period t=1..n, in currency units. | |
| probability_of_success | No | Probability of technical and commercial success, in [0,1]. | |
| comparable_license_rates | No | Comparable license royalty rates as decimals. | |
| competitive_advantage_period | No | Years the competitive advantage is expected to persist (≥ 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 ApproachARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula to apply. Options: comparable_transactions = Subject revenue times the median comparable multiple.; royalty_capitalization = Value = (revenue * royalty rate) / discount rate. | |
| revenue | No | Annual revenue attributable to the asset, in currency units. | |
| adjustments | No | Optional multiplicative adjustments, e.g. {"size": 0.9, "growth": 1.1}. | |
| comparables | No | Comparable transactions, each {revenue, multiple}. | |
| royalty_rate | No | Royalty rate as a decimal (0.05 = 5% of revenue). | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| subject_revenue | No | Subject company revenue, in currency units. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 AnalysisARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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_type | No | Intellectual-property type, e.g. "patent", "trademark", "copyright", "trade_secret". | |
| industry | No | Industry, e.g. "software", "pharmaceutical". | |
| base_royalty_rate | No | Base royalty rate before adjustment, as a decimal (0.05 = 5%). | |
| adjustment_factors | No | Multiplicative adjustment factors, e.g. {"profitability": 1.1, "market": 0.9}. | |
| comparable_database | No | Optional comparable licenses, each {rate} or {royalty_rate}. | |
| licensee_expected_profit | No | Licensee expected profit, in currency units. | |
| profit_attribution_to_ip | No | Fraction of profit attributable to the IP, in [0,1]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 & SensitivityARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Random seed (integer ≥ 0) for reproducible simulations. | |
| tree | No | Decision tree {"nodes": [...], "edges": [...]}; node types decision, chance, terminal. | |
| method | Yes | Formula 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. | |
| iterations | No | Simulation iterations; monte_carlo_sensitivity requires 1000-100000. | |
| base_params | No | Base values for all parameters, including those held fixed. | |
| distributions | No | Map of parameter name to {distribution, params} for the simulated inputs. | |
| function_name | No | Core function to vary, e.g. "present_value", "capm_discount_rate", "wacc". | |
| parameter_name | No | Name of the parameter to vary. | |
| parameter_range | No | Values to test for the varied parameter. | |
| fixed_parameters | No | Values for all other parameters, held constant. | |
| input_distributions | No | Inputs to simulate, each {name, distribution, params}; distribution is normal (mean, std), uniform (low, high) or triangular (low, high, mode). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 AssetsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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_costs | No | Cumulative research and development costs, in currency units. | |
| user_base | No | Number of users (integer ≥ 0). | |
| growth_rate | No | Per-period growth rate as a decimal (0.03 = 3%). | |
| useful_life | No | Useful life in years n (integer ≥ 1). | |
| network_size | No | Number of network participants (integer ≥ 0). | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| quality_score | No | Data quality score, in [0,1]. | |
| revenue_model | No | Revenue model, e.g. {"subscription_price": 20, "paying_users": 10000}. | |
| acquisition_cost | No | Cost to acquire the data, in currency units. | |
| development_cost | No | Development or acquisition cost, in currency units. | |
| life_cycle_stage | No | Life-cycle stage, e.g. "growth", "mature", "decline". | |
| maintenance_cost | No | Annual maintenance cost, in currency units. | |
| revenue_per_user | No | Revenue per user, in currency units. | |
| revenue_contribution | No | Annual revenue contribution, in currency units. | |
| cash_flow_projections | No | Projected after-tax cash flows per period t=1..n, in currency units. | |
| competitive_advantage | No | Years of competitive advantage (≥ 0). | |
| network_effects_coefficient | No | Network-effects coefficient scaling revenue with network size (typically 0.5–2.0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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 MoneyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | Formula 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. | |
| payment | No | Recurring payment per period, in currency units. | |
| periods | No | Number of periods n (non-negative). | |
| growth_rate | No | Per-period growth rate as a decimal (0.03 = 3%). | |
| future_value | No | Future cash amount to discount, in currency units. | |
| discount_rate | No | Per-period discount rate as a decimal (0.10 = 10%). | |
| exit_multiple | No | Exit multiple applied to the final-year cash flow (e.g. 8.0 for 8x). | |
| present_value | No | Present amount to compound, in currency units. | |
| final_year_cashflow | No | Final-year projected cash flow (FCF), in currency units. | |
| perpetual_growth_rate | No | Perpetual growth rate g as a decimal; must be below discount_rate for Gordon growth. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Error message when the call fails. |
| steps | No | Intermediate calculation steps for traceability (one string per step). |
| value | Yes | Computed valuation, rate, or metric. |
| method | No | Formula / method name that produced the result. |
| assumptions | No | Modelling assumptions applied (list of strings or key/value object). |
| defaults_applied | No | Optional parameters that were not supplied, so their documented defaults were used. |
| formula_reference | No | Mathematical formula or reference applied. |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v2.1.1- Changed
valuation_compliance1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_cost_approach1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_customer1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_discount_rate1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_goodwill_ppa1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_human_capital1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_impairment1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_income_methods1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_ip1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_market_approach1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_royalty_analysis1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_simulation1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_technology1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
valuation_time_value1 field changed- added
Output schema / properties / defaults_appliedAdded value: +{ + "description": "Optional parameters that were not supplied, so their documented defaults were used.", + "items": { + "type": "string" + }, + "type": "array" +}
9 tool updates
v2.0.1- Changed
valuation_compliance2 fields changed- changed
Input schema / properties / infringement_period / descriptionPrevious value: -"Infringement period in years."New value: +"Infringement period in years (≥ 0)." - changed
Input schema / properties / prejudgment_interest_rate / descriptionPrevious value: -"Pre-judgment interest rate as a decimal."New value: +"Pre-judgment interest rate as a decimal (e.g. 0.05 = 5%)."
- Changed
valuation_customer6 fields changed- changed
Input schema / properties / channel_count / descriptionPrevious value: -"Number of distribution channels."New value: +"Number of distribution channels (integer ≥ 0)." - changed
Input schema / properties / channel_margin / descriptionPrevious value: -"Channel profit margin as a decimal."New value: +"Channel profit margin as a decimal in [0,1]." - changed
Input schema / properties / customer_count / descriptionPrevious value: -"Number of customers."New value: +"Number of customers (integer ≥ 0)." - changed
Input schema / properties / projection_period / descriptionPrevious value: -"Projection horizon in years."New value: +"Projection horizon in years (integer ≥ 1)." - changed
Input schema / properties / term / descriptionPrevious value: -"Non-compete term in years."New value: +"Non-compete term in years (≥ 0)." - changed
Input schema / properties / useful_life / descriptionPrevious value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
- Changed
valuation_discount_rate10 fields changed- changed
Input schema / properties / base_rate / descriptionPrevious 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%)." - changed
Input schema / properties / cost_of_debt / descriptionPrevious 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%)." - changed
Input schema / properties / cost_of_equity / descriptionPrevious value: -"Cost of equity Re as a decimal."New value: +"Cost of equity Re as a decimal (e.g. 0.12 = 12%)." - changed
Input schema / properties / country_risk_premium / descriptionPrevious value: -"Country risk premium as a decimal."New value: +"Country risk premium as a decimal (e.g. 0.03 = 3%)." - changed
Input schema / properties / currency_risk_premium / descriptionPrevious value: -"Currency risk premium as a decimal."New value: +"Currency risk premium as a decimal (e.g. 0.02 = 2%)." - changed
Input schema / properties / industry_risk_premium / descriptionPrevious value: -"Industry risk premium as a decimal."New value: +"Industry risk premium as a decimal (e.g. 0.02 = 2%)." - changed
Input schema / properties / restricted_period / descriptionPrevious value: -"Restricted / marketability period in years t."New value: +"Restricted / marketability period in years t (≥ 0)." - changed
Input schema / properties / size_premium / descriptionPrevious value: -"Small-size premium as a decimal."New value: +"Small-size premium as a decimal (e.g. 0.03 = 3%)." - changed
Input schema / properties / specific_risk_premium / descriptionPrevious value: -"Company-specific risk premium as a decimal."New value: +"Company-specific risk premium as a decimal (e.g. 0.03 = 3%)." - changed
Input schema / properties / useful_life / descriptionPrevious value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
- Changed
valuation_goodwill_ppa1 field changed- changed
Input schema / properties / obsolescence_rate / descriptionPrevious value: -"Annual obsolescence rate as a decimal."New value: +"Annual obsolescence rate as a decimal in [0,1]."
- Changed
valuation_human_capital1 field changed- changed
Input schema / properties / employee_count / descriptionPrevious value: -"Number of employees."New value: +"Number of employees (integer ≥ 0)."
- Changed
valuation_income_methods1 field changed- changed
Input schema / properties / useful_life / descriptionPrevious value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
- Changed
valuation_ip4 fields changed- changed
Input schema / properties / competitive_advantage_period / descriptionPrevious value: -"Years the competitive advantage is expected to persist."New value: +"Years the competitive advantage is expected to persist (≥ 0)." - changed
Input schema / properties / economic_life / descriptionPrevious value: -"Economic life in years."New value: +"Economic life in years (≥ 1)." - changed
Input schema / properties / remaining_life / descriptionPrevious value: -"Remaining legal/economic life of the patent in years."New value: +"Remaining legal/economic life of the patent in years (≥ 0)." - changed
Input schema / properties / useful_life / descriptionPrevious value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)."
- Changed
valuation_simulation1 field changed- changed
Input schema / properties / seed / descriptionPrevious value: -"Random seed for reproducible simulations."New value: +"Random seed (integer ≥ 0) for reproducible simulations."
- Changed
valuation_technology5 fields changed- changed
Input schema / properties / competitive_advantage / descriptionPrevious value: -"Years of competitive advantage."New value: +"Years of competitive advantage (≥ 0)." - changed
Input schema / properties / network_effects_coefficient / descriptionPrevious value: -"Network-effects coefficient scaling revenue with network size."New value: +"Network-effects coefficient scaling revenue with network size (typically 0.5–2.0)." - changed
Input schema / properties / network_size / descriptionPrevious value: -"Number of network participants."New value: +"Number of network participants (integer ≥ 0)." - changed
Input schema / properties / useful_life / descriptionPrevious value: -"Useful life in years n."New value: +"Useful life in years n (integer ≥ 1)." - changed
Input schema / properties / user_base / descriptionPrevious value: -"Number of users."New value: +"Number of users (integer ≥ 0)."
14 tool updates
v0.1.4- Changed
valuation_compliance2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_cost_approach2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_customer2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_discount_rate2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_goodwill_ppa2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_human_capital2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_impairment2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_income_methods2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_ip2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_market_approach2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_royalty_analysis2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_simulation2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_technology2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
- Changed
valuation_time_value2 fields changed- changed
Output schema / properties / steps / descriptionPrevious value: -"Intermediate calculation steps for traceability."New value: +"Intermediate calculation steps for traceability (one string per step)." - removed
Output schema / properties / steps / items / typeRemoved value: -"object"
14 tool updates
v0.1.0- First observed
valuation_compliance - First observed
valuation_cost_approach - First observed
valuation_customer - First observed
valuation_discount_rate - First observed
valuation_goodwill_ppa - First observed
valuation_human_capital - First observed
valuation_impairment - First observed
valuation_income_methods - First observed
valuation_ip - First observed
valuation_market_approach - First observed
valuation_royalty_analysis - First observed
valuation_simulation - First observed
valuation_technology - First observed
valuation_time_value
TDQS
Scored across 14 tools
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.
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.
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.
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
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.
- mcpOAuthcom.hotelvalora
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
- AlicenseAqualityAmaintenance63 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.7411MIT
- AlicenseNot gradedqualityBmaintenanceFinancial 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.2Academic Free v1.1
- FlicenseNot gradedqualityBmaintenanceEnables 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.-
- AlicenseAqualityCmaintenanceEnables agents to evaluate real financing decisions through deterministic tools for IRR, NPV, payback, working capital, break-even, and sensitivity analysis.81MIT