Skip to main content
Glama

Fair Value MCP Server

Server Details

Valuation MCP: DCF/NAV/CCA, WACC, derivatives, credit risk, fixed income, structured products.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
simonmak-ascent/fair-value
GitHub Stars
1
Server Listing
Fair Value MCP Server

TDQS

Score is being calculated.

Available Tools

14 tools
calculate_actuarial_pvActuarial present valueA
Read-onlyIdempotent
Inspect

Actuarial present value engine. Discount expected cash flows with mortality, survival, and risk adjustment for insurance and benefit obligations, generalising IFRS 17 (fulfilment cash flows), IAS 19 (employee benefits), IFRS 2 (share-based payments), and IAS 37 (provisions). Use this for regulated IFRS/HKFRS obligations only; it does NOT do generic project or scenario probability weighting (use calculate_expected_value). Methods: ifrs17_gmm: cash_flows, discount_rate, risk_adjustment; ifrs17_paa: premiums, claims_cash, acquisition_cash_flows, coverage_periods; ifrs17_vfa: cash_flows, discount_rate, underlying_items_return, risk_adjustment; ias19_puc: projected_benefits, discount_rate, attribution_years; ias37_provision: outcomes, probabilities, discount_rate, periods. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
periodsNoNumber of periods n (>=1).
outcomesNoOutcome values aligned with probabilities.
premiumsNoPremiums in reporting currency.
cash_flowsNoProjected cash flows in reporting currency, indexed t=1..n.
claims_cashNoExpected claims in reporting currency.
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
probabilitiesNoCumulative success probability per period in [0,1], aligned with cash_flows.
risk_adjustmentNoExplicit risk adjustment for non-financial risk.
coverage_periodsNoCoverage periods for the PAA (>=1).
attribution_yearsNoYears of service for attribution (>=1).
projected_benefitsNoProjected benefits per service year.
acquisition_cash_flowsNoAcquisition cash flows in reporting currency.
underlying_items_returnNoReturn on underlying items (decimal).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, but the description adds behavioral context beyond them: it specifies error semantics (unknown method, missing input, or extra field returns an INVALID_ARGUMENT error envelope instead of raising), the no-defaults rule, and the IFRS/HKFRS scope restriction. This is meaningful disclosure not present in 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.

Conciseness5/5

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

Front-loads purpose, then usage/exclusion, then method input lists, and closes with error behavior. Every sentence carries required information (frameworks, alternative tool, per-method inputs, error contract) with no filler, which is appropriate density for a 5-method, 14-parameter tool.

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

Completeness5/5

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

An output schema exists, so return values need not be explained. The description covers scope, method selection, required inputs per method, and error behavior, leaving nothing an agent needs in order to invoke this tool correctly.

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

Parameters5/5

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

Schema coverage is 100%, so baseline would be 3; however, the description adds the critical method-to-input mapping that the schema's method.enum explicitly defers to (e.g., ifrs17_gmm needs cash_flows, discount_rate, risk_adjustment; ias19_puc needs projected_benefits, discount_rate, attribution_years). Without this mapping the 14 flat parameters would be unusable, so the description materially compensates.

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

Purpose5/5

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

States a specific verb+resource ('Actuarial present value engine', 'Discount expected cash flows with mortality, survival, and risk adjustment') and names the regulatory frameworks (IFRS 17, IAS 19, IFRS 2, IAS 37). It explicitly distinguishes itself from the sibling calculate_expected_value by excluding generic probability weighting, so an agent can tell the two apart without opening a schema.

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

Usage Guidelines5/5

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

Explicitly states when to use ('for regulated IFRS/HKFRS obligations only'), when not to use ('does NOT do generic project or scenario probability weighting'), and names the alternative tool (calculate_expected_value). It also defines the invocation rule ('Supply exactly one method with its declared inputs (no defaults)') that governs correct use.

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

calculate_convertible_bondConvertible and exchangeable bond valuationA
Read-onlyIdempotent
Inspect

Convertible-bond engine. Value callable and puttable convertible or exchangeable bonds with credit risk using a Tsiveriotis-Fernandes lattice (equity discounted at the risk-free rate, debt at a credit spread), with conversion, issuer call, holder put, coupon schedule, and a straight-bond floor. Use this for convertible and exchangeable bonds; for a plain bond or rate curve use calculate_fixed_income, and for a standalone option or warrant use calculate_option. The lattice_tsf, lattice_intensity, finite_difference, lsmc and quantlib methods are alternative numerical schemes for the same valuation and take identical inputs (Tsiveriotis-Fernandes is the reference, lsmc is Monte Carlo, quantlib needs the optional engine); choose one. Methods: lattice_tsf/lattice_intensity/finite_difference/lsmc/quantlib: spot, face, coupon_rate, maturity, conversion_ratio, volatility, risk_free, credit_spread, call_schedule, put_schedule, rights_priority. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
faceNoBond face value.
spotNoSpot price of the underlying (or FX rate for garman_kohlhagen).
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
maturityNoTime to expiry in years (0.5 = six months); > 0.
risk_freeNoContinuously-compounded risk-free rate (decimal).
volatilityNoAnnualized volatility (decimal, 0.30 = 30%); > 0.
coupon_rateNoAnnual coupon rate (decimal).
put_scheduleNoInvestor put schedule [{date_years, price}]; pass [] when there is none.
call_scheduleNoIssuer call schedule [{date_years, price}]; pass [] when there is none.
credit_spreadNoCredit spread over the risk-free rate (decimal).
rights_priorityNoWhich right prevails when call and put coincide.
conversion_ratioNoShares received per bond on conversion.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description goes further by disclosing the error contract (unknown method, missing input, or extra field yields an INVALID_ARGUMENT envelope rather than raising), the no-defaults rule, and that quantlib needs an optional engine while lsmc is Monte Carlo. It stops short of describing convergence/accuracy trade-offs or runtime cost, which would matter for method choice.

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

Conciseness4/5

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

Front-loaded with the engine and technique before the routing guidance and method list, and every sentence carries information. It is somewhat repetitive, enumerating the five method names in two separate sentences plus the schema enum, which costs a little density.

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

Completeness5/5

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

For a 12-parameter tool with a 100% covered schema and an output schema, the description supplies everything else an agent needs: the valuation domain, the sibling routing, the method/input contract, and the error behavior. Return values need not be explained given the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real invocation semantics beyond the schema: exactly one method's declared inputs must be supplied with no defaults, extra fields are rejected, and the method list is enumerated with its input set. This clarifies a schema that otherwise marks every parameter nullable with default null.

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

Purpose5/5

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

The description names a specific verb+resource (value callable/puttable convertible or exchangeable bonds) and the exact numerical technique (Tsiveriotis-Fernandes lattice with credit spread), which immediately distinguishes it from the fixed-income and option siblings. An agent can identify the tool without opening the schema.

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

Usage Guidelines5/5

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

It explicitly routes the agent: use this for convertible/exchangeable bonds, use calculate_fixed_income for plain bonds or rate curves, and calculate_option for standalone options/warrants. It also explains that the five methods are interchangeable schemes for the same valuation and that the agent must choose one, which is genuine selection guidance.

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

calculate_credit_lossCredit loss and impairmentA
Read-onlyIdempotent
Inspect

