PoliErgaleio
Server Details
Bilingual Cyprus financial tools for income tax, mortgages, pensions, retirement, budgeting and portfolios. Public calculators require no account. Six saved-calculation tools require authorization to your own PoliErgaleio account. OAuth clients currently need operator-approved onboarding; password-protected saves must be opened on poliergaleio.com. Documentation: https://poliergaleio.com/developers
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 25 tools
The tools mostly target clearly distinct finance tasks, with strong separation between parsers, calculators, and saved-calculation CRUD. A few neighboring areas could still be confused in practice, such as income-tax estimation versus director-remuneration optimization, or portfolio analysis versus investment-vehicle comparison, but the descriptions provide enough guidance.
Names follow a consistent snake_case verb_noun convention throughout: calculate_*, compare_*, simulate_*, parse_*, save/list/load/update/delete_*, and get_*. The verbs vary appropriately by action while the overall pattern remains predictable.
The 25-tool surface is at the heavy end for a calculator suite, even though each tool appears to have a distinct role. The count is driven by many separate finance domains plus persistence and parsing tools, making navigation somewhat burdensome for an agent.
The suite covers a broad Cyprus personal-finance lifecycle: tax, pensions, mortgages, investments, budgeting, insurance, parsing, reference data, and saved-calculation CRUD. Some peripheral gaps remain, such as no explicit encrypted-save creation tool and limited explicit export or calculator-discovery operations, but core workflows are well covered.
Available Tools
25 toolsanalyze_portfolioAInspect
Analyses an investment portfolio from its transaction history: net invested capital, current value, absolute return, chain-linked time-weighted return (TWR), CAGR on initial invested capital, per-sub-portfolio breakdown and allocation shares, with multi-currency support via per-transaction FX rates. Use to analyze actual portfolio ledgers or current holdings and valuation data. Require real transactions/holdings and a current valuation for each holding; require FX rates where currencies differ. TWR needs a valuation immediately before each later external cash flow and at the end date; report null with its reason when absent. Equal and opposite same-day movements between sleeves in the base currency net to an internal transfer for combined TWR; confirm both legs before using that treatment. Missing acquisition cost may use the disclosed performance-from-today behavior. Never create transactions or holdings records.
| Name | Required | Description | Default |
|---|---|---|---|
| asOfDate | No | Optional ISO date (YYYY-MM-DD) used as the CAGR end date. Defaults to today. | |
| baseCurrency | Yes | Reporting currency (e.g. EUR). Transactions in another currency require fxRate. | |
| portfolioName | No | Optional label for the portfolio. | |
| subPortfolios | Yes | One entry per account, broker or strategy sleeve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cagr | No | |
| series | No | |
| totalGain | No | |
| assumptions | No | |
| baseCurrency | No | |
| currentValue | No | |
| portfolioName | No | |
| subPortfolios | No | |
| totalInvested | No | |
| absoluteReturn | No | |
| firstDepositDate | No | |
| timeWeightedReturn | No | |
| totalInitialInvested | No | |
| twrUnavailableReason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so: it states the read-only boundary ('Never create transactions or holdings records'), defines the null-and-reason behavior when pre-flow valuations are absent, explains internal-transfer netting for combined TWR and the requirement to confirm both legs, and discloses the 'performance-from-today' fallback when acquisition cost is missing. These are non-obvious edge-case behaviors an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and output list, then prerequisites, then edge cases — a sensible ordering. The middle-to-end sentences are dense run-ons stacking several conditional behaviors, which costs some scanability, but almost no content is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-sleeve calculation tool, the description covers inputs, prerequisites, and the trickiest modeling decisions, and an output schema exists so return values needn't be spelled out. A minor remaining gap is the absence of any note on failure modes or partial results beyond the TWR-null case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; the description earns above that by tying FX rates to per-transaction granularity and explaining that TWR requires a valuation immediately before each later external cash flow and at the end date — semantics the 'Value' enum and valuation items alone don't convey. It does not further clarify asOfDate or baseCurrency beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Analyses an investment portfolio from its transaction history') and then enumerates the exact outputs: net invested capital, current value, absolute return, TWR, CAGR, per-sub-portfolio breakdown and allocation shares. This is clearly distinguishable from siblings like parse_portfolio_csv or compare_investment_vehicles, which parse or compare rather than compute portfolio performance metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit applicability condition: 'Use to analyze actual portfolio ledgers or current holdings and valuation data,' and follows with prerequisites (real transactions/holdings, a current valuation per holding, FX rates where currencies differ). What it lacks is sibling routing — it never says to use parse_portfolio_csv first to obtain the ledger, or that compare_investment_vehicles handles cross-vehicle comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_mortgage_statementAInspect
Forensic audit of a mortgage statement: replays the loan day by day and grid-searches the bank's interest convention (Actual/365, Actual/360 or Actual/Actual day count; monthly, semi-annual or annual capitalisation; exact or 2-decimal daily rounding), ranks candidates by RMS error against the bank's own running balance, and reports the interest overcharge implied by the best fit. Use to audit an actual mortgage statement. Require statement rows, at least one usable interest rate and balance checkpoints sufficient to fit the calculation. Reuse only extracted facts; inferred day-count and capitalization conventions are estimates, not confirmed bank terms.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | Parsed statement rows in chronological order. At least one row must carry ratePct. | |
| topN | No | How many ranked candidate conventions to return (default 3). | |
| rules | No | Skip the grid search and test one explicit convention. | |
| includeRowDetail | No | Include the per-row expected balance / delta / flag detail (can be large). |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| rmsDelta | Yes | |
| fitStatus | Yes | |
| periodEnd | Yes | |
| rowDetail | No | |
| finalDelta | Yes | |
| assumptions | Yes | |
| flaggedRows | Yes | |
| periodStart | Yes | |
| bankInterest | Yes | |
| bestFitLabel | Yes | |
| bestFitRules | Yes | |
| observations | Yes | |
| rowsAnalyzed | Yes | |
| netOvercharge | Yes | |
| expectedInterest | Yes | |
| rankedCandidates | Yes | |
| netOverchargeRange | Yes | |
| equivalentCandidates | Yes | |
| expectedInterestRange | Yes | |
| equivalentCandidateCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it explains the internal fitting procedure, that results are ranked by RMS error, and crucially that inferred day-count and capitalisation conventions are estimates rather than confirmed bank terms. It omits runtime/cost expectations for a grid search over up to 2000 rows, which keeps it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core mechanism, then prerequisites, then the accuracy caveat — a sensible ordering. The opening sentence is long and clause-heavy, but every clause describes a distinct part of the computation rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described. The description covers inputs, fitting methodology, and interpretive limits, which is enough for a nested-schema, four-parameter analytical tool. A note on how confidence degrades with few checkpoints would have completed it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description still adds real meaning by stating that the rows must be chronological with at least one ratePct and that balance checkpoints are what the fit uses. Those constraints are not obvious from the schema alone, so it edges above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ("forensic audit of a mortgage statement") and then specifies the mechanism: day-by-day replay, grid search over day-count/capitalisation/rounding conventions, RMS ranking, and overcharge reporting. This is clearly distinguishable from the sibling parse_mortgage_statement_text, which only extracts data, and from simulate_mortgage, which projects rather than audits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use to audit an actual mortgage statement" plus explicit preconditions (statement rows, at least one usable rate, sufficient balance checkpoints) tells the agent when the tool applies and what makes an input valid. It stops short of naming the alternative parse tool or saying when not to use it, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_cyprus_capital_gainsAInspect
Calculates Cyprus Capital Gains Tax on an immovable property disposal using 2025 or 2026 rules, including CPI indexation, year-specific lifetime exemptions, the 20% CGT rate and the 0.4% property transfer fee. Use for Cyprus capital-gains tax on an immovable-property sale. Obtain the actual acquisition price and year, disposal tax year, sale price and property type; ask for missing essentials. Tax-year rules default to 2026; supply 2025 for a disposal in that year. Currency defaults to EUR only as a modelling convention. Omission of isFirstDisposal means no lifetime exemption is claimed; do not infer eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | No | Disposal tax year; defaults to the current 2026 rules and selects year-specific lifetime allowances. | 2026 |
| currency | No | EUR (default) or CYP for pre-2008 purchases (converted at 0.585274). | EUR |
| agentFees | No | Estate agent / legal fees deducted from the sale price, EUR. | |
| salePrice | Yes | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| propertyType | Yes | Drives the year-specific lifetime exemption: 2025 general/plot €17,086, qualifying main residence €85,430 and agricultural land €25,629; 2026 general/plot €30,000, qualifying main residence €150,000 and agricultural land €50,000; other €0. | |
| acquisitionYear | Yes | Calendar year the property was acquired. | |
| isFirstDisposal | No | Whether the lifetime first-disposal exemption is being claimed. Omission means no exemption is claimed. | |
| acquisitionPrice | Yes | Purchase price in the original currency. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| assumptions | Yes | |
| netProceeds | Yes | |
| taxableGain | Yes | |
| totalTaxDue | Yes | |
| netSalePrice | Yes | |
| taxExemption | Yes | |
| capitalGainsTax | Yes | |
| currentValuation | Yes | |
| acquisitionPriceEUR | Yes | |
| propertyTransferFee | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses year-specific rule selection, the 20% CGT rate, CPI indexation, the 0.4% transfer fee, the EUR modelling-convention default, and the non-inference rule for first-disposal eligibility. It stops short of describing error behavior or result shape, but an output schema exists to cover returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense and front-loaded, with the core purpose in the first clause and defaults and pitfalls after. There is mild redundancy between the opening sentence and 'Use for Cyprus capital-gains tax on an immovable-property sale', which restates the purpose without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tax calculator with full schema coverage and an output schema, the description supplies everything an agent needs: when to use, defaults, year selection, exemption-claim semantics, and instructions to elicit missing required inputs rather than guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 3 is the baseline; the description goes slightly beyond it by flagging which inputs are essential to collect (acquisition price/year, disposal tax year, sale price, property type) and by framing the currency default as a modelling convention rather than a real-world assumption. The remaining parameters (agentFees, isFirstDisposal) are left to the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (calculates Cyprus Capital Gains Tax on an immovable property disposal) and pins the scope to 2025/2026 rules. This is unambiguously distinct from siblings like calculate_cyprus_income_tax, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for Cyprus capital-gains tax on an immovable-property sale' and instructs the agent to ask for missing essentials rather than fabricate values. It also clarifies the default-to-2026 rule and that omission of isFirstDisposal means no exemption is claimed. It does not name an alternative tool to use when the disposal is outside Cyprus, but no sibling is close enough to be a likely confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_cyprus_income_taxAInspect
Calculates Cyprus income tax, employee/self-employed SI, GESY and take-home pay. Employee SI and first-employment relief use qualifying employment remuneration only; rent does not increase employee SI. GESY uses the shared €180,000 personal ceiling. Use for a Cyprus resident or non-resident employee or sole proprietor tax estimate. Before calling, confirm whether a stated salary is monthly or annual and confirm employment category (private, civil or self-employed); do not infer either. Supply gross annual salary in EUR (use explicit 0 for self-employed-only cases); self-employed calculations also need turnover and occupational category. Identify when 2026 tax rules are a default rather than a user-supplied year. Optional incomes, deductions, tax year and eligibility facts must come from the user. Employee Social Insurance applies to qualifying employment remuneration only; passive rental income does not increase employee SI. Article 8(21A)/(23A) exemptions are based on qualifying employment remuneration only; GESY's €180,000 annual personal ceiling is shared across salary, self-employment, pension and income-earner categories. Never infer exemption eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| donations | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| evExpense | No | ||
| interestPaid | No | Interest paid on rental property. | |
| propertyYear | No | Year the property was acquired. | |
| rentalIncome | No | Annual rental income in EUR. | |
| salaryIncome | Yes | Gross annual salary in EUR. | |
| spouseIncome | No | ||
| taxesPrepaid | No | ||
| exemptionType | No | Minds in Cyprus Art. 8(21B), applied only when eligibility conditions are met. | |
| isNonDomicile | No | Cyprus non-domicile status; exempts rental and deposit-interest SDC where applicable. | |
| maritalStatus | No | ||
| pensionIncome | No | ||
| propertyPrice | No | Property price for wear-and-tear allowance. | |
| providentFund | No | Total provident/PEPP fund contribution in EUR. | |
| dividendIncome | No | Annual dividend income in EUR. | |
| employmentType | Yes | 'private' for private sector (8.8% SI), 'civil' for civil service (4.45% SI), 'self-employed' for sole proprietor (16.6% SI on deemed/actual, 4% GESY). Required; the API does not assume a category. | |
| tradeUnionSubs | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| hasRentalIncome | No | Whether rental income applies. | |
| rentPaidPrimary | No | ||
| mindsEligibility | No | Facts used to validate Minds in Cyprus Art. 8(21B). Omit or leave incomplete to receive no 8(21B) deduction. | |
| hasDividendIncome | No | Whether dividend income applies. | |
| legislationVersion | No | Tax/legislation year. Supported: 2025, 2026. | |
| cryptoTradingIncome | No | Annual taxable cryptoasset trading gains in EUR. From tax year 2026 the amount is taxed at 8% separately from progressive PIT; do not include non-taxable investment disposals. | |
| housingInterestPaid | No | ||
| selfEmployedDetails | No | Sole-proprietor schedule: net profit = turnover − expenses − capitalAllowances − lossBroughtForward (floor 0). | |
| homeInsurancePremium | No | ||
| innovativeInvestment | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| numDependentChildren | No | ||
| depositInterestIncome | No | Annual deposit interest in EUR. Standard interest is subject to 17% SDC for Cyprus-domiciled individuals, rather than progressive PIT; GESY still applies. | |
| isDividendNonDomicile | No | Non-dom status for dividends. | |
| energyEfficiencyExpense | No | ||
| firstEmploymentDeduction | No | ||
| qualifiesForFirstEmployment | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| gesy | Yes | |
| series | No | |
| incomeTax | Yes | |
| netIncome | Yes | |
| netSalary | Yes | |
| assumptions | Yes | |
| grossIncome | Yes | |
| mindsDeduction | Yes | |
| socialInsurance | Yes | |
| totalDeductions | Yes | |
| chargeableIncome | Yes | |
| effectiveTaxRate | Yes | |
| mindsEligibility | Yes | |
| selfEmployedHRDA | Yes | |
| availableDeductions | Yes | |
| specialDefenseContribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it warns that 2026 rules are a default that must be flagged, states that optional inputs must come from the user, and forbids inferring exemption eligibility. It omits nothing obviously safety-critical for a pure calculator, though it adds no note on computational assumptions/rounding or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and preconditions, which is good, but it repeats itself: the qualifying-remuneration/rent rule for employee SI and the €180,000 GESY ceiling are each stated twice in near-identical phrasing. Trimming the duplication would lose no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 33-parameter, nested-object calculator with an output schema, the description supplies the required inputs, the employment-category semantics, the default-year caveat and the no-inference rules. Return values are covered by the output schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 64% on 33 params, and the description compensates by explaining the required path: gross annual salary in EUR with explicit 0 for self-employed-only cases, plus turnover and occupational category for sole proprietors. It adds real meaning for the two required parameters but leaves many optional deduction/relief fields (evExpense, energyEfficiencyExpense, homeInsurancePremium) entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculates) with a precise set of outputs: Cyprus income tax, employee/self-employed SI, GESY and take-home pay. This clearly separates it from siblings like calculate_cyprus_capital_gains or calculate_cyprus_state_pension, which cover different tax domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes usage to 'a Cyprus resident or non-resident employee or sole proprietor tax estimate' and adds hard prerequisites: confirm monthly vs annual salary and employment category, do not infer either. It does not name sibling alternatives or when-not conditions, but the applicability conditions for calling are unusually concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_cyprus_state_pensionAInspect
Estimates the Cyprus state (contributory) pension amount at retirement using official contribution schedules and current 2026 pension income-tax bands, based on accumulated insurance units and contribution history. Use to estimate contributory Cyprus state pension entitlement and amount at retirement. Results apply the current 2026 pension income-tax bands; projected contribution amounts use the published SI rate increases in 2029, 2034 and 2039. Reuse supplied facts and ask only for missing essentials: mode and retirement age are always required; quick mode also needs current age, years worked and total insurance units; advanced mode needs the actual non-empty yearly contribution record. Ask for dependants or state the zero-dependants assumption before presenting a personalized result. Never infer contribution history. Units are per calendar year; a legacy year-to-units map is accepted.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Calculation mode. | |
| currentAge | No | Current age (quick mode only). | |
| dependents | No | Number of dependents (spouse/children); raises the basic pension multiplier. | |
| yearlyUnits | No | Advanced mode only. Insurance units earned per calendar year, e.g. [{"year":2003,"units":5.2}]. Units per year must be between 0 and the statutory maximum for that year (about 5.3-6.0; 6.0 for years after 2026). A legacy object map {"2003": 5.2} is also accepted. Years worked and total units are derived from this array, so yearsWorked/totalInsuranceUnits are ignored in advanced mode. | |
| yearsWorked | No | Actual years with insurance contributions (quick mode); do not infer from age or employment duration. | |
| retirementAge | Yes | Planned retirement age. | |
| totalInsuranceUnits | No | Actual accumulated Cyprus insurance units/points (quick mode); do not infer from salary or years worked. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| incomeTax | Yes | |
| monthlyNet | Yes | |
| totalUnits | Yes | |
| assumptions | Yes | |
| weeklyGross | Yes | |
| yearsWorked | Yes | |
| ghsDeduction | Yes | |
| qualifiesForPension | Yes | |
| basicPensionComponent | Yes | |
| minimumPensionApplied | Yes | |
| estimatedAnnualPension | Yes | |
| estimatedMonthlyPension | Yes | |
| earningsRelatedComponent | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses key assumptions: 2026 tax bands, projected SI rate increases in 2029/2034/2039, dependants handling, and anti-inference of contribution history. It does not state determinism, error behavior, or side effects (though a calculator is implicitly pure), leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage, but the first sentence and the second sentence redundantly restate what the tool estimates. The guidance is otherwise dense and earns its place, but trimming the duplication would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, conditional requirements, no annotations, and an existing output schema, the description covers modes, required inputs, assumptions, and anti-inference rules well. It does not elaborate on edge cases like out-of-range retirementAge or on the exact nature of the returned result, though the output schema handles the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds cross-parameter semantics beyond the schema: mode and retirementAge are always required; quick mode needs currentAge, yearsWorked, totalInsuranceUnits; advanced mode needs yearlyUnits. It also reinforces that yearsWorked/totalInsuranceUnits must not be inferred and that legacy unit maps are accepted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (estimates), resource (Cyprus state contributory pension amount at retirement), and the exact basis (insurance units, contribution history, 2026 tax bands). This clearly distinguishes it from siblings like get_pension_reference_data, parse_pension_statement, and run_retirement_stress_test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Use to estimate contributory Cyprus state pension entitlement'), and provides detailed conditional guidance for quick vs advanced mode, required fields per mode, and the dependants assumption. It also instructs never to infer contribution history and to ask only for missing essentials.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_cyprus_unemployment_benefitAInspect
Estimates the Cyprus unemployment benefit using statutory percentage-point dependant additions and a capped earnings-related supplement, and separately assesses entitlement when qualifying facts are supplied. Use to estimate the conditional Cyprus unemployment benefit amount and separately assess entitlement. The basic rate is 60%, plus 20 percentage points for a dependent spouse and 10 percentage points per dependent child or other dependant (up to three); the earnings-related supplement is 50% of supplementary insurance earnings, capped at one weekly basic insurable earning. Require the claim date, relevant-year insurable earnings and dependants to estimate an amount. Ask for qualifying insurance history, employee status, unemployment registration and availability for work before claiming entitlement; when those facts are missing, state that entitlement is undetermined and ask each missing follow-up question. Do not infer those facts from annual earnings.
| Name | Required | Description | Default |
|---|---|---|---|
| isEmployee | No | Whether the claimant was insured as an employee rather than self-employed. | |
| applicationDate | Yes | Actual claim date as YYYY-MM-DD. | |
| dependentSpouse | Yes | Whether the claimant has a dependent spouse not in paid work; ask if unknown. | |
| dependentChildren | Yes | Actual number of dependent children or other dependants; ask if unknown (benefit calculation caps at 3). | |
| annualGrossEarnings | Yes | Actual gross insurable earnings in EUR for the contribution year selected by applicationDate. | |
| registeredUnemployed | No | Whether registered unemployed with the competent offices. | |
| weeksSinceFirstInsurance | No | Weeks elapsed since first insurance; at least 26 required. | |
| actualBasicInsurancePoints | No | Actual paid basic insurance points accumulated by claim date; 0.5 required for entitlement. | |
| capableAndAvailableForWork | No | Whether capable of and available for work during the claim. | |
| relevantYearInsurancePoints | No | Actual plus assimilated insurance points in the relevant contribution year; at least 0.39 required. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| eligible | Yes | |
| assumptions | Yes | |
| weeklyBenefit | Yes | |
| monthlyBenefit | Yes | |
| eligibilityStatus | Yes | |
| dependentSupplement | Yes | |
| maxEntitlementWeeks | Yes | |
| missingEligibilityFacts | Yes | |
| relevantContributionYear | Yes | |
| earningsRelatedSupplement | Yes | |
| failedEligibilityConditions | Yes | |
| missingEligibilityQuestions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the rate structure (60% basic, +20pp spouse, +10pp per dependant capped at three), the supplement formula and its cap at one weekly basic insurable earning, and the graceful-degradation rule of reporting 'entitlement undetermined' plus asking each missing question. This is well beyond what the schema reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The formula and guardrails are front-loaded and useful, but the opening sentence and the following 'Use to estimate…' sentence restate the same purpose, and the eligibility checklist is repeated across two sentences. Modest redundancy costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter calculator with an output schema, this is complete: the description supplies the domain rules, the required-input story, the eligibility criteria, and the missing-data behavior. Return values are covered by the output schema, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds genuine semantic value by explaining how parameters combine (percentage-point additions, per-dependant weighting, cap at three, the supplement being 50% of supplementary earnings). It does not, however, map every one of the ten parameters to its role, leaving some entitlement fields to the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (estimates) and resource (Cyprus unemployment benefit), and explicitly splits the tool into two functions: amount estimation and separate entitlement assessment. This distinguishes it clearly from sibling calculators such as calculate_cyprus_income_tax or calculate_cyprus_state_pension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions for the calculation path (claim date, relevant-year insurable earnings, dependants) and the entitlement path (insurance history, employee status, registration, availability for work). It also names a prohibition — 'Do not infer those facts from annual earnings' — and prescribes fallback behavior when facts are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_ev_savingsAInspect
Compares the annual running cost of an electric car against a petrol/diesel car in Cyprus, splitting charging between spare solar production, home grid electricity and public chargers, and reporting yearly savings and payback on the extra purchase cost. Use to compare EV and petrol/diesel running costs. Ask for actual annual distance, vehicle consumption, fuel price, charging shares and tariffs for each active charging source; when solar charging is selected, require available spare solar production. Reuse supplied facts and ask only for missing essentials. Omitted extra purchase cost means no payback estimate.
| Name | Required | Description | Default |
|---|---|---|---|
| evOther | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| iceOther | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| evRoadTax | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| fuelPrice | Yes | Fuel price in EUR per litre. | |
| iceRoadTax | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| iceService | No | Annual servicing cost of the petrol/diesel car, EUR. | |
| spareSolar | No | Spare solar production available for charging, kWh per year. | |
| evInsurance | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| extraEvCost | No | Extra purchase cost of the EV versus the petrol/diesel alternative, EUR. | |
| iceInsurance | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| iceOilChange | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| evConsumption | Yes | EV consumption in Wh per km (e.g. 170). | |
| homeGridShare | No | Share of home charging drawn from the grid, percent. | |
| annualDistance | Yes | Kilometres driven per year. | |
| iceConsumption | Yes | Petrol/diesel consumption in litres per 100 km. | |
| projectionYears | No | Horizon of the cumulative savings series (default 10). | |
| solarDirectShare | No | Share of home charging covered directly by solar, percent. | |
| chargingEfficiency | No | Wall-to-battery charging efficiency, percent (default 92). | |
| publicChargingPrice | No | Public charging price in EUR per kWh. | |
| gridElectricityPrice | No | Home electricity price in EUR per kWh. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| assumptions | Yes | |
| iceFuelCost | Yes | |
| homeGridCost | Yes | |
| paybackYears | Yes | |
| savingsByYear | Yes | |
| yearlySavings | Yes | |
| evEnergyAtWall | Yes | |
| homeGridEnergy | Yes | |
| solarDirectCost | Yes | |
| evAdditionalCosts | Yes | |
| evTotalAnnualCost | Yes | |
| excessSolarNeeded | Yes | |
| solarDirectEnergy | Yes | |
| iceAdditionalCosts | Yes | |
| iceTotalAnnualCost | Yes | |
| publicChargingCost | Yes | |
| publicChargingEnergy | Yes | |
| totalElectricityCost | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the conditional dependency (solar share requires spare solar production) and the output caveat that omitting extraEvCost suppresses the payback estimate. It does not describe the shape of the returned savings series, though an output schema exists to cover that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the computation and then the data-gathering rules. The sentence 'Use to compare EV and petrol/diesel running costs' largely restates the opening and is mild redundancy, but nothing else is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter calculator with an output schema, the description covers the collection policy, the conditional requirements, and the one output caveat, which is everything an agent needs to invoke it correctly. Units and defaults are handled by the schema, so no gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter meanings are already given; the description adds genuine value beyond that by explaining the cross-field condition (solarDirectShare > 0 requires spareSolar) and the optionality semantics of extraEvCost. It could have said more about how the three charging shares interact, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: compares annual running cost of an EV against a petrol/diesel car in Cyprus, with the charging split (solar, home grid, public) and outputs (yearly savings, payback on extra purchase cost). This clearly distinguishes it from siblings like compare_rent_vs_buy or compare_investment_vehicles without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: ask for annual distance, consumption, fuel price, charging shares and tariffs, and require spare solar production when solar charging is selected. It also says to reuse supplied facts and only ask for missing essentials. It does not name sibling alternatives or say when NOT to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_stock_optionsAInspect
Compares the Cyprus tax on an employee stock option exercise under the 2025 benefit-in-kind rules (progressive income tax) and the 2026 approved-scheme rules (flat 8% within caps), including the 2x salary annual cap and the €1m rolling 10-year lifetime cap. Use to compare Cyprus tax on an employee's share-option exercise. Require actual annual salary, share count, exercise and market prices, and user-confirmed approved-scheme status before any personalized calculation or call. If status is missing or unclear, ask one concise question first; do not infer it, call with an assumed status, or present option gain, tax, savings, or other personalized option figures before confirmation. Amounts are EUR and per-share prices are EUR/share.
| Name | Required | Description | Default |
|---|---|---|---|
| marketPrice | Yes | Market price per share at exercise, EUR. | |
| exercisePrice | Yes | Strike price per share, EUR. | |
| numberOfShares | Yes | Number of options being exercised. | |
| isApprovedScheme | Yes | Whether the plan has approved-scheme status under 2026 rules; ask the user and use only their explicit confirmation. Never infer or assume this value. | |
| annualGrossSalary | Yes | Gross annual salary in EUR (sets the marginal band and the 2x annual cap). | |
| prior10YearOptionIncome | No | Option income already used against the €1m rolling 10-year cap, EUR. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| tax2025 | Yes | |
| tax2026 | Yes | |
| totalGain | Yes | |
| taxSavings | Yes | |
| assumptions | Yes | |
| gainPerShare | Yes | |
| savingsPercentage | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure; it discloses the compared rule sets, the 2x salary annual cap, the €1m rolling 10-year cap, and the hard gate against presenting figures before status confirmation. It still does not explicitly say whether the tool is purely computational or has any side effects, leaving a small gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the comparison and the following sentences cover prerequisites and guardrails, so structure is good. However, 'Use to compare...' repeats the opening purpose and the confirmation rule is restated in multiple ways, making it longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tax calculator with 100% schema coverage and an output schema, the description supplies the rule context, caps, currency, and required confirmation gate. It is nearly complete, but without annotations it could explicitly state that the operation is a pure calculation with no persistence or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains all six parameters, including the optional prior10YearOptionIncome. The description reinforces salary/status meaning and currency but does not add parameter-level detail beyond the schema, and it omits any prose mention of the optional prior-income parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'compares', and a precise resource, 'Cyprus tax on an employee stock option exercise', naming the two rule regimes and caps. Although it does not name sibling tools, the stock-option scope is distinct from the other Cyprus tax calculators in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use ('to compare Cyprus tax on an employee's share-option exercise') and gives a clear precondition: require confirmed approved-scheme status and ask if missing rather than infer. It does not explicitly route to alternative sibling tools such as calculate_cyprus_income_tax, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_investment_vehiclesAInspect
Compares a taxable investment (option 1) against a tax-deductible vehicle such as a provident fund or life-insurance savings plan (option 2), matching the true out-of-pocket cost of both and applying entry/exit fees, AUM fees, commission and exit tax. Use to compare taxable investment with a tax-deductible investment vehicle. Require the annual contribution, the user's tax-relief rate and option 2's management fee. Reuse supplied facts and ask only for missing essentials. Disclosed forecast returns and optional omitted fee/tax inputs are modelling assumptions; do not invent personal contribution amounts.
| Name | Required | Description | Default |
|---|---|---|---|
| maxYears | No | Horizon in years (default 30). | |
| opt2AumFee | Yes | Annual management fee on option 2, percent. | |
| opt1ExitFee | No | One-off exit fee on option 1, EUR. | |
| opt1ExitTax | No | Tax on option 1 gains at exit, percent. | |
| opt2ExitTax | No | Tax on option 2 at exit, percent. | |
| opt1EntryFee | No | One-off entry fee on option 1, EUR. | |
| netInvestment | Yes | Annual GROSS contribution into option 2, EUR. Option 1 receives the equivalent out-of-pocket amount. | |
| opt1MonthlyFee | No | Fixed monthly fee on option 1, EUR. | |
| opt2Commission | No | Percent of the FIRST year's contributions taken as commission. | |
| opt2MonthlyFee | No | Fixed monthly fee on option 2, EUR. | |
| opt1AnnualReturn | No | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. | |
| opt2AnnualReturn | No | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. | |
| taxDeductionRate | Yes | User's marginal tax relief on option 2 contributions, percent. | |
| opt2AdditionalFee | No | Additional annual fee on option 2, percent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| winner | Yes | |
| assumptions | Yes | |
| option1Final | Yes | |
| option2Final | Yes | |
| crossoverYear | Yes | |
| leadershipPeriods | Yes | |
| advantageAtHorizon | Yes | |
| finalLeadStartYear | Yes | |
| option1AnnualContribution | Yes | |
| option2AnnualContribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does substantial work: it discloses the cost-matching method (equalizing true out-of-pocket cost), the fee/tax mechanics applied (entry/exit fees, AUM fees, first-year commission, exit tax), and flags that forecast returns and omitted fee/tax inputs are modelling assumptions rather than user facts. The explicit prohibition on inventing personal contribution amounts is valuable guardrail context. It stops short of describing result shape or horizon behavior, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the comparison definition and followed by usage, prerequisites, and assumption warnings in a logical order. The second sentence ('Use to compare taxable investment with a tax-deductible investment vehicle') largely restates the first and could be merged, but no sentence is otherwise wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter financial modelling tool with no annotations, the description covers required inputs, fee/tax mechanics, assumption policy, and the no-invention guardrail; return values are covered by the output schema. What remains thin is guidance on the many optional fee/tax parameters (e.g., when an omitted value is safe versus must be asked for), though the schema descriptions carry that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3, but the description adds a genuinely non-obvious semantic: the two options are compared at matched out-of-pocket cost, which explains why only option 2's gross contribution is required. It also names the three required inputs, reinforcing which fields cannot be defaulted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: compares a taxable investment (option 1) against a tax-deductible vehicle such as a provident fund or life-insurance savings plan (option 2). The scope is narrow enough that an agent can distinguish it from neighbors like compare_rent_vs_buy or analyze_portfolio without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it ('Use to compare taxable investment with a tax-deductible investment vehicle') and names the three inputs that must be present (annual contribution, tax-relief rate, option 2 management fee). It adds an operating rule — reuse supplied facts and ask only for missing essentials — but gives no when-not guidance or named alternative for cases outside this comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_rent_vs_buyAInspect
Compares buying a home against renting using actual period mortgage payments and symmetric investment of whichever scenario has lower cash costs. Mortgage contributions stop after payoff; purchase/sale costs, maintenance, rent inflation and investment returns are included. Use only to compare buying a Cyprus home with renting over a stated horizon. Use financial facts stated or confirmed for this scenario. Do not carry values from another chat or scenario into the calculation until the user explicitly confirms the relevant values. Ask for any missing core term: property price, monthly rent, down payment and whether it is EUR or percent, mortgage rate, and mortgage term. If the deposit is given without a unit (for example, '20'), ask whether it means EUR or percent before interpreting, converting, deriving a loan amount, or calling this tool. Never infer the unit from context. Optional growth, inflation and return assumptions require user acceptance when not stated. Mortgage payments end at payoff, and cost differences are invested by the lower-cost side. After calculating, briefly summarize every material modelling default used (including defaults supplied in the call) and costs excluded or treated as zero; use structuredContent.assumptions for defaults and exclusions returned by the API.
| Name | Required | Description | Default |
|---|---|---|---|
| legalFees | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| stampDuty | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| agencyFees | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| downPayment | Yes | Deposit amount. If the user gives no unit, ask whether it is EUR or a percentage before interpreting or calculating. | |
| monthlyRent | Yes | Current monthly rent, EUR. | |
| transferFees | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| homeInsurance | No | Annual home insurance, EUR. | |
| propertyPrice | Yes | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| rentFurniture | No | One-off furnishing cost when renting, EUR. | |
| agentCommission | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| maintenanceFixed | No | Annual maintenance in EUR when not using the percentage. | |
| fittingsFurniture | No | One-off furnishing cost when buying, EUR. | |
| localAuthorityTax | No | Annual local authority tax, EUR. | |
| mortgageTermYears | Yes | Mortgage term in years. | |
| propertyTaxYearly | No | Annual property tax, EUR. | |
| transferTaxOnSale | No | Assumed transfer tax on exit, percent (default 0%). | |
| commonAreaExpenses | No | Monthly communal charges when renting, EUR. | |
| rentYearlyIncrease | No | Assumed annual rent increase, percent (default 2). | |
| analysisPeriodYears | No | Comparison horizon in years (default 30). | |
| salesCommissionRate | No | Assumed selling commission on exit, percent (default 5%). | |
| generalInflationRate | No | Assumed annual inflation, percent (default 2). | |
| investmentReturnRate | No | Assumed annual investment return, percent (default 5). | |
| mortgageInterestRate | Yes | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. | |
| maintenancePercentage | No | Annual maintenance as a percent of property value (model default 1%). | |
| securityDepositMonths | No | Deposit expressed in months of rent. | |
| downPaymentIsPercentage | Yes | True only when the user explicitly confirms the deposit is a percentage; false only when they explicitly confirm it is EUR. Ask if unclear; never infer. | |
| propertyAppreciationRate | No | Assumed annual property appreciation, percent (default 3). | |
| useMaintenancePercentage | No | Use the percentage instead of the fixed maintenance figure (default true). |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| assumptions | Yes | |
| totalCostBuy | Yes | |
| breakevenYear | Yes | |
| totalCostRent | Yes | |
| buyInitialCash | Yes | |
| rentInitialCash | Yes | |
| buyNetWealthFinal | Yes | |
| rentNetWealthFinal | Yes | |
| opportunityCostGain | Yes | |
| monthlyMortgagePayment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses mortgage payoff behaviour, symmetric investment of cost differences, included cost categories, and requires a post-calculation summary of defaults and exclusions via structuredContent.assumptions. It stops short of stating whether the calculation is pure/read-only or persisted, which is a meaningful gap for a tool with save/update siblings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The length is warranted for a 28-parameter financial model, and purpose is front-loaded. There is some redundancy around the deposit-unit rule ('never infer the unit' repeated in different phrasing), but no sentence is idle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 28 parameters, no annotations, and an existing output schema, the description covers the decisions an agent must make before calling: required core terms, ambiguity handling, assumption acceptance, and disclosure of defaults/exclusions. Return-value explanation is correctly delegated to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the 28 parameters; the description adds real value by mandating clarification of the downPayment unit, forbidding unit inference, and requiring acceptance of optional growth/inflation/return assumptions. That goes beyond the schema's per-field text and addresses the two most error-prone parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('compares buying a home against renting') and pins the scope to a Cyprus home over a stated horizon. The modelling stance (actual period mortgage payments, symmetric investment of the lower-cost side) distinguishes it from siblings like simulate_mortgage without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly restricts use to rent-vs-buy over a stated horizon, forbids carrying values from other chats, and enumerates the required core terms that must be asked for if missing. It also names the alternative behaviour for ambiguous deposit units and requires user acceptance for unstated assumptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_saved_calculationsAInspect
Diffs two saved calculations (inputs and results) field by field. Use for 'compare my mortgage before/after' style questions instead of reconstructing the diff from two loads. Encrypted sides report locked instead of contents.
| Name | Required | Description | Default |
|---|---|---|---|
| calculationIdA | Yes | First saved calculation id. | |
| calculationIdB | Yes | Second saved calculation id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| sameType | No | |
| assumptions | No | |
| differences | No | |
| calculationA | No | |
| calculationB | No | |
| totalDifferences | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose a real output behavior: encrypted sides 'report locked instead of contents,' which the agent cannot learn from the schema or output schema alone. It leaves unstated whether the tool is strictly read-only and what happens if an id is missing or invalid, so it stops short of full behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the routing guidance, then the edge-case caveat. There is no filler or repeated information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers the return shape and the schema covers both parameters, so the description is nearly complete for a two-arg read tool. Minor gaps remain around failure behavior for unknown ids and the meaning of diff direction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both UUID parameters are already documented in the schema, so the baseline is 3. The description adds only that these are saved calculations being compared, which is already implied, and does nothing with directionality (whether A is the baseline and B is the comparison).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Diffs two saved calculations') and narrows the scope to inputs and results field by field. It also implicitly separates itself from load_saved_calculation, which the agent would otherwise need to reason about.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('compare my mortgage before/after' style questions) and an explicit alternative to avoid ('instead of reconstructing the diff from two loads'). The selection condition between this tool and the sibling load_saved_calculation is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_saved_calculationAInspect
Deletes one saved calculation belonging to the authenticated API key's user. Use when the user asks to delete or forget a saved scenario. Works on encrypted saves too.
| Name | Required | Description | Default |
|---|---|---|---|
| calculationId | Yes | ID returned by list_saved_calculations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| series | No | |
| deleted | No | |
| assumptions | No | |
| calculationType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It usefully discloses ownership scoping and that encrypted saves are also deletable, but never states that the deletion is permanent/irreversible or what happens when the ID is unknown or already deleted — significant gaps for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then the trigger, then the encrypted-save caveat. Every sentence carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the single param is fully documented. But for a destructive tool with zero annotations, the description omits irreversibility and failure behavior, leaving the agent without the confirmation context it would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is documented as "ID returned by list_saved_calculations," so the schema does the work. The description adds nothing about the ID format or provenance beyond it, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Deletes one saved calculation") plus a scoping constraint ("belonging to the authenticated API key's user"). The singular "one" implicitly separates it from list_saved_calculations and compare_saved_calculations, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use when the user asks to delete or forget a saved scenario" gives a clear, concrete trigger condition. It lacks any when-not guidance or pointer to alternatives such as update_calculation for modification versus deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pension_reference_dataAInspect
Returns official Cyprus Social Insurance reference tables for a given year. Use to retrieve official Cyprus social-insurance reference figures for a user-specified calendar year. Reuse a year already given or ask for the missing year; do not assume which tax/reference year applies.
| Name | Required | Description | Default |
|---|---|---|---|
| year | Yes | Reference year. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| assumptions | Yes | |
| maxUnitsPerYear | Yes | |
| statutoryPensionAge | Yes | |
| minimumContributionYears | Yes | |
| annualMaxInsurableEarnings | Yes | |
| annualBasicInsurableEarnings | Yes | |
| weeklyBasicInsurableEarnings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It conveys that this returns 'official' tables (provenance/authoritativeness) and strongly implies a side-effect-free lookup, but never states it is read-only or describes failure handling for unavailable years or out-of-range inputs. Adequate but with clear gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope is front-loaded in the first sentence, but the second sentence largely restates it ('retrieve official Cyprus social-insurance reference figures for a user-specified calendar year') rather than adding new information. Only the final clause about not assuming the year earns its place beyond sentence one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, fully documented lookup with an output schema, the description covers purpose, sourcing, and year-selection behavior well enough to call it correctly. Missing only edge-case behavior (what happens for years with no published table or outside the 1981+ range).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage the baseline is 3, but the description genuinely adds semantics: it tells the agent to reuse a year already provided and not to guess the applicable tax/reference year. That is guidance the schema's bare 'Reference year' field does not supply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource — returning official Cyprus Social Insurance reference tables for a given year — which is clearly a data lookup rather than a calculation, distinguishing it from siblings like calculate_cyprus_state_pension or calculate_cyprus_income_tax. It does not explicitly name an alternative sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives usable when-to-use context ('retrieve official Cyprus social-insurance reference figures for a user-specified calendar year') plus concrete behavioral guidance: reuse a year already supplied rather than re-asking, and don't assume which tax/reference year applies. No explicit exclusions or named alternatives, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_calculationsAInspect
Lists metadata of an authenticated user's saved calculations by calculator type. Use so an agent can help a user find a previously saved scenario before loading it. Never returns encrypted contents.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | recent = most recently updated first (default), oldest = least recently updated, created_desc/created_asc by creation date, name_asc/name_desc alphabetical. Cursor paging only applies to 'recent'. | recent |
| limit | No | ||
| cursor | No | nextCursor from the previous page, compound <updatedAt>|<id> with an id tie-break so rows sharing updatedAt never skip. Preferred over offset for stable paging (sort: recent only). | |
| offset | No | Rows to skip. Use with limit for page-number paging. | |
| calculationType | No | Omit to list saved calculations across every calculator type. | |
| calculationTypes | No | Filter by several calculator types at once. Takes precedence over calculationType. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sort | No | |
| limit | No | |
| offset | No | |
| series | No | |
| hasMore | No | |
| nextCursor | No | |
| totalCount | No | |
| assumptions | No | |
| calculations | No | |
| calculationTypes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add real value: it states the data is scoped to the authenticated user (an auth requirement) and that encrypted contents are never returned. It says nothing about paging cost, rate limits, or that unauthenticated calls fail, which a mutation-free list tool would still benefit from.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the resource and scope come first, then the usage rationale, then the output constraint. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is unnecessary, and the six parameters are well covered by the schema. The description supplies purpose, auth scoping, and the encrypted-contents caveat; only paging behavior and error conditions are left entirely to structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents sort, cursor, offset, and the type filters thoroughly. The description adds no parameter-level detail beyond 'by calculator type'; baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Lists' + resource 'saved calculations' + scope 'metadata ... by calculator type', which clearly separates it from load_saved_calculation (contents) and compare_saved_calculations (comparison). It stops short of naming a sibling explicitly, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use so an agent can help a user find a previously saved scenario before loading it' supplies a clear usage context and implicitly routes to load_saved_calculation as the follow-up step. There are no explicit when-not conditions or named alternatives, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_saved_calculationAInspect
Loads one saved calculation belonging to the authenticated API key's user. Use after list_saved_calculations to retrieve full details of a specific saved scenario. Locked saves return locked: true and no contents.
| Name | Required | Description | Default |
|---|---|---|---|
| calculationId | Yes | ID returned by list_saved_calculations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| inputs | No | |
| locked | No | |
| result | No | |
| series | No | |
| createdAt | No | |
| toolInput | No | |
| updatedAt | No | |
| assumptions | No | |
| calculationType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose two non-obvious behaviors: results are scoped to the authenticated key's user, and locked saves return locked: true with no contents. It does not cover failure behavior for a nonexistent or foreign calculationId, which is the remaining gap for an unannotated read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero padding, with the ownership constraint front-loaded and the edge case last. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description still covers ownership scope, call sequencing, and the locked-save edge case. The only omission is error/not-found behavior, which leaves it slightly short of fully complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already says 'ID returned by list_saved_calculations,' so the tool description adds essentially nothing new about the parameter. Baseline 3 applies when the schema fully documents the input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Loads') and resource ('one saved calculation') with explicit ownership scope ('belonging to the authenticated API key's user'), which cleanly separates it from list_saved_calculations and compare_saved_calculations. An agent can identify this as the single-item retrieval tool without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit sequencing instruction: 'Use after list_saved_calculations to retrieve full details of a specific saved scenario,' which tells the agent both the precondition and the intent. It does not mention when to prefer compare_saved_calculations or what to do when the ID is unknown, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_company_director_remunerationAInspect
Optimizes Cyprus LTD company-director remuneration for monetary inputs up to €1,000,000, with a fixed solver evaluation budget. Use for a Cyprus LTD director remuneration comparison. Monetary inputs may not exceed €1,000,000; larger values are rejected before solving. Require company profit/revenue, deductible expenses, tax year and domicile status; reuse supplied data and request missing essentials. The default €2,000 corporate administration cost is a disclosed modelling assumption.
| Name | Required | Description | Default |
|---|---|---|---|
| taxYear | Yes | Tax/legislation year. Supported: 2025, 2026. | |
| isNonDomiciled | Yes | Non-dom status; exempts dividends from SDC. | |
| operatingExpenses | Yes | Annual deductible operating expenses in EUR (maximum €1,000,000). | |
| corporateGrossProfit | Yes | Annual company turnover/revenue in EUR, before operating expenses. Maximum supported value: €1,000,000. | |
| annualCorporateAdminCost | No | Annual corporate admin, audit and compliance costs in EUR (Cyprus Companies Law Cap. 113). Defaults to 2000; maximum €1,000,000. | |
| directorSalaryAllocation | No | Optional fixed director salary in EUR (maximum €1,000,000); omit to run the bounded solver for the optimal split. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| netCash | Yes | |
| assumptions | Yes | |
| corporateTax | Yes | |
| optimalSalary | Yes | |
| personalTaxes | Yes | |
| optimalDividend | Yes | |
| employerBreakdown | Yes | |
| employerContributions | Yes | |
| comparativeDeltaVsSole | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose key traits: hard input ceiling, pre-solve rejection of over-limit values, a bounded/fixed solver evaluation budget, and the €2,000 admin cost as a disclosed modelling assumption. It does not cover determinism, runtime, or what happens when the optional salary allocation is omitted (beyond the schema note).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scope and use case are front-loaded and the whole entry is a few short sentences. It is slightly repetitive, restating the €1,000,000 ceiling three times ('up to €1,000,000', 'may not exceed €1,000,000', 'larger values are rejected'), which costs some efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described; within that, the description supplies the required inputs, the solver's bounded nature, and a modelling assumption. Missing are the outcome of omitting directorSalaryAllocation (delegated to the schema) and any note on solver runtime or result interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter including defaults, enums and maxima; the description largely restates these. The one genuine addition is that over-limit monetary inputs are rejected before solving, which clarifies failure behavior rather than parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Optimizes Cyprus LTD company-director remuneration') and narrows the scope to monetary inputs up to €1,000,000, which cleanly separates it from the personal-tax and pension siblings. The follow-up sentence 'Use for a Cyprus LTD director remuneration comparison' reinforces the exact use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context ('Use for a Cyprus LTD director remuneration comparison') and prerequisites ('Require company profit/revenue, deductible expenses, tax year and domicile status'). It does not name a competing sibling (e.g. calculate_cyprus_income_tax) or state when this tool should not be chosen, so it falls short of explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_mortgage_statement_textAInspect
Turns pasted bank mortgage-statement rows into audit_mortgage_statement inputs. Use to extract supported fields from actual mortgage statement text. Report missing fields and do not create or infer statement rows.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Pasted statement lines (date + description + amount per row, optional balance and rate%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | |
| series | No | |
| parsedRows | No | |
| assumptions | No | |
| skippedRows | No | |
| parseConfidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description still discloses key behavior: only supported fields are extracted, missing fields should be reported, and statement rows must not be created or inferred. It does not explicitly state read-only/no-side-effect behavior, but the parsing constraints are meaningfully described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no waste. The core purpose is front-loaded, followed by usage and a clear extraction constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one fully described parameter and an output schema, the description provides enough context for correct selection and invocation. It identifies the source text, the target audit step, and the no-inference rule.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single text parameter has 100% schema description coverage, so the schema already explains the expected pasted statement lines. The description reinforces the mortgage-statement context but does not add syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific transformation: turning pasted bank mortgage-statement rows into audit_mortgage_statement inputs. It clearly distinguishes parsing/extraction from the downstream audit and from other sibling calculators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to use the tool for extracting supported fields from actual mortgage statement text and implies this happens before audit_mortgage_statement. It does not explicitly compare against alternatives or list when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_pension_statementAInspect
Extracts structured contribution history from pasted Cyprus Social Insurance Services pension statement text. Use to extract supported contribution years and units from an actual pasted Cyprus Social Insurance statement. Do not fill gaps or create contribution records; report missing or unreadable details to the caller.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Pasted statement text. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| totalUnits | Yes | |
| assumptions | Yes | |
| parseConfidence | Yes | |
| contributionYears | Yes | |
| totalContributionYears | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does well by stating that it will not fill gaps or create contribution records and that missing or unreadable details must be reported. It does not discuss authentication, rate limits, or malformed-input handling, but the core extraction constraints are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and appropriately short, with purpose, usage, and a behavioral guardrail. It repeats the Cyprus Social Insurance statement context slightly, which keeps it from being maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple one-parameter parsing tool with a full output schema, the description covers the essential purpose, usage context, and important non-fabrication behavior. Minor gaps around malformed input or output shape are mitigated by the output schema and simple parameter contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single text parameter, so the schema already explains that it expects pasted statement text. The description adds context about the domain but does not add syntax, format, or validation details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: extracting structured contribution history from pasted Cyprus Social Insurance Services pension statement text. It also scopes the output to supported contribution years and units, and implicitly distinguishes itself from calculation tools by saying it does not fill gaps or create contribution records.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says to use this tool on an actual pasted Cyprus Social Insurance statement, which gives useful context for when it applies. It does not explicitly name alternative sibling tools such as get_pension_reference_data or calculate_cyprus_state_pension, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_portfolio_csvAInspect
Turns pasted broker CSV or ledger text into analyze_portfolio transactions. Use to extract supported transactions from actual pasted broker CSV or ledger text. Require the source text and actual base currency, report missing/unreadable values, and never create transactions or assume EUR. Output rows can be sent to analyze_portfolio.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Pasted broker CSV or ledger lines (date + type + amount per row). | |
| baseCurrency | Yes | Actual base currency used for the parsed portfolio. Required; do not assume EUR. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| parsedRows | No | |
| assumptions | No | |
| skippedRows | No | |
| baseCurrency | No | |
| transactions | No | |
| subPortfolios | No | |
| parseConfidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose meaningful behavior: it reports missing/unreadable values rather than silently succeeding, refuses to fabricate transactions, and will not default to EUR. What it does not define is what counts as a 'supported' transaction, which is the main behavioral unknown for a parser.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, but the second sentence ('Use to extract supported transactions from actual pasted broker CSV or ledger text') largely repeats the first rather than adding new information. The requirement/error-handling sentence does earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return shape needn't be described, and both required params are covered. The description gives the agent what it needs to call the tool safely; only the definition of 'supported transactions' is left open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema, and the description's restatement ('Require the source text and actual base currency') adds no format detail or example. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Turns pasted broker CSV or ledger text into analyze_portfolio transactions') and scopes it to 'supported transactions'. It is clearly distinguishable from the sibling parsers (parse_mortgage_statement_text, parse_pension_statement) and from analyze_portfolio itself, which it feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('Use to extract supported transactions from actual pasted broker CSV or ledger text') and describes the workflow handoff ('Output rows can be sent to analyze_portfolio'), plus the preconditions (source text, actual base currency). It stops short of naming when NOT to use it or which sibling to pick for non-broker text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_monthly_budgetAInspect
Builds a monthly budget from a list of expenses at any frequency: normalises everything to a monthly basis, tiers each item (T1 fixed essentials, T2 variable essentials, T3 lifestyle, T4 discretionary), and returns disposable income, savings rate, the biggest optimisable leak and a surplus projection. Use to summarize a household's actual monthly net income and expense items. Ask for the actual expense ledger or item amounts; never fabricate expenses. Entries without a frequency are treated as monthly and disclosed. Omitted investment contributions are treated as zero and disclosed.
| Name | Required | Description | Default |
|---|---|---|---|
| expenses | Yes | Expense items. Known catalogue keys (mortgageRent, groceries, netflix, fuel, ...) are tiered automatically; otherwise pass an explicit tier. | |
| projectionYears | No | Horizon of the surplus projection (default 10). | |
| monthlyNetIncome | Yes | Take-home monthly income, EUR (net of tax, social insurance and GESY); zero is valid but savings rate is unavailable. | |
| targetSavingsRate | No | Savings-rate goal as a percent of net income. | |
| monthlyInvestments | No | Recurring monthly investments/savings, EUR. | |
| expectedAnnualReturn | No | Assumed annual return on invested surplus, percent (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| projection | Yes | |
| savingsGap | Yes | |
| tierTotals | Yes | |
| assumptions | Yes | |
| largestLeak | Yes | |
| savingsRate | Yes | |
| annualExpenses | Yes | |
| categoryTotals | Yes | |
| monthlySurplus | Yes | |
| disposableIncome | Yes | |
| monthlyNetIncome | Yes | |
| targetSavingsRate | Yes | |
| discretionaryTotal | Yes | |
| monthlyInvestments | Yes | |
| targetMonthlySavings | Yes | |
| totalMonthlyExpenses | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden, and it discloses normalization to monthly, automatic T1-T4 tiering, computed outputs, and explicit default/disclosure behavior for missing frequency and omitted investments. It does not explicitly state whether the calculation is persisted or has side effects, which matters given sibling tools like save_calculation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and result, then covers usage, data-quality expectations, and edge-case defaults. Every sentence adds operational information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be fully explained, and the schema already documents all six parameters in detail. The description adds important data-integrity and default-handling context, though it could state more explicitly that the tool is a pure calculation and does not itself save the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with rich per-field descriptions already documenting income, expenses, frequency, investments, projection horizon, and return assumptions. The description adds some meaning, such as treating omitted investments as zero and disclosing frequency defaults, but most parameter semantics remain supplied by the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Builds a monthly budget.' It also enumerates normalization, tiering, and returned metrics, and scopes the tool to a household's actual monthly net income and expense items, which distinguishes it from the tax, pension, mortgage, and investment siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use to summarize a household's actual monthly net income and expense items' and instructs the agent to ask for the actual expense ledger or item amounts and never fabricate expenses. It does not name a when-not condition or an explicit alternative sibling, but no sibling tool clearly overlaps with this budgeting purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_retirement_stress_testAInspect
Runs a deterministic projection plus Monte Carlo simulation of a retirement savings plan, aggregating active pension streams before applying personal income tax allowances and the shared GESY ceiling. Use for a retirement savings sustainability or portfolio-longevity projection. Reuse the user's ages, savings, contributions and planned monthly spending; ask for each missing essential input and never use example personal values. Values are EUR, contributions/drawdown are monthly, and ages are years. Supply pensionStreams to include Cyprus or foreign pension income; concurrent streams are aggregated before applying the personal progressive allowance, one foreign-pension allowance and the shared €180,000 GESY ceiling. Foreign pensions use the 2026 flat 5% rate above €5,000 unless a net override is supplied. Omitted state pension means pension income is excluded. Returns, inflation, horizon and simulation count use disclosed modelling assumptions when omitted. Runs without seed are stochastic; a supplied seed makes identical inputs repeatable for the same implementation version.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Optional unsigned 32-bit seed for repeatable runs with identical inputs and implementation versions. Omit to keep the run stochastic. | |
| endAge | No | Planning horizon age (default 90). | |
| currentAge | Yes | Age today. | |
| simulations | No | Monte Carlo runs (default 1000). | |
| statePension | No | Expected monthly state pension in EUR. | |
| inflationRate | No | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. | |
| retirementAge | Yes | Planned retirement age. | |
| currentSavings | Yes | Current investable savings balance in EUR. | |
| pensionStreams | No | Optional annual pension streams that offset retirement drawdown. Concurrent streams are aggregated before applying progressive tax, the single 2026 foreign-pension €5,000 allowance, and the shared personal GESY ceiling. A supplied netAnnualOverride is treated as already net and is used as-is. | |
| monthlyDrawdown | Yes | Planned monthly withdrawal in retirement in EUR. | |
| monthlyContribution | Yes | Monthly contribution until retirement in EUR. | |
| expectedAnnualReturn | No | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. | |
| expectedAnnualReturnRetirement | No | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| ltcRunRate | Yes | |
| assumptions | Yes | |
| acuteRunRate | Yes | |
| shockRunRate | Yes | |
| medianDepletionAge | Yes | |
| successProbability | Yes | |
| averageDepletionAge | Yes | |
| medianTerminalWealth | Yes | |
| deterministicFinalBalance | Yes | |
| worstCase10thPercentileBalance | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses the deterministic-plus-Monte-Carlo structure, tax aggregation order (progressive allowance, one foreign-pension allowance, shared €180,000 GESY ceiling), the 2026 flat 5% foreign-pension rate, that omitted state pension excludes pension income, that omitted modelling inputs fall back to disclosed defaults, and that seedless runs are stochastic while seeded runs repeat for a given implementation version.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and use case, then units, then tax mechanics, then determinism — a logical order. It is dense and earns most of its length, but repeats the GESY ceiling and foreign-pension allowance points twice, which is minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, no-annotation tool, the description covers the essential gaps an agent needs: input sourcing discipline, units, tax/aggregation behavior, default assumptions, and stochastic-vs-repeatable execution. An output schema exists, so return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds real meaning beyond the schema by stating units and cadence (EUR, monthly contributions/drawdown, ages in years) and explaining how concurrent pensionStreams are aggregated and how netAnnualOverride is treated. Marginal duplication of the GESY/foreign-allowance rules already in the stream schema keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Runs a deterministic projection plus Monte Carlo simulation of a retirement savings plan') and explicitly scopes the output to sustainability/longevity. It is clearly distinguishable from siblings like calculate_cyprus_state_pension or analyze_portfolio, which cover narrower pieces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use ('retirement savings sustainability or portfolio-longevity projection') and strong input-sourcing rules ('Reuse the user's ages, savings... ask for each missing essential input and never use example personal values'). It does not explicitly name a sibling alternative or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_calculationAInspect
Saves a calculator scenario to the authenticated user's stored history. Use when the user asks to save, keep or remember a scenario. Stores the inputs unencrypted (with server-computed results) so list/load can return them later.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name for the saved scenario. | |
| inputs | Yes | Tool-style inputs for the matching calculator (same shape its calculator tool accepts). | |
| calculationType | Yes | Calculator type to save under. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| locked | No | |
| series | No | |
| createdAt | No | |
| updatedAt | No | |
| assumptions | No | |
| calculationType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that inputs are stored unencrypted, that server-computed results are included, and that saved data is later retrievable via list/load. It omits details like overwrite behavior for duplicate names or authentication/error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: purpose, when to use, and storage behavior. The key constraint (unencrypted storage) is front-loaded after the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a full output schema and 100% parameter documentation, the description covers the essential behavioral traits. It could be more complete by mentioning handling of existing scenarios (overwrite vs. error) and pointing to 'update_calculation' as the alternative for saved scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including the calculationType enum and nested inputs. The description adds no parameter-specific meaning beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Saves a calculator scenario to the authenticated user's stored history'), making the operation clear. It does not explicitly differentiate itself from the sibling 'update_calculation' or 'list_saved_calculations', so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear triggering context: 'Use when the user asks to save, keep or remember a scenario.' However, it offers no exclusions or alternative routing, such as using 'update_calculation' for an already-saved scenario, which would be needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_life_insurance_flushAInspect
Simulates a Cyprus unit-linked life insurance policy and calculates tax and returns from executed withdrawals only. Requests above available funds are capped and flagged; self-funded surrender taxes are included in household cash flows and IRR. Use to model withdrawals from an existing Cyprus life-insurance policy. Require actual policy terms, tax rate, historical policy records and future premium/withdrawal projections; ask for missing items and never generate policy history. Amounts requested above available funds are limited to executed proceeds, and tax/return figures follow those executed cash flows. Forecast returns are assumptions and must be identified as such.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Current age of the policyholder. | |
| aumFee | Yes | Annual management fee as a percent of fund value. | |
| gender | Yes | Used to look up mortality rates. | |
| scenario | No | Which scenario to report as the primary result (default userInput). All three are always returned for comparison. | |
| monthlyFee | Yes | Fixed policy fee charged each month, EUR. | |
| taxBracket | Yes | Marginal income tax rate applied to taxable surrender amounts and to premium relief, percent. | |
| projections | Yes | Future years to simulate. | |
| historicalData | Yes | Actual policy history; the last entry's endingBalance is the simulation's opening balance, and the 3/4-year lookbacks drive the safe limit. | |
| brokerReturnRate | No | Annual return of the broker account, percent (used with useDifferentBrokerReturn). | |
| investmentReturn | Yes | Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default. Expected annual return inside the policy. | |
| capitalSumInsured | Yes | Death benefit / sum insured, EUR. Mortality cost applies to the amount at risk above the fund value. | |
| contractStartYear | Yes | Calendar year the policy started. Partial surrenders are only tax-free from the 4th policy year. | |
| reinvestWithdrawals | No | When true, net withdrawals are reinvested in a broker account and IRR is computed on combined wealth. | |
| useDifferentBrokerReturn | No | Use brokerReturnRate instead of investmentReturn for the broker account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| irr | No | |
| series | No | |
| scenario | No | |
| irrWithTax | No | |
| assumptions | No | |
| finalBalance | No | |
| totalTaxPaid | No | |
| irrWithoutTax | No | |
| totalFeesPaid | No | |
| totalTaxSaved | No | |
| irrPerspective | No | |
| totalWithdrawn | No | |
| safeLimitByYear | No | |
| finalBrokerBalance | No | |
| finalPolicyBalance | No | |
| scenarioComparison | No | |
| totalMortalityCost | No | |
| totalSelfFundedCost | No | |
| irrUnavailableReason | No | |
| irrWithTaxPerspective | No | |
| netWithdrawalsPaidOut | No | |
| mortalityDataAvailable | No | |
| irrWithoutTaxPerspective | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does well: it discloses that over-requests are capped and flagged, that self-funded surrender taxes affect household cash flows and IRR, and that forecast returns are assumptions requiring labeling. It could be stronger by explicitly stating that the tool is a pure simulation with no persistent side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the description repeats the same capping/executed-withdrawals concept in two separate sentences. The core information is useful, yet the redundancy costs some conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 14-parameter simulation with no annotations and an output schema, the description covers the key domain constraints: required real policy data, no generated history, capping behavior, and assumption labeling. The schema and output schema handle the detailed parameter and return semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meanings are already fully documented in the input schema. The description adds domain-level expectations such as using actual policy terms and not fabricating history, but it does not add parameter-specific syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: simulates a Cyprus unit-linked life insurance policy and calculates tax and returns from executed withdrawals. The added instruction 'Use to model withdrawals from an existing Cyprus life-insurance policy' clearly separates it from generic tax, pension, or portfolio siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use the tool and lists required inputs (actual policy terms, tax rate, historical records, future projections). It also instructs the agent to ask for missing items and never generate policy history, though it does not explicitly name when not to use it or point to a specific alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_mortgageAInspect
Simulates a Cyprus mortgage with a payment schedule that reconciles paid amounts to principal and interest. Supports fixed then variable periods, monthly overpayments, lump sums and interest-only loans; interest-only minimum payments track the remaining balance, with principal due at maturity. KFIK and cash-collateral configurations are not available through this API. Use only to estimate a Cyprus mortgage payment, amortization, overpayments or rate scenarios. Require the actual loan amount, term, selected fixed-period length and the rate inputs for each phase that applies; never substitute example loan terms or rates. EUR amounts and annual percentage rates are expected. For document checklists or general mortgage information, do not call the calculator; answer or research directly without narrating tool selection.
| Name | Required | Description | Default |
|---|---|---|---|
| fixedRate | No | Actual all-in annual fixed rate in percent, required when a fixed period applies. | |
| bankMargin | No | Actual bank margin in annual percentage points added to the variable base rate; do not split an all-in rate without confirmation. | |
| closureFee | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| upfrontFees | No | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| mortgageType | No | Repayment structure. Defaults to capital_and_interest. | capital_and_interest |
| ercPercentage | No | Early repayment charge, percent of the balance. | |
| ercPeriodYears | No | Years the early repayment charge applies. | |
| mortgageAmount | Yes | EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero. | |
| feesAddedToLoan | No | Whether upfront fees are capitalised into the loan. | |
| loanPeriodYears | Yes | Loan term in years. | |
| fixedPeriodYears | Yes | Actual number of years at the fixed rate before variable pricing (0 means fully variable); ask if unknown. | |
| variableBaseRate | No | Actual annual reference rate (such as ECB or Euribor) in percent, for the variable phase. | |
| monthlyOverpayment | No | Extra amount paid each month, EUR. | |
| lumpSumOverpayments | No | One-off overpayments. | |
| overpaymentPeriodType | No | When overpayments are made across the term. | |
| overpaymentYearsCount | No | Number of years overpayments run when period type is first/last. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | No | |
| balloonDue | Yes | |
| assumptions | Yes | |
| sumOfAllPayments | Yes | |
| totalInterestPaid | Yes | |
| minRequiredPayment | Yes | |
| closureCashRequired | Yes | |
| totalMonthlyPayment | Yes | |
| actualRepaymentYears | Yes | |
| actualRepaymentMonths | Yes | |
| avgAnnualCapitalPayment | Yes | |
| totalInterestByScenario | Yes | |
| avgAnnualInterestPayment | Yes | |
| earlyRepaymentChargeYear3 | Yes | |
| earlyRepaymentBalanceYear3 | Yes | |
| earlyRepaymentClosureCashYear3 | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and delivers substantive behavior: fixed-then-variable phases, monthly and lump-sum overpayments, interest-only mechanics ('minimum payments track the remaining balance, with principal due at maturity'), and unsupported KFIK/cash-collateral modes. It also imposes input-integrity rules ('never substitute example loan terms or rates', EUR amounts and APR expected). Not fully disclosed are determinism/statelessness and rounding conventions on the produced schedule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded paragraph that leads with the purpose, then capabilities, then exclusions, then input requirements — good ordering. Slight bloat in the trailing meta-instruction ('without narrating tool selection'), which is agent-directed rather than tool-descriptive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter, annotation-free calculator, the description supplies the capability scope, the exclusion set, the input-integrity contract, and the currency/rate conventions, while the output schema covers return values and the schema covers each parameter's type and bounds. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter including enums and ranges; baseline is 3. The description adds useful framing — which inputs are mandatory in practice (actual loan amount, term, fixed-period length, rate inputs per applicable phase), the EUR/APR units, and the prohibition on fabricated example values — but it does not explain parameter interactions such as bankMargin vs variableBaseRate or overpaymentPeriodType/overpaymentYearsCount beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Simulates a Cyprus mortgage with a payment schedule that reconciles paid amounts to principal and interest.' The Cyprus/mortgage framing plus the amortization-and-reconciliation scope clearly separates it from siblings like audit_mortgage_statement, parse_mortgage_statement_text and compare_rent_vs_buy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('estimate a Cyprus mortgage payment, amortization, overpayments or rate scenarios') and when-not ('For document checklists or general mortgage information, do not call the calculator; answer or research directly'), plus an unsupported-configuration exclusion (KFIK and cash-collateral). An agent can route correctly without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_calculationAInspect
Renames a saved calculation and/or replaces its inputs (recomputing results). Use when the user asks to rename a save or re-run it with different inputs. Encrypted saves stay locked.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name. | |
| inputs | No | Replacement tool-style inputs; results are recomputed server-side. | |
| calculationId | Yes | ID returned by list_saved_calculations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| series | No | |
| updatedAt | No | |
| assumptions | No | |
| calculationType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses two genuinely useful traits: replacing inputs triggers a server-side recompute (a side effect the agent must anticipate), and encrypted saves remain locked, implying the operation will not take effect on them. It omits permission requirements and behavior when neither field is supplied, so not perfect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the usage trigger, then the constraint. Every sentence adds distinct information with no restatement of the title or name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation, and all three parameters are documented in-schema. The description covers the mutation semantics and the encrypted-save caveat. Minor gaps remain around whether a call with neither optional field errors out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the optional/partial nature of the update via 'and/or' and restates that inputs cause recomputation, but adds no format or format-specific detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verbs and resource: 'Renames a saved calculation and/or replaces its inputs (recomputing results).' An agent can distinguish this mutation from save_calculation, load_saved_calculation and delete_saved_calculation from the description alone. No sibling is named explicitly, so not a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit trigger condition: 'Use when the user asks to rename a save or re-run it with different inputs.' That maps user intent directly to tool choice. No explicit when-not or named alternatives (e.g. use save_calculation to create a new one), which keeps it below 5.
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.
25 tool updates
- First observed
analyze_portfolio - First observed
audit_mortgage_statement - First observed
calculate_cyprus_capital_gains - First observed
calculate_cyprus_income_tax - First observed
calculate_cyprus_state_pension - First observed
calculate_cyprus_unemployment_benefit - First observed
calculate_ev_savings - First observed
calculate_stock_options - First observed
compare_investment_vehicles - First observed
compare_rent_vs_buy - First observed
compare_saved_calculations - First observed
delete_saved_calculation - First observed
get_pension_reference_data - First observed
list_saved_calculations - First observed
load_saved_calculation - First observed
optimize_company_director_remuneration - First observed
parse_mortgage_statement_text - First observed
parse_pension_statement - First observed
parse_portfolio_csv - First observed
plan_monthly_budget - First observed
run_retirement_stress_test - First observed
save_calculation - First observed
simulate_life_insurance_flush - First observed
simulate_mortgage - First observed
update_calculation
Publisher details
- Operator
- PoliErgaleio · Publisher source
- Operator website
- https://poliergaleio.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://poliergaleio.com/developers · Publisher source
- Trust center
- Unknown
- Restrictions
- Public calculators are anonymous and rate-limited. Saved-data tools require a PoliErgaleio account with operator-approved OAuth onboarding or an API key. Password-protected saves must be opened on poliergaleio.com. · Publisher source
Related MCP Connectors
90+ pure finance calculators: loans, investing, bonds, options, tax. Stateless, stores nothing.
Financial calculators over MCP: compound interest, FIRE, historical returns, deep links, 6 languages
SmartMoney77 MCP v0.6.0 — 14 public tools that turn financial questions into exact numbers and citable links. New: historical_investment_return and compare_investments, which compute "what if I had invested" results from real yearly price data. Also compound interest, FIRE number, credit-card payoff, emergency fund, inflation, latte factor, investment fees, cost of waiting, plus discovery/deep-link/share-pack tools for a catalog of calculators in 6 languages (he/en/ar/es/pt/in). Public, no login. Endpoint: https://smartmoney77.com/mcp
FIRE & retirement calculators + a multi-currency portfolio rebalancer (exact buy/sell trades).
Related MCP Servers
- AlicenseNot gradedqualityBmaintenancePublic, no-login MCP server exposing SmartMoney77's financial calculators: compound interest, FIRE number, credit-card payoff, emergency fund, inflation, fees and the cost of waiting. Also computes historical "what if I had invested" returns from real yearly price data, and builds deep links and share packs for calculators in 6 localized editions.MIT
- AlicenseAqualityBmaintenance17 deterministic personal-finance tools across 7 countries (US, UK, CA, AU, AE, SA, India) plus Sharia-compliant Islamic finance (Zakat, Murabaha, Ijarah, Mudarabah, Hajj savings, halal stock screening). Wraps the open-source calcnook engine — zero API keys, pure stdlib, MIT.171MIT
- AlicenseAqualityAmaintenanceThe most comprehensive everyday calculator MCP server — 501 tools across 22 categories covering 8 countries' tax systems (FR, BE, CH, CA, US, UK, MA, SN). Finance, health, math, science, construction, conversions, education, sport, cooking, travel, and more. Free, no API key required. Streamable HTTP transport.157 npm1MIT
- AlicenseBqualityAmaintenanceopen-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud8925AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.