{"tools":[{"name":"calculate_cyprus_income_tax","description":"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.","inputSchema":{"type":"object","properties":{"salaryIncome":{"type":"number","minimum":0,"description":"Gross annual salary in EUR."},"rentalIncome":{"type":"number","minimum":0,"description":"Annual rental income in EUR."},"hasRentalIncome":{"type":"boolean","description":"Whether rental income applies."},"dividendIncome":{"type":"number","minimum":0,"description":"Annual dividend income in EUR."},"hasDividendIncome":{"type":"boolean","description":"Whether dividend income applies."},"isDividendNonDomicile":{"type":"boolean","description":"Non-dom status for dividends."},"employmentType":{"type":"string","enum":["private","civil","self-employed"],"description":"'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."},"qualifiesForFirstEmployment":{"type":"boolean"},"firstEmploymentDeduction":{"type":"string","enum":["","20","50"]},"selfEmployedDetails":{"type":"object","description":"Sole-proprietor schedule: net profit = turnover − expenses − capitalAllowances − lossBroughtForward (floor 0).","properties":{"turnover":{"type":"number","minimum":0},"expenses":{"type":"number","minimum":0},"capitalAllowances":{"type":"number","minimum":0},"lossBroughtForward":{"type":"number","minimum":0},"occupationalCategory":{"type":"string","minLength":1,"description":"Official year-specific MLSI occupational category driving weekly deemed earnings. Ask for the actual occupation and use the up-to/over-10-years variant where the schedule distinguishes practice duration."},"useActualEarningsForSI":{"type":"boolean","description":"Pay SI on actual profit when higher than deemed."}},"additionalProperties":false},"exemptionType":{"type":"string","enum":["none","article_8_21a","article_8_23a","article_8_21b_minds_in_cyprus"],"description":"Minds in Cyprus Art. 8(21B), applied only when eligibility conditions are met."},"mindsEligibility":{"type":"object","description":"Facts used to validate Minds in Cyprus Art. 8(21B). Omit or leave incomplete to receive no 8(21B) deduction.","properties":{"cyprusStartDate":{"type":"string","format":"date","description":"Date the Cyprus employment or business began."},"first12MonthsQualifyingIncome":{"type":"number","minimum":0,"description":"Qualifying Cyprus remuneration or business profits in the first 12 months after starting."},"nonResidentForPriorSevenYears":{"type":"boolean","description":"Not Cyprus tax resident throughout the seven years before starting."},"residentBeforePriorSevenYears":{"type":"boolean","description":"Cyprus tax resident in a year before those seven years."},"recognizedUniversityDegree":{"type":"boolean","description":"Holds a degree recognized by the Cyprus Council for the Recognition of Higher Education Qualifications."},"fullTimeForeignEmploymentMonthsPrior84":{"type":"number","minimum":0,"maximum":84,"description":"Months of full-time foreign employment during the preceding 84 months."},"cyprusTaxResidentInClaimYear":{"type":"boolean","description":"Cyprus tax resident in the claim year; not required for the commencement year."}},"additionalProperties":false},"pensionIncome":{"type":"object","properties":{"cyprusPension":{"type":"number","minimum":0},"foreignPension":{"type":"number","minimum":0},"foreignPensionTaxMethod":{"type":"string","enum":["flat_5_percent","progressive"]}},"additionalProperties":false},"depositInterestIncome":{"type":"number","minimum":0,"description":"Annual deposit interest in EUR. Standard interest is subject to 17% SDC for Cyprus-domiciled individuals, rather than progressive PIT; GESY still applies."},"cryptoTradingIncome":{"type":"number","minimum":0,"description":"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."},"taxesPrepaid":{"type":"object","properties":{"payeWithheld":{"type":"number","minimum":0},"provisionalInstallments":{"type":"number","minimum":0},"sdcWithheld":{"type":"number","minimum":0},"gesyWithheld":{"type":"number","minimum":0}},"additionalProperties":false},"propertyPrice":{"type":"number","minimum":0,"description":"Property price for wear-and-tear allowance."},"propertyYear":{"type":"integer","description":"Year the property was acquired."},"interestPaid":{"type":"number","minimum":0,"description":"Interest paid on rental property."},"isNonDomicile":{"type":"boolean","description":"Cyprus non-domicile status; exempts rental and deposit-interest SDC where applicable."},"tradeUnionSubs":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"donations":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"innovativeInvestment":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"providentFund":{"type":"number","minimum":0,"description":"Total provident/PEPP fund contribution in EUR."},"legislationVersion":{"type":"string","enum":["2025","2026"],"description":"Tax/legislation year. Supported: 2025, 2026."},"maritalStatus":{"type":"string","enum":["single","married","cohabiting"]},"numDependentChildren":{"type":"integer","minimum":0},"spouseIncome":{"type":"number","minimum":0},"housingInterestPaid":{"type":"number","minimum":0},"rentPaidPrimary":{"type":"number","minimum":0},"energyEfficiencyExpense":{"type":"number","minimum":0},"evExpense":{"type":"number","minimum":0},"homeInsurancePremium":{"type":"number","minimum":0}},"additionalProperties":false,"required":["salaryIncome","employmentType"],"allOf":[{"if":{"properties":{"employmentType":{"const":"self-employed"}},"required":["employmentType"]},"then":{"required":["selfEmployedDetails"],"properties":{"selfEmployedDetails":{"required":["turnover","occupationalCategory"]}}}}]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"grossIncome":{"type":"number"},"netIncome":{"type":"number"},"netSalary":{"type":"number"},"chargeableIncome":{"type":"number"},"incomeTax":{"type":"number"},"socialInsurance":{"type":"number"},"gesy":{"type":"number"},"selfEmployedHRDA":{"type":"number"},"totalDeductions":{"type":"number"},"availableDeductions":{"type":"number"},"specialDefenseContribution":{"type":"number"},"mindsDeduction":{"type":"number"},"mindsEligibility":{"anyOf":[{"type":"null"},{"type":"object","properties":{"eligible":{"type":"boolean"},"issues":{"type":"array","items":{"type":"string"}}},"required":["eligible","issues"],"additionalProperties":false}]},"effectiveTaxRate":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["grossIncome","netIncome","netSalary","chargeableIncome","incomeTax","socialInsurance","gesy","selfEmployedHRDA","totalDeductions","availableDeductions","specialDefenseContribution","mindsDeduction","mindsEligibility","effectiveTaxRate","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"8.0.0","since":"1.0.0","status":"stable","changedIn":["13.0.0","12.0.0","10.0.0","8.0.0","5.0.0","4.0.0","3.0.0","2.0.0","1.18.0","1.16.0","1.10.0","1.1.0"],"deprecated":false}},{"name":"calculate_cyprus_state_pension","description":"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.","inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["quick","advanced"],"description":"Calculation mode."},"currentAge":{"type":"integer","minimum":18,"maximum":70,"description":"Current age (quick mode only)."},"retirementAge":{"type":"integer","minimum":63,"maximum":67,"description":"Planned retirement age."},"yearsWorked":{"type":"number","minimum":0,"maximum":49,"description":"Actual years with insurance contributions (quick mode); do not infer from age or employment duration."},"totalInsuranceUnits":{"type":"number","minimum":0,"description":"Actual accumulated Cyprus insurance units/points (quick mode); do not infer from salary or years worked."},"yearlyUnits":{"type":["array","object"],"description":"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.","patternProperties":{"^[0-9]{4}$":{"type":"number","minimum":0,"maximum":6}},"additionalProperties":false,"items":{"type":"object","properties":{"year":{"type":"integer","minimum":1981,"description":"Calendar year of the contributions."},"units":{"type":"number","minimum":0,"maximum":6,"description":"Insurance units earned that year."}},"additionalProperties":false,"required":["year","units"]},"minItems":1},"dependents":{"type":"integer","minimum":0,"maximum":10,"description":"Number of dependents (spouse/children); raises the basic pension multiplier."}},"required":["mode","retirementAge"],"allOf":[{"if":{"properties":{"mode":{"const":"quick"}},"required":["mode"]},"then":{"required":["currentAge","yearsWorked","totalInsuranceUnits"]}},{"if":{"properties":{"mode":{"const":"advanced"}},"required":["mode"]},"then":{"required":["yearlyUnits"]}}]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"estimatedMonthlyPension":{"type":"number"},"estimatedAnnualPension":{"type":"number"},"basicPensionComponent":{"type":"number"},"earningsRelatedComponent":{"type":"number"},"minimumPensionApplied":{"type":"boolean"},"qualifiesForPension":{"type":"boolean"},"monthlyNet":{"type":"number"},"weeklyGross":{"type":"number"},"ghsDeduction":{"type":"number"},"incomeTax":{"type":"number"},"yearsWorked":{"type":"number"},"totalUnits":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["estimatedMonthlyPension","estimatedAnnualPension","basicPensionComponent","earningsRelatedComponent","minimumPensionApplied","qualifiesForPension","monthlyNet","weeklyGross","ghsDeduction","incomeTax","yearsWorked","totalUnits","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"5.0.0","since":"1.0.0","status":"stable","changedIn":["14.0.0","7.0.0","5.0.0","3.0.0","2.0.0","1.10.0","1.2.0","1.1.0"],"deprecated":false}},{"name":"run_retirement_stress_test","description":"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.","inputSchema":{"type":"object","properties":{"currentAge":{"type":"integer","minimum":18,"description":"Age today."},"retirementAge":{"type":"integer","minimum":18,"description":"Planned retirement age."},"endAge":{"type":"integer","default":90,"description":"Planning horizon age (default 90)."},"currentSavings":{"type":"number","minimum":0,"description":"Current investable savings balance in EUR."},"monthlyContribution":{"type":"number","description":"Monthly contribution until retirement in EUR."},"expectedAnnualReturn":{"type":"number","default":6,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"expectedAnnualReturnRetirement":{"type":"number","default":4,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"monthlyDrawdown":{"type":"number","description":"Planned monthly withdrawal in retirement in EUR."},"inflationRate":{"type":"number","default":2.5,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"statePension":{"type":"number","minimum":0,"description":"Expected monthly state pension in EUR."},"pensionStreams":{"type":"array","description":"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.","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["cyprus","foreign"]},"startAge":{"type":"number","minimum":0},"currency":{"type":"string"},"fxRateToEur":{"type":"number","exclusiveMinimum":0},"grossAnnual":{"type":"number","minimum":0},"netAnnualOverride":{"type":["number","null"],"minimum":0}},"required":["id","name","kind","startAge","currency","fxRateToEur","grossAnnual"],"additionalProperties":false}},"simulations":{"type":"integer","minimum":100,"maximum":5000,"default":1000,"description":"Monte Carlo runs (default 1000)."},"seed":{"type":"integer","minimum":0,"maximum":4294967295,"description":"Optional unsigned 32-bit seed for repeatable runs with identical inputs and implementation versions. Omit to keep the run stochastic."}},"additionalProperties":false,"required":["currentAge","retirementAge","currentSavings","monthlyContribution","monthlyDrawdown"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"successProbability":{"type":"number"},"medianDepletionAge":{"type":["number","null"]},"averageDepletionAge":{"type":["number","null"]},"deterministicFinalBalance":{"type":"number"},"worstCase10thPercentileBalance":{"type":"number"},"medianTerminalWealth":{"type":"number"},"shockRunRate":{"type":"number"},"acuteRunRate":{"type":"number"},"ltcRunRate":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["successProbability","medianDepletionAge","averageDepletionAge","deterministicFinalBalance","worstCase10thPercentileBalance","medianTerminalWealth","shockRunRate","acuteRunRate","ltcRunRate","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"6.0.0","since":"1.0.0","status":"stable","changedIn":["16.0.0","10.0.0","7.0.0","5.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"calculate_cyprus_unemployment_benefit","description":"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.","inputSchema":{"type":"object","properties":{"applicationDate":{"type":"string","format":"date","description":"Actual claim date as YYYY-MM-DD."},"annualGrossEarnings":{"type":"number","minimum":0,"description":"Actual gross insurable earnings in EUR for the contribution year selected by applicationDate."},"dependentSpouse":{"type":"boolean","description":"Whether the claimant has a dependent spouse not in paid work; ask if unknown."},"dependentChildren":{"type":"integer","minimum":0,"description":"Actual number of dependent children or other dependants; ask if unknown (benefit calculation caps at 3)."},"actualBasicInsurancePoints":{"type":"number","minimum":0,"description":"Actual paid basic insurance points accumulated by claim date; 0.5 required for entitlement."},"weeksSinceFirstInsurance":{"type":"integer","minimum":0,"description":"Weeks elapsed since first insurance; at least 26 required."},"relevantYearInsurancePoints":{"type":"number","minimum":0,"description":"Actual plus assimilated insurance points in the relevant contribution year; at least 0.39 required."},"registeredUnemployed":{"type":"boolean","description":"Whether registered unemployed with the competent offices."},"capableAndAvailableForWork":{"type":"boolean","description":"Whether capable of and available for work during the claim."},"isEmployee":{"type":"boolean","description":"Whether the claimant was insured as an employee rather than self-employed."}},"additionalProperties":false,"required":["applicationDate","annualGrossEarnings","dependentSpouse","dependentChildren"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"weeklyBenefit":{"type":"number"},"monthlyBenefit":{"type":"number"},"maxEntitlementWeeks":{"type":"number"},"dependentSupplement":{"type":"number"},"earningsRelatedSupplement":{"type":"number"},"eligibilityStatus":{"type":"string","enum":["eligible","ineligible","undetermined"]},"eligible":{"type":["boolean","null"]},"missingEligibilityFacts":{"type":"array","items":{"type":"string"}},"missingEligibilityQuestions":{"type":"array","items":{"type":"string"}},"failedEligibilityConditions":{"type":"array","items":{"type":"string"}},"relevantContributionYear":{"type":["number","null"]},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["weeklyBenefit","monthlyBenefit","maxEntitlementWeeks","dependentSupplement","earningsRelatedSupplement","eligibilityStatus","eligible","missingEligibilityFacts","missingEligibilityQuestions","failedEligibilityConditions","relevantContributionYear","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"4.0.0","since":"1.0.0","status":"stable","changedIn":["15.0.0","5.0.0","3.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"get_pension_reference_data","description":"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.","inputSchema":{"type":"object","properties":{"year":{"type":"integer","minimum":1981,"description":"Reference year."}},"additionalProperties":false,"required":["year"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"weeklyBasicInsurableEarnings":{"type":"number"},"annualBasicInsurableEarnings":{"type":"number"},"annualMaxInsurableEarnings":{"type":"number"},"maxUnitsPerYear":{"type":"number"},"statutoryPensionAge":{"type":"number"},"minimumContributionYears":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["weeklyBasicInsurableEarnings","annualBasicInsurableEarnings","annualMaxInsurableEarnings","maxUnitsPerYear","statutoryPensionAge","minimumContributionYears","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.0.0","status":"stable","changedIn":["5.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"parse_pension_statement","description":"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.","inputSchema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Pasted statement text."}},"additionalProperties":false,"required":["text"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"contributionYears":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer"},"units":{"type":"number"}},"required":["year","units"],"additionalProperties":false}},"totalUnits":{"type":"number"},"totalContributionYears":{"type":"number"},"parseConfidence":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["contributionYears","totalUnits","totalContributionYears","parseConfidence","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.0.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"calculate_cyprus_capital_gains","description":"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.","inputSchema":{"type":"object","properties":{"taxYear":{"type":"string","enum":["2025","2026"],"default":"2026","description":"Disposal tax year; defaults to the current 2026 rules and selects year-specific lifetime allowances."},"acquisitionPrice":{"type":"number","exclusiveMinimum":0,"description":"Purchase price in the original currency."},"currency":{"type":"string","enum":["EUR","CYP"],"default":"EUR","description":"EUR (default) or CYP for pre-2008 purchases (converted at 0.585274)."},"acquisitionYear":{"type":"integer","minimum":1960,"description":"Calendar year the property was acquired."},"salePrice":{"type":"number","exclusiveMinimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"agentFees":{"type":"number","minimum":0,"description":"Estate agent / legal fees deducted from the sale price, EUR."},"propertyType":{"type":"string","enum":["plot","house","agricultural","other"],"description":"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."},"isFirstDisposal":{"type":"boolean","description":"Whether the lifetime first-disposal exemption is being claimed. Omission means no exemption is claimed."}},"additionalProperties":false,"required":["acquisitionPrice","acquisitionYear","salePrice","propertyType"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"acquisitionPriceEUR":{"type":"number"},"currentValuation":{"type":"number"},"netSalePrice":{"type":"number"},"taxExemption":{"type":"number"},"taxableGain":{"type":"number"},"capitalGainsTax":{"type":"number"},"propertyTransferFee":{"type":"number"},"totalTaxDue":{"type":"number"},"netProceeds":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["acquisitionPriceEUR","currentValuation","netSalePrice","taxExemption","taxableGain","capitalGainsTax","propertyTransferFee","totalTaxDue","netProceeds","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.5.0","status":"stable","changedIn":["13.1.0","10.0.0","5.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"simulate_mortgage","description":"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.","inputSchema":{"type":"object","properties":{"mortgageAmount":{"type":"number","exclusiveMinimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"mortgageType":{"type":"string","enum":["capital_and_interest","interest_only"],"description":"Repayment structure. Defaults to capital_and_interest.","default":"capital_and_interest"},"loanPeriodYears":{"type":"integer","minimum":1,"maximum":40,"description":"Loan term in years."},"fixedPeriodYears":{"type":"integer","minimum":0,"description":"Actual number of years at the fixed rate before variable pricing (0 means fully variable); ask if unknown."},"fixedRate":{"type":"number","minimum":0,"maximum":25,"description":"Actual all-in annual fixed rate in percent, required when a fixed period applies."},"variableBaseRate":{"type":"number","minimum":0,"maximum":25,"description":"Actual annual reference rate (such as ECB or Euribor) in percent, for the variable phase."},"bankMargin":{"type":"number","minimum":0,"maximum":25,"description":"Actual bank margin in annual percentage points added to the variable base rate; do not split an all-in rate without confirmation."},"monthlyOverpayment":{"type":"number","minimum":0,"description":"Extra amount paid each month, EUR."},"overpaymentPeriodType":{"type":"string","enum":["full","first","last"],"description":"When overpayments are made across the term."},"overpaymentYearsCount":{"type":"integer","minimum":0,"description":"Number of years overpayments run when period type is first/last."},"upfrontFees":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"feesAddedToLoan":{"type":"boolean","description":"Whether upfront fees are capitalised into the loan."},"ercPercentage":{"type":"number","minimum":0,"description":"Early repayment charge, percent of the balance."},"ercPeriodYears":{"type":"integer","minimum":0,"description":"Years the early repayment charge applies."},"closureFee":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"lumpSumOverpayments":{"type":"array","description":"One-off overpayments.","items":{"type":"object","properties":{"month":{"type":"integer","minimum":1,"description":"Month number from the start of the loan."},"amount":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."}}}}},"additionalProperties":false,"required":["mortgageAmount","loanPeriodYears","fixedPeriodYears"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"minRequiredPayment":{"type":"number"},"totalMonthlyPayment":{"type":"number"},"totalInterestPaid":{"type":"number"},"sumOfAllPayments":{"type":"number"},"balloonDue":{"type":"number"},"closureCashRequired":{"type":"number"},"earlyRepaymentBalanceYear3":{"type":"number"},"earlyRepaymentChargeYear3":{"type":"number"},"earlyRepaymentClosureCashYear3":{"type":"number"},"actualRepaymentMonths":{"type":"integer"},"actualRepaymentYears":{"type":"number"},"avgAnnualCapitalPayment":{"type":"number"},"avgAnnualInterestPayment":{"type":"number"},"totalInterestByScenario":{"type":"object","additionalProperties":{"type":"number"}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["minRequiredPayment","totalMonthlyPayment","totalInterestPaid","sumOfAllPayments","balloonDue","closureCashRequired","earlyRepaymentBalanceYear3","earlyRepaymentChargeYear3","earlyRepaymentClosureCashYear3","actualRepaymentMonths","actualRepaymentYears","avgAnnualCapitalPayment","avgAnnualInterestPayment","totalInterestByScenario","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"4.0.0","since":"1.5.0","status":"stable","changedIn":["16.0.0","5.0.0","3.0.0","2.0.1","2.0.0","1.10.0"],"deprecated":false}},{"name":"calculate_stock_options","description":"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.","inputSchema":{"type":"object","properties":{"annualGrossSalary":{"type":"number","minimum":0,"description":"Gross annual salary in EUR (sets the marginal band and the 2x annual cap)."},"numberOfShares":{"type":"number","exclusiveMinimum":0,"description":"Number of options being exercised."},"exercisePrice":{"type":"number","minimum":0,"description":"Strike price per share, EUR."},"marketPrice":{"type":"number","exclusiveMinimum":0,"description":"Market price per share at exercise, EUR."},"prior10YearOptionIncome":{"type":"number","minimum":0,"description":"Option income already used against the €1m rolling 10-year cap, EUR."},"isApprovedScheme":{"type":"boolean","description":"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."}},"additionalProperties":false,"required":["annualGrossSalary","numberOfShares","exercisePrice","marketPrice","isApprovedScheme"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"totalGain":{"type":"number"},"gainPerShare":{"type":"number"},"tax2025":{"type":"object","properties":{"taxOnGain":{"type":"number"},"totalTaxableIncome":{"type":"number"},"effectiveRate":{"type":"number"}},"required":["taxOnGain","totalTaxableIncome","effectiveRate"],"additionalProperties":false},"tax2026":{"type":"object","properties":{"annualCap":{"type":"number"},"lifetimeRemaining":{"type":"number"},"eligibleForFlatRate":{"type":"number"},"excessGain":{"type":"number"},"flatRateTax":{"type":"number"},"excessTax":{"type":"number"},"totalTax":{"type":"number"},"effectiveRate":{"type":"number"},"capWarnings":{"type":"array","items":{"type":"string"}}},"required":["annualCap","lifetimeRemaining","eligibleForFlatRate","excessGain","flatRateTax","excessTax","totalTax","effectiveRate","capWarnings"],"additionalProperties":false},"taxSavings":{"type":"number"},"savingsPercentage":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["totalGain","gainPerShare","tax2025","tax2026","taxSavings","savingsPercentage","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.5.0","status":"stable","changedIn":["5.0.0","3.0.1","3.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"compare_rent_vs_buy","description":"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.","inputSchema":{"type":"object","properties":{"propertyPrice":{"type":"number","exclusiveMinimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"downPayment":{"type":"number","minimum":0,"description":"Deposit amount. If the user gives no unit, ask whether it is EUR or a percentage before interpreting or calculating."},"downPaymentIsPercentage":{"type":"boolean","description":"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."},"mortgageInterestRate":{"type":"number","minimum":0,"maximum":25,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"mortgageTermYears":{"type":"integer","minimum":1,"maximum":40,"description":"Mortgage term in years."},"legalFees":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"transferFees":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"agentCommission":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"stampDuty":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"propertyTaxYearly":{"type":"number","minimum":0,"description":"Annual property tax, EUR."},"localAuthorityTax":{"type":"number","minimum":0,"description":"Annual local authority tax, EUR."},"homeInsurance":{"type":"number","minimum":0,"description":"Annual home insurance, EUR."},"maintenancePercentage":{"type":"number","minimum":0,"default":1,"description":"Annual maintenance as a percent of property value (model default 1%)."},"maintenanceFixed":{"type":"number","minimum":0,"description":"Annual maintenance in EUR when not using the percentage."},"useMaintenancePercentage":{"type":"boolean","default":true,"description":"Use the percentage instead of the fixed maintenance figure (default true)."},"fittingsFurniture":{"type":"number","minimum":0,"description":"One-off furnishing cost when buying, EUR."},"monthlyRent":{"type":"number","exclusiveMinimum":0,"description":"Current monthly rent, EUR."},"securityDepositMonths":{"type":"number","minimum":0,"description":"Deposit expressed in months of rent."},"agencyFees":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"rentFurniture":{"type":"number","minimum":0,"description":"One-off furnishing cost when renting, EUR."},"commonAreaExpenses":{"type":"number","minimum":0,"description":"Monthly communal charges when renting, EUR."},"rentYearlyIncrease":{"type":"number","minimum":0,"default":2,"description":"Assumed annual rent increase, percent (default 2)."},"investmentReturnRate":{"type":"number","default":5,"description":"Assumed annual investment return, percent (default 5)."},"propertyAppreciationRate":{"type":"number","default":3,"description":"Assumed annual property appreciation, percent (default 3)."},"generalInflationRate":{"type":"number","default":2,"description":"Assumed annual inflation, percent (default 2)."},"salesCommissionRate":{"type":"number","minimum":0,"default":5,"description":"Assumed selling commission on exit, percent (default 5%)."},"transferTaxOnSale":{"type":"number","minimum":0,"default":0,"description":"Assumed transfer tax on exit, percent (default 0%)."},"analysisPeriodYears":{"type":"integer","minimum":1,"maximum":50,"default":30,"description":"Comparison horizon in years (default 30)."}},"additionalProperties":false,"required":["propertyPrice","monthlyRent","downPayment","downPaymentIsPercentage","mortgageInterestRate","mortgageTermYears"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"breakevenYear":{"type":["number","null"]},"monthlyMortgagePayment":{"type":"number"},"buyInitialCash":{"type":"number"},"rentInitialCash":{"type":"number"},"totalCostBuy":{"type":"number"},"totalCostRent":{"type":"number"},"buyNetWealthFinal":{"type":"number"},"rentNetWealthFinal":{"type":"number"},"opportunityCostGain":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["breakevenYear","monthlyMortgagePayment","buyInitialCash","rentInitialCash","totalCostBuy","totalCostRent","buyNetWealthFinal","rentNetWealthFinal","opportunityCostGain","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.0.0","since":"1.5.0","status":"stable","changedIn":["16.0.0","5.0.0","3.0.1","2.0.1","2.0.0","1.10.0"],"deprecated":false}},{"name":"calculate_ev_savings","description":"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.","inputSchema":{"type":"object","properties":{"annualDistance":{"type":"number","exclusiveMinimum":0,"description":"Kilometres driven per year."},"iceConsumption":{"type":"number","minimum":0,"description":"Petrol/diesel consumption in litres per 100 km."},"fuelPrice":{"type":"number","minimum":0,"description":"Fuel price in EUR per litre."},"evConsumption":{"type":"number","exclusiveMinimum":0,"description":"EV consumption in Wh per km (e.g. 170)."},"chargingEfficiency":{"type":"number","minimum":1,"maximum":100,"default":92,"description":"Wall-to-battery charging efficiency, percent (default 92)."},"spareSolar":{"type":"number","minimum":0,"description":"Spare solar production available for charging, kWh per year."},"gridElectricityPrice":{"type":"number","minimum":0,"description":"Home electricity price in EUR per kWh."},"solarDirectShare":{"type":"number","minimum":0,"maximum":100,"description":"Share of home charging covered directly by solar, percent."},"homeGridShare":{"type":"number","minimum":0,"maximum":100,"description":"Share of home charging drawn from the grid, percent."},"publicChargingPrice":{"type":"number","minimum":0,"description":"Public charging price in EUR per kWh."},"extraEvCost":{"type":"number","minimum":0,"description":"Extra purchase cost of the EV versus the petrol/diesel alternative, EUR."},"iceService":{"type":"number","minimum":0,"description":"Annual servicing cost of the petrol/diesel car, EUR."},"iceOilChange":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"iceInsurance":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"iceRoadTax":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"iceOther":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"evInsurance":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"evRoadTax":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"evOther":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"projectionYears":{"type":"integer","minimum":1,"maximum":30,"default":10,"description":"Horizon of the cumulative savings series (default 10)."}},"additionalProperties":false,"required":["annualDistance","iceConsumption","fuelPrice","evConsumption"],"allOf":[{"if":{"properties":{"homeGridShare":{"exclusiveMinimum":0}},"required":["homeGridShare"]},"then":{"required":["gridElectricityPrice"]}},{"if":{"properties":{"solarDirectShare":{"exclusiveMinimum":0}},"required":["solarDirectShare"]},"then":{"required":["spareSolar"]}}]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"iceFuelCost":{"type":"number"},"iceAdditionalCosts":{"type":"number"},"iceTotalAnnualCost":{"type":"number"},"evEnergyAtWall":{"type":"number"},"solarDirectEnergy":{"type":"number"},"homeGridEnergy":{"type":"number"},"publicChargingEnergy":{"type":"number"},"excessSolarNeeded":{"type":"number"},"solarDirectCost":{"type":"number"},"homeGridCost":{"type":"number"},"publicChargingCost":{"type":"number"},"totalElectricityCost":{"type":"number"},"evAdditionalCosts":{"type":"number"},"evTotalAnnualCost":{"type":"number"},"yearlySavings":{"type":"number"},"paybackYears":{"type":["number","null"]},"savingsByYear":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer"},"cumulativeSavings":{"type":"number"}},"required":["year","cumulativeSavings"],"additionalProperties":false}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["iceFuelCost","iceAdditionalCosts","iceTotalAnnualCost","evEnergyAtWall","solarDirectEnergy","homeGridEnergy","publicChargingEnergy","excessSolarNeeded","solarDirectCost","homeGridCost","publicChargingCost","totalElectricityCost","evAdditionalCosts","evTotalAnnualCost","yearlySavings","paybackYears","savingsByYear","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.5.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"compare_investment_vehicles","description":"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.","inputSchema":{"type":"object","properties":{"netInvestment":{"type":"number","exclusiveMinimum":0,"description":"Annual GROSS contribution into option 2, EUR. Option 1 receives the equivalent out-of-pocket amount."},"taxDeductionRate":{"type":"number","minimum":0,"maximum":100,"description":"User's marginal tax relief on option 2 contributions, percent."},"maxYears":{"type":"integer","minimum":1,"maximum":60,"default":30,"description":"Horizon in years (default 30)."},"opt1EntryFee":{"type":"number","minimum":0,"description":"One-off entry fee on option 1, EUR."},"opt1ExitFee":{"type":"number","minimum":0,"description":"One-off exit fee on option 1, EUR."},"opt1AnnualReturn":{"type":"number","default":5,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"opt1ExitTax":{"type":"number","minimum":0,"maximum":100,"description":"Tax on option 1 gains at exit, percent."},"opt1MonthlyFee":{"type":"number","minimum":0,"description":"Fixed monthly fee on option 1, EUR."},"opt2AnnualReturn":{"type":"number","default":5,"description":"Annual percentage value (e.g. 2.5 for 2.5%). Supply the actual rate unless the user accepts a stated modelling default."},"opt2AumFee":{"type":"number","minimum":0,"maximum":100,"description":"Annual management fee on option 2, percent."},"opt2AdditionalFee":{"type":"number","minimum":0,"maximum":100,"description":"Additional annual fee on option 2, percent."},"opt2MonthlyFee":{"type":"number","minimum":0,"description":"Fixed monthly fee on option 2, EUR."},"opt2ExitTax":{"type":"number","minimum":0,"maximum":100,"description":"Tax on option 2 at exit, percent."},"opt2Commission":{"type":"number","minimum":0,"maximum":100,"description":"Percent of the FIRST year's contributions taken as commission."}},"additionalProperties":false,"required":["netInvestment","taxDeductionRate","opt2AumFee"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"crossoverYear":{"type":["number","null"]},"option1AnnualContribution":{"type":"number"},"option2AnnualContribution":{"type":"number"},"option1Final":{"type":"number"},"option2Final":{"type":"number"},"winner":{"type":"string","enum":["option1","option2","tie"]},"advantageAtHorizon":{"type":"number"},"leadershipPeriods":{"type":"array","items":{"type":"object","properties":{"startYear":{"type":"integer"},"endYear":{"type":"integer"},"leader":{"type":"string","enum":["option1","option2","tie"]}},"required":["startYear","endYear","leader"],"additionalProperties":false}},"finalLeadStartYear":{"type":["number","null"]},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["crossoverYear","option1AnnualContribution","option2AnnualContribution","option1Final","option2Final","winner","advantageAtHorizon","leadershipPeriods","finalLeadStartYear","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.5.0","status":"stable","changedIn":["5.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"plan_monthly_budget","description":"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.","inputSchema":{"type":"object","properties":{"monthlyNetIncome":{"type":"number","minimum":0,"description":"Take-home monthly income, EUR (net of tax, social insurance and GESY); zero is valid but savings rate is unavailable."},"expenses":{"type":"array","minItems":1,"description":"Expense items. Known catalogue keys (mortgageRent, groceries, netflix, fuel, ...) are tiered automatically; otherwise pass an explicit tier.","items":{"type":"object","properties":{"key":{"type":"string","description":"Catalogue key or free-form label."},"amount":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"frequency":{"type":"string","enum":["monthly","weekly","quarterly","semiannual","yearly","oneoff"],"default":"monthly","description":"Payment frequency; everything is normalised to monthly. Default monthly."},"tier":{"type":"string","enum":["T1","T2","T3","T4"],"description":"Override the automatic tier."},"category":{"type":"string","description":"Optional grouping label (housing, transportation, ...)."}},"additionalProperties":false,"required":["key","amount"]}},"monthlyInvestments":{"type":"number","minimum":0,"description":"Recurring monthly investments/savings, EUR."},"targetSavingsRate":{"type":"number","minimum":0,"maximum":100,"description":"Savings-rate goal as a percent of net income."},"projectionYears":{"type":"integer","minimum":1,"maximum":40,"default":10,"description":"Horizon of the surplus projection (default 10)."},"expectedAnnualReturn":{"type":"number","default":0,"description":"Assumed annual return on invested surplus, percent (default 0)."}},"required":["monthlyNetIncome","expenses"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"monthlyNetIncome":{"type":"number"},"totalMonthlyExpenses":{"type":"number"},"tierTotals":{"type":"object","additionalProperties":{"type":"number"}},"categoryTotals":{"type":"object","additionalProperties":{"type":"number"}},"monthlyInvestments":{"type":"number"},"disposableIncome":{"type":"number"},"monthlySurplus":{"type":"number"},"savingsRate":{"type":["number","null"]},"annualExpenses":{"type":"number"},"largestLeak":{"anyOf":[{"type":"null"},{"type":"object","properties":{"key":{"type":"string"},"amount":{"type":"number"}},"required":["key","amount"],"additionalProperties":false}]},"discretionaryTotal":{"type":"number"},"targetSavingsRate":{"type":"number"},"targetMonthlySavings":{"type":"number"},"savingsGap":{"type":"number"},"projection":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer"},"cumulativeSurplus":{"type":"number"}},"required":["year","cumulativeSurplus"],"additionalProperties":false}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["monthlyNetIncome","totalMonthlyExpenses","tierTotals","categoryTotals","monthlyInvestments","disposableIncome","monthlySurplus","savingsRate","annualExpenses","largestLeak","discretionaryTotal","targetSavingsRate","targetMonthlySavings","savingsGap","projection","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.5.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.10.0"],"deprecated":false}},{"name":"analyze_portfolio","description":"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.","inputSchema":{"type":"object","properties":{"portfolioName":{"type":"string","description":"Optional label for the portfolio."},"baseCurrency":{"type":"string","description":"Reporting currency (e.g. EUR). Transactions in another currency require fxRate."},"asOfDate":{"type":"string","description":"Optional ISO date (YYYY-MM-DD) used as the CAGR end date. Defaults to today."},"subPortfolios":{"type":"array","minItems":1,"maxItems":50,"description":"One entry per account, broker or strategy sleeve.","items":{"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string","description":"Currency the transactions are denominated in."},"type":{"type":"string","enum":["cash_flow","holdings"],"description":"cash_flow: transaction ledger sleeve. holdings: EOD snapshot sleeve valued from holdings closes (transactions may be empty)."},"cashBalance":{"type":"number","minimum":0,"description":"Uninvested cash swept into a holdings sleeve's value (counts 1:1 on invested and current value)."},"cashLabel":{"type":"string","description":"Cash bucket label (e.g. emergency, savings, collateral, current)."},"holdings":{"type":"array","maxItems":200,"description":"Positions for a holdings sleeve. Omitted avgCostPrice tracks returns from today (day-1 return 0%).","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Ticker, e.g. VWCE."},"yahooSymbol":{"type":"string","description":"Resolved Yahoo symbol, e.g. VWCE.MI."},"name":{"type":"string"},"shares":{"type":"number","exclusiveMinimum":0},"avgCostPrice":{"type":"number","exclusiveMinimum":0},"currency":{"type":"string"},"currentPrice":{"type":"number","exclusiveMinimum":0},"fxRate":{"type":"number","exclusiveMinimum":0,"description":"Legacy alias for fxRateToBase."},"asOfDate":{"type":"string","description":"Bar date of currentPrice (YYYY-MM-DD)."},"fxRateToBase":{"type":"number","exclusiveMinimum":0},"isin":{"type":"string"},"acquiredDate":{"type":"string","description":"Vintage powering per-holding CAGR (YYYY-MM-DD)."},"ownershipShare":{"type":"number","minimum":0,"maximum":1},"notes":{"type":"string"}},"additionalProperties":false,"required":["symbol","shares","currentPrice"]}},"transactions":{"type":"array","minItems":0,"maxItems":1000,"description":"Ledger for cash_flow sleeves. May be empty for holdings sleeves (valued from holdings closes).","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"type":{"type":"string","enum":["Deposit","Withdrawal","Value"],"description":"Deposit/Withdrawal are cash flows; Value is a portfolio valuation snapshot."},"amount":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"fxRate":{"type":"number","exclusiveMinimum":0,"description":"Units of sub-portfolio currency per one unit of base currency. Required when currencies differ."}},"additionalProperties":false,"required":["date","type","amount"]}}},"required":["name","currency"],"allOf":[{"if":{"properties":{"type":{"const":"holdings"}},"required":["type"]},"then":{"required":["holdings"]}},{"if":{"properties":{"type":{"const":"cash_flow"}},"required":["type"]},"then":{"required":["transactions"]}}]}}},"required":["baseCurrency","subPortfolios"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"portfolioName":{"type":"string"},"baseCurrency":{"type":"string"},"totalInvested":{"type":"number"},"totalInitialInvested":{"type":"number"},"currentValue":{"type":"number"},"totalGain":{"type":"number"},"absoluteReturn":{"type":"number"},"timeWeightedReturn":{"type":["number","null"]},"twrUnavailableReason":{"type":["string","null"]},"cagr":{"type":["number","null"]},"firstDepositDate":{"type":["string","null"]},"subPortfolios":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"currency":{"type":"string"},"invested":{"type":"number"},"initialInvested":{"type":"number"},"currentValue":{"type":"number"},"gain":{"type":"number"},"absoluteReturn":{"type":"number"},"timeWeightedReturn":{"type":["number","null"]},"twrUnavailableReason":{"type":["string","null"]},"cagr":{"type":["number","null"]},"allocationShare":{"type":"number"},"firstDepositDate":{"type":["string","null"]},"deposits":{"type":"number"},"withdrawals":{"type":"number"}},"required":[],"additionalProperties":true}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.6.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.14.0","1.10.0","1.6.0"],"deprecated":false}},{"name":"simulate_life_insurance_flush","description":"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.","inputSchema":{"type":"object","properties":{"contractStartYear":{"type":"integer","description":"Calendar year the policy started. Partial surrenders are only tax-free from the 4th policy year."},"age":{"type":"integer","minimum":18,"maximum":90,"description":"Current age of the policyholder."},"gender":{"type":"string","enum":["male","female"],"description":"Used to look up mortality rates."},"capitalSumInsured":{"type":"number","minimum":0,"description":"Death benefit / sum insured, EUR. Mortality cost applies to the amount at risk above the fund value."},"aumFee":{"type":"number","minimum":0,"maximum":10,"description":"Annual management fee as a percent of fund value."},"monthlyFee":{"type":"number","minimum":0,"description":"Fixed policy fee charged each month, EUR."},"investmentReturn":{"type":"number","description":"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."},"taxBracket":{"type":"number","minimum":0,"maximum":60,"description":"Marginal income tax rate applied to taxable surrender amounts and to premium relief, percent."},"reinvestWithdrawals":{"type":"boolean","description":"When true, net withdrawals are reinvested in a broker account and IRR is computed on combined wealth."},"brokerReturnRate":{"type":"number","description":"Annual return of the broker account, percent (used with useDifferentBrokerReturn)."},"useDifferentBrokerReturn":{"type":"boolean","description":"Use brokerReturnRate instead of investmentReturn for the broker account."},"historicalData":{"type":"array","minItems":1,"description":"Actual policy history; the last entry's endingBalance is the simulation's opening balance, and the 3/4-year lookbacks drive the safe limit.","items":{"type":"object","properties":{"year":{"type":"integer"},"endingBalance":{"type":"number","minimum":0,"description":"Fund value at 31 December, EUR."},"premiumsPaid":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"withdrawalsMade":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."}},"additionalProperties":false,"required":["year","endingBalance","premiumsPaid","withdrawalsMade"]}},"projections":{"type":"array","minItems":1,"maxItems":60,"description":"Future years to simulate.","items":{"type":"object","properties":{"year":{"type":"integer"},"monthlyPremium":{"type":"number","minimum":0,"description":"EUR amount. Supply the actual value when applicable; use 0 only when confirmed to be zero."},"plannedWithdrawal":{"type":"number","minimum":0,"description":"Withdrawal to attempt in this year (userInput scenario only)."},"isSelfFunded":{"type":"boolean","description":"Premium funded by withdrawing from the policy itself; costs a 5% spread each month."}},"required":["year","monthlyPremium"]}},"scenario":{"type":"string","enum":["maxTaxFree","userInput","noWithdrawals"],"description":"Which scenario to report as the primary result (default userInput). All three are always returned for comparison."}},"required":["contractStartYear","age","gender","capitalSumInsured","aumFee","monthlyFee","investmentReturn","taxBracket","historicalData","projections"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"scenario":{"type":"string","enum":["maxTaxFree","userInput","noWithdrawals"]},"finalBalance":{"type":"number"},"finalPolicyBalance":{"type":"number"},"finalBrokerBalance":{"type":"number"},"netWithdrawalsPaidOut":{"type":"number"},"totalWithdrawn":{"type":"number"},"totalFeesPaid":{"type":"number"},"totalMortalityCost":{"type":"number"},"totalTaxPaid":{"type":"number"},"totalTaxSaved":{"type":"number"},"totalSelfFundedCost":{"type":"number"},"irr":{"type":["number","null"]},"irrPerspective":{"type":"string"},"irrUnavailableReason":{"type":["string","null"]},"irrWithTax":{"type":["number","null"]},"irrWithoutTax":{"type":["number","null"]},"irrWithTaxPerspective":{"type":"string"},"irrWithoutTaxPerspective":{"type":"string"},"safeLimitByYear":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer"},"safeLimit":{"type":"number"},"balance4YrAgo":{"type":"number"},"priorPremiums3Yr":{"type":"number"},"priorWithdrawals3Yr":{"type":"number"},"netExcessWithdrawals":{"type":"number"},"policyMature":{"type":"boolean"}},"required":["year","safeLimit","balance4YrAgo","priorPremiums3Yr","priorWithdrawals3Yr","netExcessWithdrawals","policyMature"],"additionalProperties":false}},"scenarioComparison":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["maxTaxFree","userInput","noWithdrawals"]},"finalBalance":{"type":"number"},"finalPolicyBalance":{"type":"number"},"finalBrokerBalance":{"type":"number"},"netWithdrawalsPaidOut":{"type":"number"},"totalWithdrawn":{"type":"number"},"totalTaxPaid":{"type":"number"},"irr":{"type":["number","null"]},"irrWithTax":{"type":["number","null"]},"irrWithoutTax":{"type":["number","null"]}},"required":[],"additionalProperties":true}},"mortalityDataAvailable":{"type":"boolean"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"5.0.0","since":"1.6.0","status":"stable","changedIn":["16.0.0","5.0.0","4.0.0","3.0.0","2.0.0","1.10.0","1.6.0"],"deprecated":false}},{"name":"audit_mortgage_statement","description":"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.","inputSchema":{"type":"object","properties":{"rows":{"type":"array","minItems":1,"maxItems":2000,"description":"Parsed statement rows in chronological order. At least one row must carry ratePct.","items":{"type":"object","properties":{"date":{"type":"string","description":"ISO date (YYYY-MM-DD)."},"description":{"type":"string"},"signedAmount":{"type":"number","description":"Positive increases the outstanding balance (drawdown, interest posting, fee); negative reduces it (payment)."},"kind":{"type":"string","enum":["drawdown","payment","interest_post","fee","adjustment","other"],"description":"Row type. interest_post rows are the bank's own interest charges and are what the audit compares against."},"balanceAfter":{"type":"number","description":"Outstanding balance the statement reports after this row, EUR. Used as the fit checkpoint."},"ratePct":{"type":"number","minimum":0,"maximum":30,"description":"Annual nominal rate in effect from this row onwards, percent."}},"additionalProperties":false,"required":["date","signedAmount"]}},"topN":{"type":"integer","minimum":1,"maximum":10,"default":3,"description":"How many ranked candidate conventions to return (default 3)."},"includeRowDetail":{"type":"boolean","description":"Include the per-row expected balance / delta / flag detail (can be large)."},"rules":{"type":"object","description":"Skip the grid search and test one explicit convention.","properties":{"dayCount":{"oneOf":[{"type":"number","enum":[360,365]},{"type":"string","enum":["actual"]}]},"capitalization":{"type":"string","enum":["daily","monthly","quarterly","semiannual","annual"]},"capitalizationAnchor":{"type":"string","enum":["month_end","first_disbursement","fixed_dates"]},"fixedCapDates":{"type":"array","items":{"type":"string","description":"MM-DD"}},"dailyRounding":{"type":["number","null"],"description":"Decimals for daily interest rounding, or null for exact."},"ignoreBankCapRows":{"type":"boolean","description":"Do not add the bank's own interest postings to the simulated balance (default true)."}}}},"required":["rows"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"fitStatus":{"type":"string","enum":["unique","ambiguous","supplied"]},"equivalentCandidateCount":{"type":"integer"},"equivalentCandidates":{"type":"array","items":{"type":"object","properties":{"rulesLabel":{"type":"string"},"rmsDelta":{"type":"number"},"netOvercharge":{"type":"number"},"expectedInterest":{"type":"number"}},"required":["rulesLabel","rmsDelta","netOvercharge","expectedInterest"],"additionalProperties":false}},"expectedInterestRange":{"type":"object","properties":{"minimum":{"type":"number"},"maximum":{"type":"number"}},"required":["minimum","maximum"],"additionalProperties":false},"netOverchargeRange":{"type":"object","properties":{"minimum":{"type":"number"},"maximum":{"type":"number"}},"required":["minimum","maximum"],"additionalProperties":false},"bestFitLabel":{"type":"string"},"bestFitRules":{"type":"object","properties":{"dayCount":{"anyOf":[{"type":"integer","enum":[360,365]},{"type":"string","const":"actual"}]},"capitalization":{"type":"string"},"capitalizationAnchor":{"type":"string"},"fixedCapDates":{"type":"array","items":{"type":"string"}},"dailyRounding":{"type":["number","null"]},"ignoreBankCapRows":{"type":"boolean"}},"required":[],"additionalProperties":true},"bankInterest":{"type":"number"},"expectedInterest":{"type":"number"},"netOvercharge":{"type":"number"},"finalDelta":{"type":"number"},"rmsDelta":{"type":"number"},"observations":{"type":"integer"},"rowsAnalyzed":{"type":"integer"},"flaggedRows":{"type":"integer"},"periodStart":{"type":"string"},"periodEnd":{"type":"string"},"rankedCandidates":{"type":"array","items":{"type":"object","properties":{"rulesLabel":{"type":"string"},"rmsDelta":{"type":"number"},"netOvercharge":{"type":"number"},"expectedInterest":{"type":"number"}},"required":["rulesLabel","rmsDelta","netOvercharge","expectedInterest"],"additionalProperties":false}},"rowDetail":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"description":{"type":"string"},"ratePct":{"type":["number","null"]},"amount":{"type":"number"},"bankBalance":{"type":["number","null"]},"expectedBalance":{"type":"number"},"accruedInterest":{"type":"number"},"delta":{"type":"number"},"flag":{"type":"string","enum":["ok","warn","error"]},"isCapEvent":{"type":"boolean"}},"required":[],"additionalProperties":true}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["fitStatus","equivalentCandidateCount","equivalentCandidates","expectedInterestRange","netOverchargeRange","bestFitLabel","bestFitRules","bankInterest","expectedInterest","netOvercharge","finalDelta","rmsDelta","observations","rowsAnalyzed","flaggedRows","periodStart","periodEnd","rankedCandidates","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.6.0","status":"stable","changedIn":["5.0.0","2.0.0","1.10.0","1.6.0"],"deprecated":false}},{"name":"list_saved_calculations","description":"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.","inputSchema":{"type":"object","properties":{"calculationType":{"type":"string","title":"Calculator type","description":"Omit to list saved calculations across every calculator type.","enum":["income-tax","state-pension","retirement-planner","unemployment-benefit","capital-gains","investment-comparison"]},"calculationTypes":{"type":"array","title":"Calculator types filter","description":"Filter by several calculator types at once. Takes precedence over calculationType.","items":{"type":"string","enum":["income-tax","state-pension","retirement-planner","unemployment-benefit","capital-gains","investment-comparison"]}},"sort":{"type":"string","title":"Sort order","description":"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'.","enum":["recent","oldest","created_desc","created_asc","name_asc","name_desc"],"default":"recent"},"limit":{"type":"integer","title":"Page size","minimum":1,"maximum":100,"default":20},"offset":{"type":"integer","title":"Offset","minimum":0,"default":0,"description":"Rows to skip. Use with limit for page-number paging."},"cursor":{"type":"string","title":"Cursor","description":"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)."}},"additionalProperties":false,"required":[]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"calculations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"},"locked":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":[],"additionalProperties":true}},"totalCount":{"type":"integer"},"limit":{"type":"integer"},"offset":{"type":"integer"},"hasMore":{"type":"boolean"},"nextCursor":{"type":["string","null"]},"sort":{"type":"string"},"calculationTypes":{"type":"array","items":{"type":"string"}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.1.0","status":"stable","changedIn":["5.0.0","2.0.0","1.10.0","1.3.0","1.2.0"],"deprecated":false}},{"name":"load_saved_calculation","description":"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.","inputSchema":{"type":"object","properties":{"calculationId":{"type":"string","format":"uuid","description":"ID returned by list_saved_calculations."}},"additionalProperties":false,"required":["calculationId"]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"},"inputs":{"type":"object","additionalProperties":true},"result":{"type":"object","additionalProperties":true},"toolInput":{"type":"object","additionalProperties":true},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"locked":{"type":"boolean"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.1.0","status":"stable","changedIn":["5.0.0","2.0.0","1.12.0","1.10.0"],"deprecated":false}},{"name":"save_calculation","description":"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.","inputSchema":{"type":"object","properties":{"calculationType":{"type":"string","description":"Calculator type to save under.","enum":["income-tax","state-pension","retirement-planner","unemployment-benefit","capital-gains","investment-comparison"]},"name":{"type":"string","maxLength":200,"description":"Display name for the saved scenario."},"inputs":{"type":"object","description":"Tool-style inputs for the matching calculator (same shape its calculator tool accepts).","additionalProperties":true}},"additionalProperties":false,"required":["calculationType","inputs"]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"},"locked":{"type":"boolean"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","2.0.0","1.12.0","1.11.0"],"deprecated":false}},{"name":"update_calculation","description":"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.","inputSchema":{"type":"object","properties":{"calculationId":{"type":"string","format":"uuid","description":"ID returned by list_saved_calculations."},"name":{"type":"string","maxLength":200,"description":"New display name."},"inputs":{"type":"object","description":"Replacement tool-style inputs; results are recomputed server-side.","additionalProperties":true}},"additionalProperties":false,"required":["calculationId"]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"},"updatedAt":{"type":"string"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","2.0.0","1.12.0","1.11.0"],"deprecated":false}},{"name":"delete_saved_calculation","description":"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.","inputSchema":{"type":"object","properties":{"calculationId":{"type":"string","format":"uuid","description":"ID returned by list_saved_calculations."}},"additionalProperties":false,"required":["calculationId"]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"},"deleted":{"type":"boolean"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","2.0.0","1.11.0"],"deprecated":false}},{"name":"compare_saved_calculations","description":"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.","inputSchema":{"type":"object","properties":{"calculationIdA":{"type":"string","format":"uuid","description":"First saved calculation id."},"calculationIdB":{"type":"string","format":"uuid","description":"Second saved calculation id."}},"additionalProperties":false,"required":["calculationIdA","calculationIdB"]},"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"calculationA":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"}},"required":["id","name","calculationType"],"additionalProperties":false},"calculationB":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"calculationType":{"type":"string"}},"required":["id","name","calculationType"],"additionalProperties":false},"sameType":{"type":"boolean"},"totalDifferences":{"type":"integer"},"differences":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string"},"field":{"type":"string"},"valueA":{},"valueB":{}},"required":[],"additionalProperties":true}},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"oauth2","scopes":["saved_calculations"]}],"apiVersion":"16.0.0","version":"2.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","2.0.0","1.12.0","1.11.0"],"deprecated":false}},{"name":"parse_portfolio_csv","description":"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.","inputSchema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Pasted broker CSV or ledger lines (date + type + amount per row)."},"baseCurrency":{"type":"string","minLength":1,"description":"Actual base currency used for the parsed portfolio. Required; do not assume EUR."}},"additionalProperties":false,"required":["text","baseCurrency"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"transactions":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"type":{"type":"string"},"amount":{"type":"number"}},"required":[],"additionalProperties":true}},"subPortfolios":{"type":"array","items":{"type":"object","additionalProperties":true}},"baseCurrency":{"type":"string"},"parsedRows":{"type":"integer"},"skippedRows":{"type":"integer"},"parseConfidence":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.11.0"],"deprecated":false}},{"name":"parse_mortgage_statement_text","description":"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.","inputSchema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Pasted statement lines (date + description + amount per row, optional balance and rate%)."}},"additionalProperties":false,"required":["text"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"description":{"type":"string"},"signedAmount":{"type":"number"},"kind":{"type":"string"},"balanceAfter":{"type":["number","null"]}},"required":[],"additionalProperties":true}},"parsedRows":{"type":"integer"},"skippedRows":{"type":"integer"},"parseConfidence":{"type":"number"},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":[],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.1.0","since":"1.11.0","status":"stable","changedIn":["5.0.0","3.0.0","2.0.0","1.11.0"],"deprecated":false}},{"name":"optimize_company_director_remuneration","description":"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.","inputSchema":{"type":"object","properties":{"corporateGrossProfit":{"type":"number","minimum":0,"maximum":1000000,"description":"Annual company turnover/revenue in EUR, before operating expenses. Maximum supported value: €1,000,000."},"operatingExpenses":{"type":"number","minimum":0,"maximum":1000000,"description":"Annual deductible operating expenses in EUR (maximum €1,000,000)."},"annualCorporateAdminCost":{"type":"number","minimum":0,"maximum":1000000,"default":2000,"description":"Annual corporate admin, audit and compliance costs in EUR (Cyprus Companies Law Cap. 113). Defaults to 2000; maximum €1,000,000."},"taxYear":{"type":"string","enum":["2025","2026"],"description":"Tax/legislation year. Supported: 2025, 2026."},"isNonDomiciled":{"type":"boolean","description":"Non-dom status; exempts dividends from SDC."},"directorSalaryAllocation":{"type":"number","minimum":0,"maximum":1000000,"description":"Optional fixed director salary in EUR (maximum €1,000,000); omit to run the bounded solver for the optimal split."}},"additionalProperties":false,"required":["corporateGrossProfit","operatingExpenses","taxYear","isNonDomiciled"]},"securitySchemes":[{"type":"noauth"}],"outputSchema":{"type":"object","description":"Typed machine-readable tool result.","properties":{"optimalSalary":{"type":"number"},"optimalDividend":{"type":"number"},"corporateTax":{"type":"number"},"personalTaxes":{"type":"number"},"employerContributions":{"type":"number"},"employerBreakdown":{"type":"object","properties":{"socialInsurance":{"type":"number"},"redundancyFund":{"type":"number"},"trainingFund":{"type":"number"},"socialCohesionFund":{"type":"number"},"gesyEmployer":{"type":"number"},"total":{"type":"number"}},"required":["socialInsurance","redundancyFund","trainingFund","socialCohesionFund","gesyEmployer","total"],"additionalProperties":false},"netCash":{"type":"number"},"comparativeDeltaVsSole":{"type":["number","null"]},"assumptions":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{},"reason":{"type":"string"}},"required":["field","reason"],"additionalProperties":true}},"series":{"type":"array","items":{"type":"object","properties":{"chartId":{"type":"string"},"title":{"type":"string"},"xKey":{"type":"string"},"yKeys":{"type":"array","items":{"type":"string"}},"points":{"type":"array","items":{"type":"object","additionalProperties":true}}},"required":["chartId","xKey","yKeys","points"],"additionalProperties":true}}},"required":["optimalSalary","optimalDividend","corporateTax","personalTaxes","employerContributions","employerBreakdown","netCash","comparativeDeltaVsSole","assumptions"],"additionalProperties":true},"_meta":{"securitySchemes":[{"type":"noauth"}],"apiVersion":"16.0.0","version":"3.0.0","since":"1.17.0","status":"stable","changedIn":["11.0.0","5.0.0","2.0.0","1.17.0"],"deprecated":false}}],"requestId":"591e6b01-1abd-4605-b9db-cb8074efdb27","guestId":null,"apiVersion":"16.0.0"}