Credit-risk engine (IFRS 9 / HKFRS 9). Compute 12-month, lifetime, and staged expected credit loss, PD/LGD/EAD, provision matrices, hazard rates, and CVA/DVA. Use this for impairment, fair-value credit adjustment, and loan-loss provisioning; for the credit component of a specific convertible bond use calculate_convertible_bond, and for liquidity, control or marketability discounts rather than credit loss use calculate_fair_value_adjustment. Methods: ecl_12m: ead, pd, lgd; ecl_lifetime: ead, pd_lifetime, lgd; ecl_staged: ead, pd_12m, pd_lifetime, lgd, stage; provision_matrix: receivables_ageing, loss_rates; pd_from_spread: credit_spread, recovery, tenor_years; cumulative_pd: annual_pd, years; hazard: hazard_rate, tenor_years; cva_dva: exposure_profile, pd, lgd, discount_rate. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
pdNoProbability of default over the horizon, in [0,1].
eadNoExposure at default in currency units.
lgdNoLoss given default in [0,1] (1 - recovery rate).
stageNoIFRS 9 stage (1, 2 or 3).
yearsNoNumber of projection years n; equal len(cash_flows) when both are supplied.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
pd_12mNo12-month PD in [0,1].
recoveryNoRecovery rate in [0,1].
annual_pdNoAnnual PD in [0,1].
loss_ratesNoLoss rate per ageing bucket.
hazard_rateNoDefault hazard rate as a decimal.
pd_lifetimeNoLifetime PD in [0,1].
tenor_yearsNoTenor in years (>0).
credit_spreadNoCredit spread over the risk-free rate (decimal).
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
exposure_profileNoExpected exposure per period.
receivables_ageingNoAgeing buckets [{bucket, amount}].

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the error contract (unknown method, missing input, or extra field returns an INVALID_ARGUMENT envelope rather than raising) and the no-defaults, exactly-one-method constraint. It stops short of describing result shape or precision, but the output schema covers return values.

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

Conciseness5/5

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

Purpose and domain are front-loaded, followed by routing, then the compact method-to-input contract, then the error contract. The method list is dense but every clause is load-bearing for a tool with 8 mutually exclusive methods; there is no filler.

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

Completeness5/5

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

For a high-complexity multi-method calculator, the description covers purpose, sibling routing, the full method/input matrix, and failure semantics, while the output schema handles return values. An agent has everything needed to select a method and assemble a valid call.

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

Parameters5/5

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

Schema coverage is 100% and the method enum's schema description explicitly defers to the tool description for required inputs. The description supplies exactly that per-method mapping (ecl_12m: ead/pd/lgd; provision_matrix: receivables_ageing/loss_rates; cva_dva: exposure_profile/pd/lgd/discount_rate, etc.), which the schema alone cannot convey given 17 optional parameters and one discriminator.

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

Purpose5/5

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

States a specific verb+resource (compute expected credit loss) and anchors it in a named domain (IFRS 9 / HKFRS 9), listing the concrete outputs (12-month/lifetime/staged ECL, PD/LGD/EAD, provision matrices, hazard rates, CVA/DVA). It explicitly distinguishes itself from calculate_convertible_bond and calculate_fair_value_adjustment, so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use cases (impairment, fair-value credit adjustment, loan-loss provisioning) and two named when-not cases with the correct alternative for each (convertible bond credit component, liquidity/control/marketability discounts). This is exactly the routing information the sibling set requires.

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

calculate_dcfDiscounted cash flow valuationA
Read-onlyIdempotent
Inspect

Discounted cash flow valuation engine. Choose a method and supply its exact inputs to value a business from projected free cash flows, dividends, residual income, or economic profit. Covers FCFF/FCFE DCF, NPV/IRR, terminal values, and multi-stage growth. Use this for going-concern cash-flow businesses; for asset-anchored or financial firms use calculate_residual, for peer-based pricing use calculate_market_multiple, and for pre-profit companies use calculate_loss_making_company. Methods: dcf/npv: cash_flows, discount_rate; annuity: payment, discount_rate, periods; growing_annuity: payment, discount_rate, growth_rate, periods; perpetuity: payment, discount_rate; terminal_gordon: final_cash_flow, discount_rate, perpetual_growth; terminal_multiple: final_cash_flow, exit_multiple; viu_pre_tax: cash_flows, pre_tax_discount_rate; rnpv: cash_flows, discount_rate, probabilities; lease_pv: lease_payments, incremental_borrowing_rate. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
paymentNoLevel periodic payment in reporting currency.
periodsNoNumber of periods n (>=1).
cash_flowsNoProjected cash flows in reporting currency, indexed t=1..n.
growth_rateNoPeriodic growth rate as a decimal (0.03 = 3%).
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
exit_multipleNoExit multiple on the final flow, e.g. 8.0 for 8x.
probabilitiesNoCumulative success probability per period in [0,1], aligned with cash_flows.
lease_paymentsNoContractual lease payments in reporting currency, t=1..n.
final_cash_flowNoFinal-period cash flow for the terminal value.
perpetual_growthNoGordon growth rate (decimal); strictly below discount_rate.
pre_tax_discount_rateNoPre-tax discount rate (decimal), required by viu_pre_tax (IAS 36).
incremental_borrowing_rateNoLessee incremental borrowing rate (decimal), IFRS 16.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds behavior beyond that: exactly one method per call, no defaults, and the failure mode (an INVALID_ARGUMENT error envelope rather than a raised exception). It does not need to discuss auth or rate limits for a pure in-process computation, so this is close to complete.

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

Conciseness4/5

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

Purpose is front-loaded and the routing rule follows before the method list. The enumeration of methods and their inputs is long, but each entry is load-bearing because the schema does not encode per-method requirements. Slightly dense, yet nothing is redundant with the structured fields.

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

Completeness5/5

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

An output schema exists, so return values need not be described. With the safety profile in annotations, per-method input requirements, sibling routing, and error semantics all stated, an agent has everything required to select a method and call it correctly.

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

Parameters5/5

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

Schema coverage is 100%, which normally caps the baseline at 3, but here the schema marks 12 of 13 parameters as optional-with-null, so it cannot convey which inputs a given method actually requires. The description supplies that mapping explicitly per method (e.g. "terminal_multiple: final_cash_flow, exit_multiple; viu_pre_tax: cash_flows, pre_tax_discount_rate"), which is information no single-parameter schema description can express.

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

Purpose5/5

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

States a specific verb and resource ("Discounted cash flow valuation engine") and enumerates the exact technique families covered (FCFF/FCFE DCF, NPV/IRR, terminal values, multi-stage growth). It also names the sibling tools it is not (calculate_residual, calculate_market_multiple, calculate_loss_making_company), so an agent can discriminate without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit routing rule: "Use this for going-concern cash-flow businesses; for asset-anchored or financial firms use calculate_residual, for peer-based pricing use calculate_market_multiple, and for pre-profit companies use calculate_loss_making_company." This is a when-to-use plus three named alternatives with the condition selecting each.

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

calculate_discount_rateCost of capital and discount ratesA
Read-onlyIdempotent
Inspect

