This MCP server provides tooling for intangible asset valuation, focused on evaluating IP, technology, goodwill, PPA, and impairment. The catalog indicates 14 tools and 124+ formulas to support these valuation tasks, as described by its name and description.
🛠️ Key Features
Intangible asset valuation workflows
Coverage for IP, technology, goodwill, PPA, impairment
14 tools
124+ valuation formulas
🚀 Use Cases
Valuation of intellectual property (IP)
Technology valuation
Goodwill valuation
Purchase Price Allocation (PPA) analysis
Impairment evaluation
⚡ Developer Benefits
Structured formula set: 124+ formulas
Tooling organized around specific intangible valuation categories
Clear scope indicated by the server description
⚠️ Limitations
Source data does not specify supported inputs, output formats, integrations, or runtime details
No readme excerpt or additional documentation fields were provided
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.
Future cash amount to discount, in currency units.
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
periods
integer
optional
Number of periods n (non-negative).
present_value
number
optional
Present amount to compound, in currency units.
payment
number
optional
Recurring payment per period, in currency units.
growth_rate
number
optional
Per-period growth rate as a decimal (0.03 = 3%).
final_year_cashflow
number
optional
Final-year projected cash flow (FCF), in currency units.
perpetual_growth_rate
number
optional
Perpetual growth rate g as a decimal; must be below discount_rate for Gordon growth.
exit_multiple
number
optional
Exit multiple applied to the final-year cash flow (e.g. 8.0 for 8x).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"present_value",
"future_value",
"annuity_pv",
"perpetuity_pv",
"growing_annuity_pv",
"terminal_value_gordon_growth",
"terminal_value_exit_multiple"
],
"description": "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."
},
"future_value": {
"type": "number",
"description": "Future cash amount to discount, in currency units."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"periods": {
"type": "integer",
"description": "Number of periods n (non-negative)."
},
"present_value": {
"type": "number",
"description": "Present amount to compound, in currency units."
},
"payment": {
"type": "number",
"description": "Recurring payment per period, in currency units."
},
"growth_rate": {
"type": "number",
"description": "Per-period growth rate as a decimal (0.03 = 3%)."
},
"final_year_cashflow": {
"type": "number",
"description": "Final-year projected cash flow (FCF), in currency units."
},
"perpetual_growth_rate": {
"type": "number",
"description": "Perpetual growth rate g as a decimal; must be below discount_rate for Gordon growth."
},
"exit_multiple": {
"type": "number",
"description": "Exit multiple applied to the final-year cash flow (e.g. 8.0 for 8x)."
}
},
"required": [
"method"
]
}
valuation_discount_rate
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.
Parameters23
method
string
required
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.
risk_free_rate
number
optional
Risk-free rate as a decimal (0.04 = 4%).
equity_risk_premium
number
optional
Equity risk premium as a decimal (0.06 = 6%).
size_premium
number
optional
Small-size premium as a decimal (e.g. 0.03 = 3%).
industry_risk_premium
number
optional
Industry risk premium as a decimal (e.g. 0.02 = 2%).
specific_risk_premium
number
optional
Company-specific risk premium as a decimal (e.g. 0.03 = 3%).
beta
number
optional
Systematic risk beta (market = 1.0).
market_return
number
optional
Expected market return as a decimal (0.10 = 10%).
equity_value
number
optional
Market value of equity E, in currency units.
debt_value
number
optional
Market value of debt D, in currency units.
cost_of_equity
number
optional
Cost of equity Re as a decimal (e.g. 0.12 = 12%).
cost_of_debt
number
optional
Pre-tax cost of debt Rd as a decimal (e.g. 0.06 = 6%).
tax_rate
number
optional
Marginal tax rate as a decimal (0.25 = 25%).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
useful_life
integer
optional
Useful life in years n (integer ≥ 1).
asset_value
number
optional
Asset value the tax amortization benefit is computed on, in currency units.
minority_price
number
optional
Minority (pre-control) share price or value, in currency units.
control_price
number
optional
Controlling-interest share price or value, in currency units.
restricted_period
number
optional
Restricted / marketability period in years t (≥ 0).
volatility
number
optional
Annualized volatility sigma as a decimal (0.30 = 30%).
base_rate
number
optional
Base discount rate before currency/country adjustment, as a decimal (e.g. 0.12 = 12%).
currency_risk_premium
number
optional
Currency risk premium as a decimal (e.g. 0.02 = 2%).
country_risk_premium
number
optional
Country risk premium as a decimal (e.g. 0.03 = 3%).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"build_up",
"capm",
"wacc",
"tax_amortization_benefit",
"control_premium",
"dlom_finnerty",
"currency_adjusted"
],
"description": "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."
},
"risk_free_rate": {
"type": "number",
"description": "Risk-free rate as a decimal (0.04 = 4%)."
},
"equity_risk_premium": {
"type": "number",
"description": "Equity risk premium as a decimal (0.06 = 6%)."
},
"size_premium": {
"type": "number",
"description": "Small-size premium as a decimal (e.g. 0.03 = 3%).",
"default": 0
},
"industry_risk_premium": {
"type": "number",
"description": "Industry risk premium as a decimal (e.g. 0.02 = 2%).",
"default": 0
},
"specific_risk_premium": {
"type": "number",
"description": "Company-specific risk premium as a decimal (e.g. 0.03 = 3%).",
"default": 0
},
"beta": {
"type": "number",
"description": "Systematic risk beta (market = 1.0)."
},
"market_return": {
"type": "number",
"description": "Expected market return as a decimal (0.10 = 10%)."
},
"equity_value": {
"type": "number",
"description": "Market value of equity E, in currency units."
},
"debt_value": {
"type": "number",
"description": "Market value of debt D, in currency units."
},
"cost_of_equity": {
"type": "number",
"description": "Cost of equity Re as a decimal (e.g. 0.12 = 12%)."
},
"cost_of_debt": {
"type": "number",
"description": "Pre-tax cost of debt Rd as a decimal (e.g. 0.06 = 6%)."
},
"tax_rate": {
"type": "number",
"description": "Marginal tax rate as a decimal (0.25 = 25%)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"useful_life": {
"type": "integer",
"description": "Useful life in years n (integer ≥ 1)."
},
"asset_value": {
"type": "number",
"description": "Asset value the tax amortization benefit is computed on, in currency units."
},
"minority_price": {
"type": "number",
"description": "Minority (pre-control) share price or value, in currency units."
},
"control_price": {
"type": "number",
"description": "Controlling-interest share price or value, in currency units."
},
"restricted_period": {
"type": "number",
"description": "Restricted / marketability period in years t (≥ 0)."
},
"volatility": {
"type": "number",
"description": "Annualized volatility sigma as a decimal (0.30 = 30%)."
},
"base_rate": {
"type": "number",
"description": "Base discount rate before currency/country adjustment, as a decimal (e.g. 0.12 = 12%)."
},
"currency_risk_premium": {
"type": "number",
"description": "Currency risk premium as a decimal (e.g. 0.02 = 2%).",
"default": 0
},
"country_risk_premium": {
"type": "number",
"description": "Country risk premium as a decimal (e.g. 0.03 = 3%).",
"default": 0
}
},
"required": [
"method"
]
}
valuation_cost_approach
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.
Parameters4
method
string
required
Formula to apply. Options: reproduction_cost = Sum of cost categories less total obsolescence.; replacement_cost = Current cost of equivalent utility less obsolescence.
development_costs
object
optional
Cost breakdown by category, e.g. {"r_and_d": 1000000, "testing": 250000}, in currency units.
obsolescence_factors
object
optional
Obsolescence factors, e.g. {"functional": 0.10, "technological": 0.15, "economic": 0.05}.
current_cost
number
optional
Current cost to replace the asset with equivalent utility, in currency units.
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"reproduction_cost",
"replacement_cost"
],
"description": "Formula to apply. Options: reproduction_cost = Sum of cost categories less total obsolescence.; replacement_cost = Current cost of equivalent utility less obsolescence."
},
"development_costs": {
"type": "object",
"description": "Cost breakdown by category, e.g. {\"r_and_d\": 1000000, \"testing\": 250000}, in currency units."
},
"obsolescence_factors": {
"type": "object",
"description": "Obsolescence factors, e.g. {\"functional\": 0.10, \"technological\": 0.15, \"economic\": 0.05}."
},
"current_cost": {
"type": "number",
"description": "Current cost to replace the asset with equivalent utility, in currency units."
}
},
"required": [
"method"
]
}
valuation_market_approach
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.
Parameters7
method
string
required
Formula to apply. Options: comparable_transactions = Subject revenue times the median comparable multiple.; royalty_capitalization = Value = (revenue * royalty rate) / discount rate.
comparables
array
optional
Comparable transactions, each {revenue, multiple}.
subject_revenue
number
optional
Subject company revenue, in currency units.
adjustments
object
optional
Optional multiplicative adjustments, e.g. {"size": 0.9, "growth": 1.1}.
revenue
number
optional
Annual revenue attributable to the asset, in currency units.
royalty_rate
number
optional
Royalty rate as a decimal (0.05 = 5% of revenue).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"comparable_transactions",
"royalty_capitalization"
],
"description": "Formula to apply. Options: comparable_transactions = Subject revenue times the median comparable multiple.; royalty_capitalization = Value = (revenue * royalty rate) / discount rate."
},
"comparables": {
"type": "array",
"items": {
"type": "object"
},
"description": "Comparable transactions, each {revenue, multiple}."
},
"subject_revenue": {
"type": "number",
"description": "Subject company revenue, in currency units."
},
"adjustments": {
"type": "object",
"description": "Optional multiplicative adjustments, e.g. {\"size\": 0.9, \"growth\": 1.1}."
},
"revenue": {
"type": "number",
"description": "Annual revenue attributable to the asset, in currency units."
},
"royalty_rate": {
"type": "number",
"description": "Royalty rate as a decimal (0.05 = 5% of revenue)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
}
},
"required": [
"method"
]
}
valuation_income_methods
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.
Parameters14
method
string
required
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.
revenue_projections
array
optional
Projected revenue per period t=1..n, in currency units.
royalty_rate
number
optional
Royalty rate as a decimal (0.05 = 5% of revenue).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
tax_rate
number
optional
Marginal tax rate as a decimal (0.25 = 25%).
useful_life
integer
optional
Useful life in years n (integer ≥ 1).
tab_enabled
boolean
optional
Whether to include the tax amortization benefit in the result.
cash_flow_projections
array
optional
Projected after-tax cash flows per period t=1..n, in currency units.
contributory_asset_charges
array
optional
Contributory asset charge per period t=1..n, in currency units.
normalized_earnings
number
optional
Single-period normalized earnings, in currency units.
capitalization_rate
number
optional
Capitalization rate as a decimal (0.15 = 15%).
cash_flows_with
array
optional
Cash flows per period with the asset, in currency units.
cash_flows_without
array
optional
Cash flows per period without the asset, in currency units.
assets
array
optional
Contributory assets, each {value, return_rate}.
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"relief_from_royalty",
"mpeem",
"single_period_excess_earnings",
"incremental_cashflow",
"contributory_asset_charges"
],
"description": "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."
},
"revenue_projections": {
"type": "array",
"items": {
"type": "number"
},
"description": "Projected revenue per period t=1..n, in currency units."
},
"royalty_rate": {
"type": "number",
"description": "Royalty rate as a decimal (0.05 = 5% of revenue)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"tax_rate": {
"type": "number",
"description": "Marginal tax rate as a decimal (0.25 = 25%)."
},
"useful_life": {
"type": "integer",
"description": "Useful life in years n (integer ≥ 1)."
},
"tab_enabled": {
"type": "boolean",
"description": "Whether to include the tax amortization benefit in the result.",
"default": true
},
"cash_flow_projections": {
"type": "array",
"items": {
"type": "number"
},
"description": "Projected after-tax cash flows per period t=1..n, in currency units."
},
"contributory_asset_charges": {
"type": "array",
"items": {
"type": "number"
},
"description": "Contributory asset charge per period t=1..n, in currency units."
},
"normalized_earnings": {
"type": "number",
"description": "Single-period normalized earnings, in currency units."
},
"capitalization_rate": {
"type": "number",
"description": "Capitalization rate as a decimal (0.15 = 15%)."
},
"cash_flows_with": {
"type": "array",
"items": {
"type": "number"
},
"description": "Cash flows per period with the asset, in currency units."
},
"cash_flows_without": {
"type": "array",
"items": {
"type": "number"
},
"description": "Cash flows per period without the asset, in currency units."
},
"assets": {
"type": "array",
"items": {
"type": "object"
},
"description": "Contributory assets, each {value, return_rate}."
}
},
"required": [
"method"
]
}
valuation_ip
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.
Parameters17
method
string
required
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.
remaining_life
integer
optional
Remaining legal/economic life of the patent in years (≥ 0).
cash_flow_projections
array
optional
Projected after-tax cash flows per period t=1..n, in currency units.
probability_of_success
number
optional
Probability of technical and commercial success, in [0,1].
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
comparable_license_rates
array
optional
Comparable license royalty rates as decimals.
revenue
number
optional
Annual revenue attributable to the asset, in currency units.
profit_margin
number
optional
Profit margin as a decimal (0.20 = 20%).
brand_strength_index
number
optional
Brand strength index on a 0-100 scale (75 = strong).
useful_life
integer
optional
Useful life in years n (integer ≥ 1).
brand_method
string
optional
Trademark method: relief_from_royalty adjusts the royalty rate by brand strength; excess_earnings capitalizes excess earnings.
projected_revenue
number
optional
Projected annual revenue subject to the copyright royalty, in currency units.
royalty_rate
number
optional
Royalty rate as a decimal (0.05 = 5% of revenue).
development_cost
number
optional
Development or acquisition cost, in currency units.
economic_life
integer
optional
Economic life in years (≥ 1).
competitive_advantage_period
integer
optional
Years the competitive advantage is expected to persist (≥ 0).
secrecy_probability
number
optional
Probability the trade secret remains secret, in [0,1].
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"patent",
"trademark",
"copyright",
"trade_secret"
],
"description": "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."
},
"remaining_life": {
"type": "integer",
"description": "Remaining legal/economic life of the patent in years (≥ 0)."
},
"cash_flow_projections": {
"type": "array",
"items": {
"type": "number"
},
"description": "Projected after-tax cash flows per period t=1..n, in currency units."
},
"probability_of_success": {
"type": "number",
"description": "Probability of technical and commercial success, in [0,1]."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"comparable_license_rates": {
"type": "array",
"items": {
"type": "number"
},
"description": "Comparable license royalty rates as decimals."
},
"revenue": {
"type": "number",
"description": "Annual revenue attributable to the asset, in currency units."
},
"profit_margin": {
"type": "number",
"description": "Profit margin as a decimal (0.20 = 20%)."
},
"brand_strength_index": {
"type": "number",
"description": "Brand strength index on a 0-100 scale (75 = strong)."
},
"useful_life": {
"type": "integer",
"description": "Useful life in years n (integer ≥ 1)."
},
"brand_method": {
"type": "string",
"description": "Trademark method: relief_from_royalty adjusts the royalty rate by brand strength; excess_earnings capitalizes excess earnings.",
"enum": [
"relief_from_royalty",
"excess_earnings"
]
},
"projected_revenue": {
"type": "number",
"description": "Projected annual revenue subject to the copyright royalty, in currency units."
},
"royalty_rate": {
"type": "number",
"description": "Royalty rate as a decimal (0.05 = 5% of revenue)."
},
"development_cost": {
"type": "number",
"description": "Development or acquisition cost, in currency units."
},
"economic_life": {
"type": "integer",
"description": "Economic life in years (≥ 1)."
},
"competitive_advantage_period": {
"type": "integer",
"description": "Years the competitive advantage is expected to persist (≥ 0)."
},
"secrecy_probability": {
"type": "number",
"description": "Probability the trade secret remains secret, in [0,1]."
}
},
"required": [
"method"
]
}
valuation_technology
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.
Parameters18
method
string
required
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
number
optional
Cumulative research and development costs, in currency units.
life_cycle_stage
string
optional
Life-cycle stage, e.g. "growth", "mature", "decline".
competitive_advantage
integer
optional
Years of competitive advantage (≥ 0).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
cash_flow_projections
array
optional
Projected after-tax cash flows per period t=1..n, in currency units.
development_cost
number
optional
Development or acquisition cost, in currency units.
maintenance_cost
number
optional
Annual maintenance cost, in currency units.
user_base
integer
optional
Number of users (integer ≥ 0).
revenue_model
object
optional
Revenue model, e.g. {"subscription_price": 20, "paying_users": 10000}.
useful_life
integer
optional
Useful life in years n (integer ≥ 1).
acquisition_cost
number
optional
Cost to acquire the data, in currency units.
quality_score
number
optional
Data quality score, in [0,1].
revenue_contribution
number
optional
Annual revenue contribution, in currency units.
network_size
integer
optional
Number of network participants (integer ≥ 0).
network_effects_coefficient
number
optional
Network-effects coefficient scaling revenue with network size (typically 0.5–2.0).
revenue_per_user
number
optional
Revenue per user, in currency units.
growth_rate
number
optional
Per-period growth rate as a decimal (0.03 = 3%).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"developed_technology",
"software",
"data_asset",
"platform"
],
"description": "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": {
"type": "number",
"description": "Cumulative research and development costs, in currency units."
},
"life_cycle_stage": {
"type": "string",
"description": "Life-cycle stage, e.g. \"growth\", \"mature\", \"decline\"."
},
"competitive_advantage": {
"type": "integer",
"description": "Years of competitive advantage (≥ 0)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"cash_flow_projections": {
"type": "array",
"items": {
"type": "number"
},
"description": "Projected after-tax cash flows per period t=1..n, in currency units."
},
"development_cost": {
"type": "number",
"description": "Development or acquisition cost, in currency units."
},
"maintenance_cost": {
"type": "number",
"description": "Annual maintenance cost, in currency units."
},
"user_base": {
"type": "integer",
"description": "Number of users (integer ≥ 0)."
},
"revenue_model": {
"type": "object",
"description": "Revenue model, e.g. {\"subscription_price\": 20, \"paying_users\": 10000}."
},
"useful_life": {
"type": "integer",
"description": "Useful life in years n (integer ≥ 1)."
},
"acquisition_cost": {
"type": "number",
"description": "Cost to acquire the data, in currency units."
},
"quality_score": {
"type": "number",
"description": "Data quality score, in [0,1]."
},
"revenue_contribution": {
"type": "number",
"description": "Annual revenue contribution, in currency units."
},
"network_size": {
"type": "integer",
"description": "Number of network participants (integer ≥ 0)."
},
"network_effects_coefficient": {
"type": "number",
"description": "Network-effects coefficient scaling revenue with network size (typically 0.5–2.0)."
},
"revenue_per_user": {
"type": "number",
"description": "Revenue per user, in currency units."
},
"growth_rate": {
"type": "number",
"description": "Per-period growth rate as a decimal (0.03 = 3%)."
}
},
"required": [
"method"
]
}
valuation_customer
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.
Parameters14
method
string
required
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.
customer_count
integer
optional
Number of customers (integer ≥ 0).
avg_revenue_per_customer
number
optional
Average annual revenue per customer, in currency units.
retention_rate
number
optional
Annual customer retention rate, in [0,1].
profit_margin
number
optional
Profit margin as a decimal (0.20 = 20%).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
projection_period
integer
optional
Projection horizon in years (integer ≥ 1).
channel_count
integer
optional
Number of distribution channels (integer ≥ 0).
revenue_per_channel
number
optional
Annual revenue per channel, in currency units.
channel_margin
number
optional
Channel profit margin as a decimal in [0,1].
useful_life
integer
optional
Useful life in years n (integer ≥ 1).
protected_revenue
number
optional
Annual revenue protected by the non-compete, in currency units.
term
integer
optional
Non-compete term in years (≥ 0).
enforcement_probability
number
optional
Probability the non-compete is enforceable, in [0,1].
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"customer_relationships",
"distribution_network",
"non_compete"
],
"description": "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."
},
"customer_count": {
"type": "integer",
"description": "Number of customers (integer ≥ 0)."
},
"avg_revenue_per_customer": {
"type": "number",
"description": "Average annual revenue per customer, in currency units."
},
"retention_rate": {
"type": "number",
"description": "Annual customer retention rate, in [0,1]."
},
"profit_margin": {
"type": "number",
"description": "Profit margin as a decimal (0.20 = 20%)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"projection_period": {
"type": "integer",
"description": "Projection horizon in years (integer ≥ 1)."
},
"channel_count": {
"type": "integer",
"description": "Number of distribution channels (integer ≥ 0)."
},
"revenue_per_channel": {
"type": "number",
"description": "Annual revenue per channel, in currency units."
},
"channel_margin": {
"type": "number",
"description": "Channel profit margin as a decimal in [0,1]."
},
"useful_life": {
"type": "integer",
"description": "Useful life in years n (integer ≥ 1)."
},
"protected_revenue": {
"type": "number",
"description": "Annual revenue protected by the non-compete, in currency units."
},
"term": {
"type": "integer",
"description": "Non-compete term in years (≥ 0)."
},
"enforcement_probability": {
"type": "number",
"description": "Probability the non-compete is enforceable, in [0,1]."
}
},
"required": [
"method"
]
}
valuation_human_capital
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.
Parameters10
method
string
required
Formula to apply. Options: assembled_workforce = Replacement cost including training, net of attrition.; key_person = Revenue contribution and replacement cost under departure risk.
employee_count
integer
optional
Number of employees (integer ≥ 0).
avg_replacement_cost
number
optional
Average cost to replace one employee, in currency units.
training_cost
number
optional
Training cost per employee, in currency units.
productivity_factor
number
optional
Productivity factor on replacement cost (1.0 = parity).
attrition_rate
number
optional
Annual attrition rate, in [0,1].
revenue_contribution
number
optional
Annual revenue contribution, in currency units.
replacement_cost
number
optional
Cost to replace the key person, in currency units.
departure_probability
number
optional
Annual probability the key person departs, in [0,1].
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"assembled_workforce",
"key_person"
],
"description": "Formula to apply. Options: assembled_workforce = Replacement cost including training, net of attrition.; key_person = Revenue contribution and replacement cost under departure risk."
},
"employee_count": {
"type": "integer",
"description": "Number of employees (integer ≥ 0)."
},
"avg_replacement_cost": {
"type": "number",
"description": "Average cost to replace one employee, in currency units."
},
"training_cost": {
"type": "number",
"description": "Training cost per employee, in currency units."
},
"productivity_factor": {
"type": "number",
"description": "Productivity factor on replacement cost (1.0 = parity)."
},
"attrition_rate": {
"type": "number",
"description": "Annual attrition rate, in [0,1]."
},
"revenue_contribution": {
"type": "number",
"description": "Annual revenue contribution, in currency units."
},
"replacement_cost": {
"type": "number",
"description": "Cost to replace the key person, in currency units."
},
"departure_probability": {
"type": "number",
"description": "Annual probability the key person departs, in [0,1]."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
}
},
"required": [
"method"
]
}
valuation_goodwill_ppa
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.
Parameters10
method
string
required
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.
purchase_price
number
optional
Total consideration / purchase price, in currency units.
fair_value_net_identifiable_assets
number
optional
Fair value of net identifiable assets, in currency units.
tangible_assets_fv
number
optional
Fair value of tangible assets, in currency units.
identified_intangibles
array
optional
Identified intangibles, each {name, value} or {name, fair_value}.
liabilities_fv
number
optional
Fair value of assumed liabilities, in currency units.
asset_type
string
optional
Asset type, e.g. "patent", "trademark", "software", "customer_list".
legal_life
number
optional
Legal protection period in years (overrides the asset-type default).
economic_factors
object
optional
Economic adjustment factors, e.g. {"market_growth": 0.05, "competition": 0.4, "tech_change": 0.1}.
obsolescence_rate
number
optional
Annual obsolescence rate as a decimal in [0,1].
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"goodwill",
"purchase_price_allocation",
"useful_life"
],
"description": "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."
},
"purchase_price": {
"type": "number",
"description": "Total consideration / purchase price, in currency units."
},
"fair_value_net_identifiable_assets": {
"type": "number",
"description": "Fair value of net identifiable assets, in currency units."
},
"tangible_assets_fv": {
"type": "number",
"description": "Fair value of tangible assets, in currency units."
},
"identified_intangibles": {
"type": "array",
"items": {
"type": "object"
},
"description": "Identified intangibles, each {name, value} or {name, fair_value}."
},
"liabilities_fv": {
"type": "number",
"description": "Fair value of assumed liabilities, in currency units.",
"default": 0
},
"asset_type": {
"type": "string",
"description": "Asset type, e.g. \"patent\", \"trademark\", \"software\", \"customer_list\"."
},
"legal_life": {
"type": "number",
"description": "Legal protection period in years (overrides the asset-type default)."
},
"economic_factors": {
"type": "object",
"description": "Economic adjustment factors, e.g. {\"market_growth\": 0.05, \"competition\": 0.4, \"tech_change\": 0.1}."
},
"obsolescence_rate": {
"type": "number",
"description": "Annual obsolescence rate as a decimal in [0,1].",
"default": 0.05
}
},
"required": [
"method"
]
}
valuation_impairment
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.
Parameters6
method
string
required
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.
carrying_value
number
optional
Carrying value of the reporting unit or asset, in currency units.
fair_value
number
optional
Fair value of the reporting unit or asset, in currency units.
reporting_unit
string
optional
Reporting unit name (goodwill only).
standard
string
optional
Accounting standard: ASC350 for US GAAP, IAS36 for IFRS.
recoverable_amount
number
optional
Recoverable amount (IAS 36), in currency units.
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"goodwill_impairment",
"intangible_impairment"
],
"description": "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."
},
"carrying_value": {
"type": "number",
"description": "Carrying value of the reporting unit or asset, in currency units."
},
"fair_value": {
"type": "number",
"description": "Fair value of the reporting unit or asset, in currency units."
},
"reporting_unit": {
"type": "string",
"description": "Reporting unit name (goodwill only)."
},
"standard": {
"type": "string",
"description": "Accounting standard: ASC350 for US GAAP, IAS36 for IFRS.",
"enum": [
"ASC350",
"IAS36"
]
},
"recoverable_amount": {
"type": "number",
"description": "Recoverable amount (IAS 36), in currency units."
}
},
"required": [
"method"
]
}
valuation_royalty_analysis
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.
Parameters8
method
string
required
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
string
optional
Intellectual-property type, e.g. "patent", "trademark", "copyright", "trade_secret".
industry
string
optional
Industry, e.g. "software", "pharmaceutical".
comparable_database
array
optional
Optional comparable licenses, each {rate} or {royalty_rate}.
base_royalty_rate
number
optional
Base royalty rate before adjustment, as a decimal (0.05 = 5%).
adjustment_factors
object
optional
Multiplicative adjustment factors, e.g. {"profitability": 1.1, "market": 0.9}.
licensee_expected_profit
number
optional
Licensee expected profit, in currency units.
profit_attribution_to_ip
number
optional
Fraction of profit attributable to the IP, in [0,1].
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"benchmark",
"adjust",
"twenty_five_percent_rule"
],
"description": "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": {
"type": "string",
"description": "Intellectual-property type, e.g. \"patent\", \"trademark\", \"copyright\", \"trade_secret\"."
},
"industry": {
"type": "string",
"description": "Industry, e.g. \"software\", \"pharmaceutical\"."
},
"comparable_database": {
"type": "array",
"items": {
"type": "object"
},
"description": "Optional comparable licenses, each {rate} or {royalty_rate}."
},
"base_royalty_rate": {
"type": "number",
"description": "Base royalty rate before adjustment, as a decimal (0.05 = 5%)."
},
"adjustment_factors": {
"type": "object",
"description": "Multiplicative adjustment factors, e.g. {\"profitability\": 1.1, \"market\": 0.9}."
},
"licensee_expected_profit": {
"type": "number",
"description": "Licensee expected profit, in currency units."
},
"profit_attribution_to_ip": {
"type": "number",
"description": "Fraction of profit attributable to the IP, in [0,1].",
"default": 1
}
},
"required": [
"method"
]
}
valuation_simulation
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.
Parameters11
method
string
required
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.
input_distributions
array
optional
Inputs to simulate, each {name, distribution, params}; distribution is normal (mean, std), uniform (low, high) or triangular (low, high, mode).
Core function to vary, e.g. "present_value", "capm_discount_rate", "wacc".
parameter_name
string
optional
Name of the parameter to vary.
parameter_range
array
optional
Values to test for the varied parameter.
fixed_parameters
object
optional
Values for all other parameters, held constant.
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"monte_carlo",
"monte_carlo_sensitivity",
"decision_tree",
"sensitivity_analysis"
],
"description": "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."
},
"input_distributions": {
"type": "array",
"items": {
"type": "object"
},
"description": "Inputs to simulate, each {name, distribution, params}; distribution is normal (mean, std), uniform (low, high) or triangular (low, high, mode)."
},
"iterations": {
"type": "integer",
"description": "Simulation iterations; monte_carlo_sensitivity requires 1000-100000.",
"default": 10000
},
"seed": {
"type": "integer",
"description": "Random seed (integer ≥ 0) for reproducible simulations."
},
"base_params": {
"type": "object",
"description": "Base values for all parameters, including those held fixed."
},
"distributions": {
"type": "object",
"description": "Map of parameter name to {distribution, params} for the simulated inputs."
},
"tree": {
"type": "object",
"description": "Decision tree {\"nodes\": [...], \"edges\": [...]}; node types decision, chance, terminal."
},
"function_name": {
"type": "string",
"description": "Core function to vary, e.g. \"present_value\", \"capm_discount_rate\", \"wacc\"."
},
"parameter_name": {
"type": "string",
"description": "Name of the parameter to vary."
},
"parameter_range": {
"type": "array",
"items": {
"type": "number"
},
"description": "Values to test for the varied parameter."
},
"fixed_parameters": {
"type": "object",
"description": "Values for all other parameters, held constant."
}
},
"required": [
"method"
]
}
valuation_compliance
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.
Parameters7
method
string
required
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.
controlled_price
number
optional
Intercompany (controlled) price, in currency units.
uncontrolled_prices
array
optional
Comparable uncontrolled prices, in currency units.
lost_profits_or_royalty
number
optional
Annual lost profits or reasonable royalty, in currency units.
infringement_period
integer
optional
Infringement period in years (≥ 0).
discount_rate
number
optional
Per-period discount rate as a decimal (0.10 = 10%).
prejudgment_interest_rate
number
optional
Pre-judgment interest rate as a decimal (e.g. 0.05 = 5%).
Raw schema
{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"cup_transfer_price",
"patent_infringement_damages"
],
"description": "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."
},
"controlled_price": {
"type": "number",
"description": "Intercompany (controlled) price, in currency units."
},
"uncontrolled_prices": {
"type": "array",
"items": {
"type": "number"
},
"description": "Comparable uncontrolled prices, in currency units."
},
"lost_profits_or_royalty": {
"type": "number",
"description": "Annual lost profits or reasonable royalty, in currency units."
},
"infringement_period": {
"type": "integer",
"description": "Infringement period in years (≥ 0)."
},
"discount_rate": {
"type": "number",
"description": "Per-period discount rate as a decimal (0.10 = 10%)."
},
"prejudgment_interest_rate": {
"type": "number",
"description": "Pre-judgment interest rate as a decimal (e.g. 0.05 = 5%)."
}
},
"required": [
"method"
]
}
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.
Fastest path: no install — point an MCP client at the hosted endpoint
https://intangible-valuation.simonmak.com/api/mcp (Streamable HTTP); or one line locally:
pip install "intangible-valuation[mcp]".
Python Library
python
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.
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:
Prompts and resources. Besides the 14 tools, the server offers three guided
prompts (purchase_price_allocation, value_ip_asset, impairment_test) and a
machine-readable method catalog at intangible-valuation://methods, so agents can
see every method's required parameters before calling a tool.
AI-agent skills
Copy the skills/ directory to your agent's skills folder:
asset-valuation — Patents, trademarks, technology, customer relationships, human capital
Auditable — Every function returns ValuationResult with value, method, formula reference, assumptions, and step-by-step calculation breakdown
Textbook-accurate — All 124+ formulas verified against book example values with 1056 unit tests
AI-ready — MCP server (14 folded tools) and Skills for seamless AI agent integration
Complete coverage — All three valuation approaches (cost, market, income) across 19 chapters
Open source — MIT license, extensible, well-documented
Development
bash
# Install dev dependencies
pip install -e ".[dev]"# Run tests
pytest
# Run with coverage
pytest --cov=src --cov-report=term-missing
# Lint
ruff check .
# Type check
mypy src/
# Regenerate the MCP stdio server from the canonical surface
python scripts/generate_mcp.py
@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:
text
use library /simonmak-ascent/intangible-valuation for API and docs