Cost-of-capital engine. Compute WACC, cost of equity (CAPM), cost of debt, unlevered/relevered beta, and country or size premiums from an explicit capital structure and market inputs. Use this to derive the discount rate an income-approach valuation needs; it returns a rate, not a valuation, so feed the result to calculate_dcf, or to calculate_residual for IFRS-basis measurement. Methods: wacc: equity_weight, debt_weight, cost_equity, cost_debt, tax_rate; capm: risk_free, beta, market_return; startup_capm: risk_free, beta, market_risk_premium, size_premium, illiquidity_premium; build_up: risk_free, equity_risk_premium, size_premium, industry_premium, specific_premium; currency_adjusted: base_rate, currency_risk_premium, country_risk_premium; country_risk: sovereign_yield, us_risk_free; esg: base_rate, esg_risk_premium, esg_opportunity_discount; portfolio_beta: weights, betas; ibr: risk_free, credit_spread, tenor_years. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
betaNoEquity beta (market = 1.0).
betasNoAsset/segment betas aligned with weights.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
weightsNoWeights that must sum to 1.
tax_rateNoMarginal corporate tax rate as a decimal.
base_rateNoBase rate before currency/country/ESG adjustment (decimal).
cost_debtNoPre-tax cost of debt as a decimal.
risk_freeNoContinuously-compounded risk-free rate (decimal).
cost_equityNoCost of equity as a decimal (0.12 = 12%).
debt_weightNoMarket-value weight of debt (decimal); with equity_weight must sum to 1.
tenor_yearsNoTenor in years (>0).
size_premiumNoSmall-size premium (decimal).
us_risk_freeNoUS Treasury risk-free yield (decimal).
credit_spreadNoCredit spread over the risk-free rate (decimal).
equity_weightNoMarket-value weight of equity (decimal); with debt_weight must sum to 1.
market_returnNoExpected market return (decimal).
sovereign_yieldNoSovereign bond yield (decimal).
esg_risk_premiumNoESG risk premium added to the base rate (decimal).
industry_premiumNoIndustry risk premium (decimal).
specific_premiumNoCompany-specific risk premium (decimal).
equity_risk_premiumNoEquity risk premium (decimal).
illiquidity_premiumNoIlliquidity premium (decimal).
market_risk_premiumNoMarket risk premium (decimal).
country_risk_premiumNoCountry risk premium (decimal).
currency_risk_premiumNoCurrency risk premium (decimal).
esg_opportunity_discountNoESG opportunity discount subtracted from the base rate (decimal).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real behavioral context beyond them: exactly one method with its declared inputs, no defaults applied, and an error-envelope contract (INVALID_ARGUMENT) instead of raising on unknown method, missing input, or extra field. It omits any note on auth, limits, or output shape, but has an output schema covering returns.

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

Conciseness4/5

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

Front-loaded with purpose and routing before the dense method table; every sentence carries information. The per-method enumeration is long but necessary given nine modes, though it reads as a run-on and could be structured for faster scanning.

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

Completeness5/5

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

For a 26-parameter, nine-method calculation tool, the description covers purpose, routing, method-to-input mapping, and failure semantics. A return-value explanation is unnecessary because an output schema exists. Nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

Schema coverage is 100%, so baseline would be 3, but the description goes well beyond it by mapping each of the nine method values to the exact inputs it requires (e.g. wacc: equity_weight, debt_weight, cost_equity, cost_debt, tax_rate; ibr: risk_free, credit_spread, tenor_years). This conditional dependency between method and parameters is not expressible in the flat schema and is the key guidance for correctly invoking the tool.

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

Purpose5/5

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

Opens with a specific verb+resource ('Cost-of-capital engine. Compute WACC, cost of equity (CAPM), cost of debt, unlevered/relevered beta, and country or size premiums'), which is precisely scoped and clearly distinguished from the valuation siblings. The explicit statement that it 'returns a rate, not a valuation' separates it from calculate_dcf/calculate_residual without opening either schema.

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

Usage Guidelines5/5

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

States the use case ('derive the discount rate an income-approach valuation needs'), the boundary ('returns a rate, not a valuation'), and names the concrete downstream routing targets (calculate_dcf, calculate_residual for IFRS-basis measurement). An agent knows both when to call it and where its output goes.

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

calculate_expected_valueExpected value and probability weightingA
Read-onlyIdempotent
Inspect

Expected-value engine. Compute expected values over discrete, continuous, simulated, or tree-structured uncertainty, plus football-field ranges. Use this for generic probability weighting of scenarios, Monte-Carlo and decision trees; it does NOT perform IFRS/HKFRS measurement of provisions, insurance or employee-benefit obligations (use calculate_actuarial_pv), and it does not price path-dependent payoffs (use calculate_structured_product). Methods: discrete: outcomes, probabilities; continuous: distribution, mean, std, lower, upper; scenario: scenarios; monte_carlo: iterations, distributions, base_params, seed; decision_tree: tree; football_field: estimates. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
stdNoDistribution standard deviation (>0).
meanNoDistribution mean.
seedNoDeterministic RNG seed (required by simulation methods for reproducibility).
treeNoDecision tree with chance/decision nodes.
lowerNoLower integration bound.
upperNoUpper integration bound.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
outcomesNoOutcome values aligned with probabilities.
estimatesNoEstimates [{method, central, low, high}] for a football field.
scenariosNoScenarios [{probability, value}] with probabilities summing to 1.
iterationsNoMonte-Carlo iterations (>=1000).
base_paramsNoBase parameter values for simulation.
distributionNoContinuous distribution to integrate over.
distributionsNoInput distributions [{parameter, type, mean, std}].
probabilitiesNoCumulative success probability per period in [0,1], aligned with cash_flows.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, and the description goes further by disclosing the validation contract: exactly one method, no defaults, and an INVALID_ARGUMENT error envelope rather than an exception. That failure-mode disclosure is real value beyond the annotations. One caveat: 'no defaults' is in mild tension with the schema, which lists default null for every optional field, so a 4 rather than a 5.

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

Conciseness4/5

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

Front-loads purpose, then exclusions, then the per-method input contract, then the error contract — a sensible priority order with no filler sentences. The middle method-inventory sentence is dense and list-heavy, but every element is load-bearing rather than decorative.

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

Completeness5/5

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

For a 15-parameter tool with an enum discriminator and an output schema, the description supplies the method-to-input contract, the mutual-exclusion rule, the sibling routing, and the error behavior. Return values are covered by the output schema, so nothing an agent needs to invoke this correctly is missing.

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

Parameters5/5

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

Schema coverage is 100% so the baseline would be 3, but the description adds the crucial conditional mapping the flat schema cannot express: which inputs each method value requires (discrete: outcomes+probabilities; continuous: distribution/mean/std/lower/upper; monte_carlo: iterations/distributions/base_params/seed, etc.). This resolves the cross-parameter dependency the enum alone leaves ambiguous.

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

Purpose5/5

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

It names a specific verb and resource ('expected-value engine', 'Compute expected values') and immediately scopes the breadth of methods it covers. It distinguishes itself from sibling tools by name, explicitly ruling out calculate_actuarial_pv and calculate_structured_product, so an agent can route between them without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('generic probability weighting of scenarios, Monte-Carlo and decision trees') and two explicit when-not cases with the correct alternative tool named for each. Nothing about selection is left to inference.

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

calculate_fair_value_adjustmentFair value adjustments (IFRS 13)A
Read-onlyIdempotent
Inspect

Fair-value-adjustment engine (IFRS 13). Compute exit-price adjustments including credit, liquidity, control and marketability discounts, blockage, and the fair-value hierarchy level. Use this to move from an indicated value to the fair value recognised in the accounts; for liquidity/marketability inputs of a listed instrument prefer calculate_market_multiple, and for expected credit loss use calculate_credit_loss. Methods: dlom: base_value, restricted_period, volatility, risk_free; dloc: base_value, transaction_cost_pct; control_premium: base_value, control_premium_pct; minority_discount: base_value, minority_discount_pct; highest_best_use: base_value, alternative_use_values; hierarchy_level: inputs. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputsNoInputs [{value, level}] used to determine the hierarchy level.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
risk_freeNoContinuously-compounded risk-free rate (decimal).
base_valueNoBase valuation before the adjustment.
volatilityNoAnnualized volatility (decimal, 0.30 = 30%); > 0.
restricted_periodNoRestricted/marketability period in years (>=0).
control_premium_pctNoControl premium as a fraction of value.
transaction_cost_pctNoTransaction cost as a fraction of value.
minority_discount_pctNoMinority discount as a fraction of value.
alternative_use_valuesNoFinancially feasible alternative-use values.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds real behavioral context beyond that: exactly one method must be supplied with its declared inputs, there are no defaults, and invalid input returns an error envelope (code INVALID_ARGUMENT) rather than raising. It doesn't need to describe output because an output schema exists.

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

Conciseness4/5

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

The purpose, alternatives and error contract are front-loaded, and every sentence carries information. The method/input listing is dense but necessary since the schema defers it here; it is slightly run-on but not padded.

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

Completeness5/5

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

For a 6-method, 10-parameter calculation tool this is complete: method-to-input mapping, alternatives, and error behavior are all covered, and return values are handled by the output schema. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100% so field meanings are already documented, but the description adds cross-parameter semantics the schema cannot express: the exact input set required per method value, the exactly-one-method constraint, and that no defaults apply. That mapping meaningfully exceeds the per-field descriptions.

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

Purpose5/5

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

States a specific verb+resource ('fair-value-adjustment engine', 'compute exit-price adjustments') and enumerates the adjustment types (credit, liquidity, control, marketability, blockage, hierarchy). It explicitly distinguishes itself from siblings calculate_market_multiple and calculate_credit_loss, so an agent can route correctly without opening another schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use ('move from an indicated value to the fair value recognised in the accounts') and names the alternatives with the condition that selects them (liquidity/marketability inputs of a listed instrument -> calculate_market_multiple; expected credit loss -> calculate_credit_loss). 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.

calculate_fixed_incomeFixed income and term structure analyticsA
Read-onlyIdempotent
Inspect

Fixed-income engine. Price plain coupon bonds, solve for yield to maturity, measure interest-rate sensitivity via Macaulay and modified duration and convexity, and build a HIBOR/HKD-style term structure: bootstrap a zero curve from par rates, infer forward rates, and discount cash flows on the curve. Use this for vanilla bonds, rate risk and discount curves; for convertibles use calculate_convertible_bond and for structured payoffs use calculate_structured_product. Methods: bond_price/duration/convexity: face, coupon_rate, years, ytm, frequency; bond_yield: face, coupon_rate, years, price, frequency; matrix_pricing: target_tenor, benchmark_tenors, benchmark_yields; discount_factor: rate, years, frequency; zero_curve: par_rates, tenors, frequency; forward_rate: zero_rates, tenors, t1, t2; pv_curve: cash_flows, times, zero_rates, tenors. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
t1NoForward period start in years (>=0).
t2NoForward period end in years (> t1).
ytmNoYield to maturity (decimal, annualised).
faceNoBond face value.
rateNoA single interest/zero rate (decimal).
priceNoDirty price of the instrument in reporting currency.
timesNoCash-flow times in years, aligned with cash_flows.
yearsNoNumber of projection years n; equal len(cash_flows) when both are supplied.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
tenorsNoTenors in years, aligned with par_rates or zero_rates.
frequencyNoCoupon payments per year (1=annual, 2=semi-annual).
par_ratesNoPar (coupon) rates per tenor, aligned with tenors (decimal).
cash_flowsNoProjected cash flows in reporting currency, indexed t=1..n.
zero_ratesNoZero (spot) rates per tenor, decimal, annual compounding.
coupon_rateNoAnnual coupon rate (decimal).
target_tenorNoTarget tenor in years for matrix pricing (interpolated).
benchmark_tenorsNoBenchmark tenors in years, sorted, aligned with benchmark_yields.
benchmark_yieldsNoBenchmark yields (decimal) at each benchmark tenor.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral contract beyond that: the exactly-one-method dispatch rule, 'no defaults' enforcement, and the error-envelope behavior (INVALID_ARGUMENT returned rather than raised) for unknown methods, missing inputs, or extra fields. It doesn't discuss numerical edge cases (e.g., non-convergence in yield solving) or output shape, which keeps it from a 5.

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

Conciseness4/5

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

Dense but front-loaded: purpose first, then sibling routing, then the per-method input contract, then the error contract. The method-input enumeration is long but every element earns its place given the 9-way method enum. Slightly cramped as one unbroken paragraph, which costs it a point.

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

Completeness5/5

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

Output schema exists, so return values need not be described, and the description covers the remaining agent-critical surface: which method to pick, what inputs each method requires, same-call constraints, and error semantics. For an 18-parameter, single-method-dispatch tool, nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real value the schema cannot: an explicit method-to-input mapping (bond_yield takes price instead of ytm; matrix_pricing takes target/benchmark tenors; pv_curve takes cash_flows plus times plus zero_rates). This tells the agent which of the 18 optional parameters to populate for a given method, which the flat schema does not convey.

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

Purpose5/5

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

States a specific domain engine with enumerated capabilities (bond pricing, YTM solving, duration/convexity, zero-curve bootstrap, forwards, curve discounting) and names the exact sibling alternatives for convertible and structured payoffs. An agent can distinguish it from calculate_convertible_bond and calculate_structured_product without opening any schema.

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

Usage Guidelines5/5

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

Explicit routing guidance: 'Use this for vanilla bonds, rate risk and discount curves; for convertibles use calculate_convertible_bond and for structured payoffs use calculate_structured_product.' Both the when-to-use and the when-not-to-use (with named alternatives) are stated.

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

calculate_loss_making_companyLoss-making and pre-profit company valuationA
Read-onlyIdempotent
Inspect

Loss-making-company engine. Value currently unprofitable companies with margin-ramp DCF, revenue multiples, Merton structural equity, the VC method, distressed waterfalls, bank residual income, and SPAC deals; every method returns a central value plus a dispersion (sigma, percentiles, long-tail). Use this when earnings-based multiples break down; for standalone probability weighting of arbitrary scenarios use calculate_expected_value, and for a single going-concern DCF use calculate_dcf. Methods: margin_ramp_dcf: revenue, growth_rate, start_margin, target_margin, ramp_years, discount_rate, years, shares_outstanding, net_debt, range_method; revenue_multiple: revenue, ev_revenue_multiple, net_debt, shares_outstanding, range_method; merton_equity: firm_value, firm_volatility, debt, risk_free, maturity, range_method; vc_method: terminal_value, target_return, investment, shares_outstanding, range_method; distressed_waterfall: enterprise_value, claims, range_method; bank_residual_income: book_value, net_income, cost_equity, growth_rate, range_method; spac_deal: trust_cash, shares_outstanding, redemption_price, range_method. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
debtNoDebt face value (default point) for the Merton equity model.
yearsNoNumber of projection years n; equal len(cash_flows) when both are supplied.
claimsNoOrdered claims [{name, amount, priority}] for a waterfall.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
revenueNoBase-year revenue in reporting currency.
maturityNoTime to expiry in years (0.5 = six months); > 0.
net_debtNoTotal debt minus cash and equivalents.
risk_freeNoContinuously-compounded risk-free rate (decimal).
book_valueNoBook value of equity in reporting currency.
firm_valueNoFirm/asset value for the Merton equity model.
investmentNoAmount invested (VC method).
net_incomeNoNet income in reporting currency.
ramp_yearsNoYears to move from start_margin to target_margin (>=1).
trust_cashNoSPAC trust cash available for redemption.
cost_equityNoCost of equity as a decimal (0.12 = 12%).
growth_rateNoPeriodic growth rate as a decimal (0.03 = 3%).
range_methodNoStatistic returned as the headline value; the full dispersion is always included.
start_marginNoOpening operating margin (decimal, may be negative); margin_ramp.
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
target_marginNoNormalized margin reached after ramp_years; margin_ramp.
target_returnNoVC target return multiple.
terminal_valueNoExit/terminal value (VC method).
firm_volatilityNoAsset volatility for the Merton equity model (decimal).
enterprise_valueNoEnterprise value distributed across claims.
redemption_priceNoSPAC redemption price per share.
shares_outstandingNoShares outstanding.
ev_revenue_multipleNoEV/Revenue multiple.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, so the safety profile is covered; the description still adds real value by disclosing that every method returns a central value plus dispersion (sigma, percentiles, long-tail), that no defaults are applied, and that bad input yields an INVALID_ARGUMENT error envelope rather than raising. It does not contradict the annotations.

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

Conciseness4/5

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

Front-loads purpose, then usage/exclusions, then the method-to-input catalog. The method listing is long but each term carries load for a 27-parameter tool; only the repeated 'range_method' tail across every method is slightly wasteful.

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

Completeness5/5

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

Given 27 params, one required discriminator, full schema coverage, and an existing output schema, the description supplies everything an agent needs: purpose, routing versus siblings, the per-method input contract, no-defaults rule, and error behavior. Return-value detail is correctly left to the output schema.

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

Parameters5/5

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

Schema coverage is 100%, which alone would cap the baseline at 3, but the description goes well beyond the per-field schema text by mapping each of the seven method enum values to the exact inputs it requires (e.g. merton_equity: firm_value, firm_volatility, debt, risk_free, maturity) and stating that exactly one method's declared inputs must be supplied. That mapping is genuinely unavailable from the flat schema.

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

Purpose5/5

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

States a specific verb+resource (value currently unprofitable companies) and enumerates the exact method families the engine covers. It explicitly distinguishes itself from siblings by naming calculate_expected_value (probability weighting of arbitrary scenarios) and calculate_dcf (single going-concern DCF), so an agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit trigger ('Use this when earnings-based multiples break down') plus two named alternatives with the precise condition that selects each. Coverage of when-to-use and when-to-use-something-else is essentially complete.

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

calculate_market_multipleMarket multiples and comparable pricingA
Read-onlyIdempotent
Inspect

Market-multiple engine. Apply peer multiples (P/E, P/B, EV/EBITDA, EV/Sales, PEG and more) or derive implied multiples to price a company on a comparable basis. Use this for market-approach pricing where peers exist; it does peer multiples only — for intrinsic cash-flow value use calculate_dcf, and for residual-income or IFRS-basis measurement use calculate_residual. Methods: ev_revenue: revenue, ev_revenue_multiple; ev_ebitda: ebitda, ev_ebitda_multiple; ev_arr: arr, ev_arr_multiple; ev_gmv: gmv, ev_gmv_multiple; pe: eps, pe_multiple; pb: book_value_per_share, pb_multiple; ps: sales_per_share, ps_multiple; cap_rate: net_operating_income, cap_rate; regression: intercept, growth_rate, growth_coefficient, market_maturity, maturity_coefficient; royalty_cap: revenue, royalty_rate, discount_rate; ddm: dividend_per_share, cost_equity, growth_rate. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
arrNoAnnual recurring revenue in reporting currency.
epsNoEarnings per share.
gmvNoGross merchandise value in reporting currency.
ebitdaNoEBITDA in reporting currency.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
revenueNoBase-year revenue in reporting currency.
cap_rateNoCapitalisation rate as a decimal (0.06 = 6%).
interceptNoRegression intercept (base multiple).
cost_equityNoCost of equity as a decimal (0.12 = 12%).
growth_rateNoPeriodic growth rate as a decimal (0.03 = 3%).
pb_multipleNoPrice/Book multiple.
pe_multipleNoPrice/Earnings multiple.
ps_multipleNoPrice/Sales multiple.
royalty_rateNoRoyalty rate as a decimal (0.05 = 5% of revenue).
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
ev_arr_multipleNoEV/ARR multiple.
ev_gmv_multipleNoEV/GMV multiple.
market_maturityNoMarket maturity indicator.
sales_per_shareNoSales per share.
dividend_per_shareNoDividend per share in reporting currency.
ev_ebitda_multipleNoEV/EBITDA multiple.
growth_coefficientNoRegression slope on growth.
ev_revenue_multipleNoEV/Revenue multiple.
book_value_per_shareNoBook value per share.
maturity_coefficientNoRegression slope on market maturity.
net_operating_incomeNoStabilised net operating income in reporting currency.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavioral detail the annotations cannot: exactly one method must be supplied with its declared inputs, no defaults are applied, and invalid input returns an error envelope (INVALID_ARGUMENT) rather than raising. It does not discuss output shape or numeric precision, which keeps it short of a 5.

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

Conciseness4/5

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

Purpose and sibling routing are front-loaded, then the method-to-input table follows. The enumeration is long but each entry is load-bearing, since the schema alone does not encode the mapping; there is little fat to trim.

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

Completeness5/5

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

An output schema exists, so return values need no explanation. The description covers method selection, required inputs per method, the exactly-one-method constraint, and error behavior, which is everything an agent needs to invoke a 26-parameter, 11-branch tool correctly.

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

Parameters5/5

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

Schema coverage is 100% for the 26 individual fields, but the schema cannot express which subset each method requires. The description supplies that complete cross-parameter mapping for all 11 methods plus the one-method-at-a-time rule, which is genuine value beyond the structured fields.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Market-multiple engine') and states the exact scope: apply peer multiples or derive implied multiples for comparable-basis pricing. It explicitly distinguishes itself from calculate_dcf and calculate_residual, so an agent can route correctly without opening the schema.

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

Usage Guidelines5/5

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

It gives an explicit when-to-use condition ('market-approach pricing where peers exist') and names two alternatives with the conditions that select them (intrinsic cash-flow value -> calculate_dcf; residual-income/IFRS -> calculate_residual). 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.

calculate_optionOption and warrant pricingA
Read-onlyIdempotent
Inspect

Option-pricing engine. Price European and American options and warrants (Black-Scholes, Black-76, CRR binomial, Garman-Kohlhagen FX, digital, range, share-based) and their greeks. Use this for a single contingent claim or warrant on one underlying; it does NOT price listed structured payoffs such as CBBCs, inline/derivative warrants or autocallables (use calculate_structured_product). Methods: black_scholes: spot, strike, maturity, risk_free, volatility, option_type; black76: forward, strike, maturity, risk_free, volatility, option_type; binomial_american: spot, strike, maturity, risk_free, volatility, option_type, steps; garman_kohlhagen: spot, strike, maturity, domestic_rate, foreign_rate, volatility, option_type; barrier_first_passage: spot, strike, maturity, risk_free, volatility, option_type, barrier, barrier_type; asian_average: spot, strike, maturity, risk_free, volatility, option_type, average_type; digital: spot, strike, maturity, risk_free, volatility, cash_payout; range: spot, lower_strike, upper_strike, maturity, risk_free, volatility, payout; share_based: share_price, exercise_price, expected_life, volatility, risk_free, dividend_yield. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
spotNoSpot price of the underlying (or FX rate for garman_kohlhagen).
stepsNoLattice steps for binomial_american (>=50).
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
payoutNoFixed payout when the range condition is met.
strikeNoStrike or exercise price in the same currency as spot.
barrierNoKnock level for barrier_first_passage.
forwardNoForward/futures price of the underlying.
maturityNoTime to expiry in years (0.5 = six months); > 0.
risk_freeNoContinuously-compounded risk-free rate (decimal).
volatilityNoAnnualized volatility (decimal, 0.30 = 30%); > 0.
cash_payoutNoFixed cash amount paid when the digital condition is met.
option_typeNoOption right.
share_priceNoGrant-date share price (IFRS 2).
average_typeNoAveraging convention.
barrier_typeNoBarrier direction.
foreign_rateNoForeign continuously-compounded rate (decimal).
lower_strikeNoLower strike of the range.
upper_strikeNoUpper strike of the range.
domestic_rateNoDomestic continuously-compounded rate (decimal).
expected_lifeNoExpected life of the award in years (IFRS 2).
dividend_yieldNoContinuous dividend yield (decimal).
exercise_priceNoExercise price of the award (IFRS 2).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, so safety is covered. The description adds genuinely useful behavior beyond the schema: the 'exactly one method with its declared inputs (no defaults)' rule and the error envelope contract (INVALID_ARGUMENT instead of raising). It does not describe whether greeks are always returned, but the output schema covers the return shape.

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

Conciseness3/5

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

The prohibition clause is front-loaded well, but the per-method input lists read as a compressor run-on and are somewhat redundant with the method enum plus parameter descriptions. The content is justified by the combinatorial method/input matrix, but the dense single block is heavy to parse.

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

Completeness5/5

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

Given a 9-way method enum over 22 parameters with only one required field, the method-to-input mapping is the key missing piece and it is provided. An output schema exists so return values need not be explained, and the error contract closes the remaining gap. Nothing an agent needs to form a valid call is absent.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema documents each parameter's meaning and constraints (maturity > 0, volatility > 0, IFRS 2 labels). The description goes further by mapping which inputs each method value requires, which is semantic information the field-level schema does not express. It does not add unit/format details beyond the schema.

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

Purpose5/5

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

States a specific verb (price) and a well-defined resource (European/American options and warrants) with the exact formula families named. It explicitly distinguishes itself from the sibling calculate_structured_product, which an agent could otherwise confuse given the overlapping 'contingent payoff' domain.

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

Usage Guidelines5/5

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

Explicitly names the exclusion set (CBBCs, inline/derivative warrants, autocallables) and routes the agent to the correct sibling calculate_structured_product. The 'single contingent claim or warrant on one underlying' framing gives the positive selection criterion.

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

calculate_residualIFRS measurement, residual income and non-financial fair valueA
Read-onlyIdempotent
Inspect

IFRS/HKFRS measurement engine. Compute goodwill and purchase-price allocation, impairment (IAS 36), inventory net realisable value, held-for-sale, debt waterfalls, cap tables, sum-of-the-parts and SPAC redemption; residual income and justified price-to-book; and non-financial asset fair value: investment property (IAS 40 / HKAS 40), PP&E revaluation via depreciated replacement cost (IAS 16) and biological assets at fair value less costs to sell (IAS 41). Use this for accounting-basis measurement of assets and equity; for going-concern cash flow use calculate_dcf and for peer multiples use calculate_market_multiple. Methods: goodwill: purchase_price, fair_value_net_identifiable_assets; ppa: purchase_price, tangible_assets_fv, identified_intangibles_fv; impairment_fvlcd: carrying_value, fair_value_less_costs_to_dispose; impairment_viu: carrying_value, value_in_use; inventory_nrv: carrying_value, net_realisable_value; held_for_sale: carrying_value, fair_value_less_costs_to_sell; debt_waterfall/cap_table: enterprise_value, claims; sotp: segments, net_debt, holding_discount; spac_redemption: trust_cash, shares_outstanding, redemption_price; investment_property: noi, cap_rate; ppe_revaluation: replacement_cost, accumulated_depreciation; biological_asset: expected_price, quantity, costs_to_sell; residual_income: book_value, net_income, cost_equity; justified_pb: roe, cost_equity, growth_rate; relief_from_royalty: revenue, royalty_rate, discount_rate, periods; mpeem: cash_flows, contributory_charges, discount_rate; with_without: with_cash_flows, without_cash_flows, discount_rate; recoverable_amount: fair_value_less_costs_to_dispose, value_in_use; liability_fulfilment: fulfilment_costs, mark_up, discount_rate; inventory_residual: selling_price, costs_to_complete, profit_allowance; development_residual: gross_development_value, development_costs, developer_profit. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
noiNoNet operating income of the property (IAS 40).
roeNoReturn on equity (decimal).
claimsNoOrdered claims [{name, amount, priority}] for a waterfall.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
mark_upNoReasonable mark-up on fulfilment costs (decimal, IVS 220 Bottom-Up).
periodsNoNumber of periods n (>=1).
revenueNoBase-year revenue in reporting currency.
cap_rateNoCapitalisation rate as a decimal (0.06 = 6%).
net_debtNoTotal debt minus cash and equivalents.
quantityNoNumber of units (biological assets).
segmentsNoSegments [{name, value}] for a sum-of-the-parts.
book_valueNoBook value of equity in reporting currency.
cash_flowsNoProjected cash flows in reporting currency, indexed t=1..n.
net_incomeNoNet income in reporting currency.
trust_cashNoSPAC trust cash available for redemption.
cost_equityNoCost of equity as a decimal (0.12 = 12%).
growth_rateNoPeriodic growth rate as a decimal (0.03 = 3%).
royalty_rateNoRoyalty rate as a decimal (0.05 = 5% of revenue).
value_in_useNoValue in use in reporting currency.
costs_to_sellNoIncremental costs to sell / dispose (IAS 41).
discount_rateNoDiscount rate as a decimal (0.10 = 10%); pre-tax when method=viu_pre_tax.
selling_priceNoEstimated selling price of the finished inventory (IVS 230 top-down).
carrying_valueNoCarrying amount before the test.
expected_priceNoExpected market price per biological-asset unit (IAS 41).
purchase_priceNoConsideration transferred in reporting currency.
with_cash_flowsNoAfter-tax cash flows with the asset in use (IVS 210 with-and-without).
developer_profitNoRequired developer's profit/risk allowance (IVS 410).
enterprise_valueNoEnterprise value distributed across claims.
fulfilment_costsNoCosts required to fulfil the performance obligation per period (IVS 220 Bottom-Up).
holding_discountNoHolding-company discount as a decimal.
profit_allowanceNoEstimated profit allowance on the completion/disposal effort.
redemption_priceNoSPAC redemption price per share.
replacement_costNoDepreciated-replacement-cost gross value of PP&E (IAS 16).
costs_to_completeNoRemaining costs to complete work-in-process inventory (IVS 230).
development_costsNoAll known/anticipated costs to complete the development.
shares_outstandingNoShares outstanding.
tangible_assets_fvNoFair value of tangible assets.
without_cash_flowsNoAfter-tax cash flows absent the asset (IVS 210 with-and-without), aligned with with_cash_flows.
contributory_chargesNoContributory-asset charges (economic rent) per period, aligned with cash_flows (IVS 210 MPEEM).
net_realisable_valueNoEstimated NRV in reporting currency.
gross_development_valueNoAnticipated value of the completed development (IVS 410 residual method).
accumulated_depreciationNoAccumulated depreciation to deduct (IAS 16).
identified_intangibles_fvNoFair value of separately identified intangibles.
fair_value_less_costs_to_sellNoFV less costs to sell in reporting currency.
fair_value_less_costs_to_disposeNoFVLCD in reporting currency.
fair_value_net_identifiable_assetsNoFair value of net identifiable assets.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: no defaults are applied, and an unknown method, missing input, or extra field returns an error envelope with code INVALID_ARGUMENT rather than raising. It does not discuss magnitude/precision of results, but with annotations plus an output schema that gap is minor.

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

Conciseness4/5

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

Front-loaded correctly: purpose, then routing guidance, then the method-to-inputs table. The length is justified by 22 methods and 46 parameters, and every clause carries information, but the single run-on sentence with semicolon-delimited clauses is hard to scan and could be structured as a list.

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

Completeness5/5

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

For a high-complexity dispatcher with an output schema already present, the description supplies the two things an agent actually needs: the method enum's input contract and the strict-failure behavior. Nothing required to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so per-field meanings are already documented and the baseline would be 3. The description exceeds that by mapping each of the 22 enum methods to its exact required input set (e.g. 'impairment_viu: carrying_value, value_in_use'), which is cross-parameter semantics the schema cannot express — essential given 46 optional-looking fields.

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

Purpose5/5

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

Opens with a specific verb+resource ('IFRS/HKFRS measurement engine') and enumerates the exact measurement domains covered (goodwill/PPA, IAS 36 impairment, IAS 40 investment property, IAS 16 revaluation, IAS 41 biological assets, residual income, etc.). It explicitly names sibling tools it is not (calculate_dcf for going-concern cash flow, calculate_market_multiple for peer multiples), so an agent can route without opening schemas.

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

Usage Guidelines5/5

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

'Use this for accounting-basis measurement of assets and equity; for going-concern cash flow use calculate_dcf and for peer multiples use calculate_market_multiple' gives an explicit when-to-use plus named alternatives and the condition that selects each. It also states the invocation contract ('supply exactly one method with its declared inputs'), removing ambiguity about how to call it.

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

calculate_sector_metricsSector-specific operating metricsA
Read-onlyIdempotent
Inspect

Sector-metric engine. Compute the metrics that anchor valuation in specific industries: SaaS (ARR, NRR, magic number, Rule of 40), marketplaces (take rate, GMV multiple), lending (LTV/CAC), and crypto (NVT, Metcalfe). It returns operating metrics, not a valuation; use them as inputs to calculate_market_multiple or calculate_dcf. Methods: ltv: arpu, gross_margin, churn_rate; cac: sales_marketing_expense, new_customers; arr: subscription_values; nrr: starting_revenue, ending_revenue, expansion_revenue; magic_number: net_new_arr, sales_marketing_expense_prior; rule_of_40: growth_rate, profit_margin; take_rate: revenue, gmv; gmv_multiple: gmv, ev_gmv_multiple; retention: retained_customers, starting_customers; trl: market_size, market_share, margin, exit_multiple, trl_discount; break_even: fixed_costs, asp, variable_cost; gross_margin: asp, variable_cost; token: transaction_volume, price_per_tx, velocity, supply; nvt: market_cap, transaction_volume; metcalfe: n, coefficient. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNode/participant count n (>=0).
aspNoAverage selling price per unit.
gmvNoGross merchandise value in reporting currency.
arpuNoAverage revenue per user per period.
marginNoOperating margin as a decimal.
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
supplyNoToken supply.
revenueNoBase-year revenue in reporting currency.
velocityNoToken velocity.
churn_rateNoPeriodic churn rate as a decimal.
market_capNoMarket capitalisation.
coefficientNoScaling coefficient (Metcalfe).
fixed_costsNoPeriod fixed costs.
growth_rateNoPeriodic growth rate as a decimal (0.03 = 3%).
market_sizeNoTotal addressable market in reporting currency.
net_new_arrNoNet new ARR in the period.
gross_marginNoGross margin as a decimal (0.80 = 80%).
market_shareNoAchievable market share as a decimal.
price_per_txNoValue per transaction.
trl_discountNoTechnology-readiness risk discount as a decimal.
exit_multipleNoExit multiple on the final flow, e.g. 8.0 for 8x.
new_customersNoCustomers acquired in the period.
profit_marginNoProfit margin as a decimal.
variable_costNoVariable cost per unit.
ending_revenueNoRevenue from the cohort at period end.
ev_gmv_multipleNoEV/GMV multiple.
starting_revenueNoRevenue from the cohort at period start.
expansion_revenueNoExpansion revenue from the cohort.
retained_customersNoCustomers retained at period end.
starting_customersNoCustomers at period start.
transaction_volumeNoTransaction volume for the period.
subscription_valuesNoSubscription revenue per customer.
sales_marketing_expenseNoSales and marketing spend for the period.
sales_marketing_expense_priorNoPrior-period sales and marketing spend.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive safety, and the description adds substantial extra behavior: it warns that exactly one method must be supplied with its declared inputs (no defaults) and that unknown methods, missing inputs, or extra fields yield an INVALID_ARGUMENT error envelope rather than raising. This is genuinely useful call-time behavior not derivable from annotations.

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

Conciseness4/5

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

Front-loads purpose, then method-to-input mapping, then error semantics. The method list is dense and long but each entry carries required information; some parenthetical metric glosses could be trimmed without loss.

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

Completeness5/5

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

For a 34-param, one-required-field dispatcher with an output schema, the description covers everything the agent needs: method enumeration, per-method required inputs, single-method constraint, and error behavior. Return-value detail is correctly left to the output schema.

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

Parameters5/5

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

Although schema coverage is 100%, the description supplies the critical cross-parameter mapping the schema cannot express: which inputs each method value requires (e.g. ltv needs arpu/gross_margin/churn_rate; nvt needs market_cap/transaction_volume). The schema itself defers to the description for this ('the tool description lists the exact inputs each value requires').

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

Purpose5/5

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

States a specific verb+resource ('compute the metrics that anchor valuation') and enumerates the concrete industry domains and metrics covered (ARR, NRR, take rate, NVT, etc.). It explicitly differentiates from siblings by declaring it returns operating metrics, not a valuation.

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

Usage Guidelines4/5

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

Clearly routes the agent: the outputs are 'inputs to calculate_market_multiple or calculate_dcf,' which distinguishes this tool from the valuation siblings. It does not give explicit exclusion criteria for individual methods, but the when-to-use context is clear.

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

calculate_structured_productStructured product and derivative pricingA
Read-onlyIdempotent
Inspect

Structured-product engine. Value HKEX-listed and OTC structures: CBBCs, derivative and inline warrants, equity-linked notes and investments, autocallables, accumulators and decumulators, credit-linked notes, TRS, and CFDs. Use this for equity-linked and credit-linked payoff structures; for a plain option or warrant use calculate_option, for a convertible or exchangeable bond use calculate_convertible_bond, and for a vanilla bond or term structure use calculate_fixed_income. Methods: cbbc: notional, spot, strike, barrier, barrier_type, maturity, risk_free, volatility, option_type; cbbc_residual: notional, spot, call_price, entitlement, barrier, barrier_type, maturity, risk_free, volatility, option_type; derivative_warrant: notional, spot, strike, maturity, risk_free, volatility, average_type, option_type; inline_warrant: notional, spot, lower_strike, upper_strike, maturity, risk_free, volatility, payout; inline_warrant_avg: notional, spot, lower_strike, upper_strike, maturity, risk_free, volatility, payout, fixing_days; eli/eln: notional, spot, strike, maturity, risk_free, volatility, coupon_rate; autocallable: notional, spot, knock_out_level, observation_dates, coupon_rate_structured, maturity, risk_free, volatility; credit_linked_note: notional, credit_spread, recovery, maturity, risk_free, coupon_rate_structured; accumulator/decumulator: notional, spot, strike, knock_out_level, observation_dates, risk_free, volatility; trs: notional, spot, maturity, risk_free, dividend_yield; cfd: notional, spot, strike, maturity, risk_free. Supply exactly one method with its declared inputs (no defaults). An unknown method, a missing input, or an extra field returns an error envelope (code INVALID_ARGUMENT) instead of raising.

ParametersJSON Schema
NameRequiredDescriptionDefault
spotNoSpot price of the underlying (or FX rate for garman_kohlhagen).
methodYesFormula to apply; the tool description lists the exact inputs each value requires.
payoutNoFixed payout when the range condition is met.
strikeNoStrike or exercise price in the same currency as spot.
barrierNoKnock level for barrier_first_passage.
maturityNoTime to expiry in years (0.5 = six months); > 0.
notionalNoContract notional/face amount in reporting currency.
recoveryNoRecovery rate in [0,1].
risk_freeNoContinuously-compounded risk-free rate (decimal).
call_priceNoCBBC call price (mandatory-call trigger level).
volatilityNoAnnualized volatility (decimal, 0.30 = 30%); > 0.
coupon_rateNoAnnual coupon rate (decimal).
entitlementNoCBBC entitlement: units of underlying per contract.
fixing_daysNoNumber of closing fixings averaged for settlement (>=1).
option_typeNoOption right.
average_typeNoAveraging convention.
barrier_typeNoBarrier direction.
lower_strikeNoLower strike of the range.
upper_strikeNoUpper strike of the range.
credit_spreadNoCredit spread over the risk-free rate (decimal).
dividend_yieldNoContinuous dividend yield (decimal).
knock_out_levelNoKnock-out level for autocallables and accumulators.
observation_datesNoObservation dates in years for path-dependent products.
coupon_rate_structuredNoConditional coupon rate (decimal).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoError detail, present only when status='error'.
stepsNoOrdered computation steps, when the method reports them.
valueNoPrimary result: a number for scalar methods, an object for valuation methods.
methodNoMethod or tool name that produced the result.
statusYes'ok' on success, 'error' on failure.
tickerNoTicker the result pertains to, when applicable.
assumptionsNoInputs and assumptions used, echoed for traceability.
formula_refNoFormula or standards reference for the method.
data_timestampNoISO-8601 UTC timestamp of the underlying data, when fetched.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive; the description goes further by disclosing the dispatch contract (one method, no defaults) and the failure mode ('unknown method, missing input, or extra field returns an error envelope code INVALID_ARGUMENT instead of raising'). That error-shape disclosure materially changes how an agent handles failures and is not available anywhere else.

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

Conciseness4/5

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

Front-loads purpose, then routing, then the method/input table — a sensible order. The method listing is dense but earns its place given 13 enum values and 24 optional fields; a small amount of repetition ('notional, spot, maturity, risk_free' recurs) keeps the per-method rows self-contained.

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

Completeness5/5

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

An output schema exists, so return values need no explanation. With purpose, sibling routing, method-to-input mapping, strictness rules, and error behavior all covered, an agent has everything needed to call this 24-parameter dispatcher correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so per-parameter units are already documented and the baseline is 3. The description exceeds that by mapping each of the 13 method values to its exact required input set, information the flat schema cannot express (the enum description even defers to it). It stops short of a 5 because per-parameter units/edge semantics are left entirely to the schema.

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

Purpose5/5

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

States a specific verb ('Value') and enumerates the exact instrument classes it covers (CBBCs, derivative/inline warrants, ELNs/ELIs, autocallables, accumulators, CLNs, TRS, CFDs). It explicitly contrasts itself with named siblings (calculate_option, calculate_convertible_bond, calculate_fixed_income), so an agent can route without opening any schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('equity-linked and credit-linked payoff structures') plus three named alternatives with the condition that selects each, and a dispatch rule ('supply exactly one method with its declared inputs'). Nothing about tool selection is left to inference.

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

Tool Schema Changelog

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

  1. 14 tool updates
    • First observedcalculate_actuarial_pv
    • First observedcalculate_convertible_bond
    • First observedcalculate_credit_loss
    • First observedcalculate_dcf
    • First observedcalculate_discount_rate
    • First observedcalculate_expected_value
    • First observedcalculate_fair_value_adjustment
    • First observedcalculate_fixed_income
    • First observedcalculate_loss_making_company
    • First observedcalculate_market_multiple
    • First observedcalculate_option
    • First observedcalculate_residual
    • First observedcalculate_sector_metrics
    • First observedcalculate_structured_product

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables quantitative portfolio tail-risk analysis, option Greeks, Monte Carlo stochastic simulations, fixed-income duration/convexity, and Nelson-Siegel yield-curve interpolation through MCP tools.
    7
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables users to compute European option prices and sensitivity metrics, run Monte Carlo GBM simulations, calculate historical/parametric VaR/CVaR, evaluate bond duration and convexity, and interpolate Nelson-Siegel yield curves through MCP.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides startup valuation methods with auditable calculations, readiness checks, and explanations through MCP tools.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Financial model factory MCP server: turns a spec into a live-formula Excel workbook. 14 templates (LBO, DCF, M\&A, IPO, restructuring, project finance, NPL, structured credit, 3-statement) with every cell formulated and every number source-traced to its document page.
    2
    Academic Free v1.1
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.