TrueCalci
Server Details
TrueCalci Precision Compute Engine
Deterministic statutory, financial, and engineering computational tools for AI agents, developers, and autonomous workflows over the Model Context Protocol (MCP).
Capabilities (25 Verified Engines):
Specialist FinOps: Remote Contractor vs. W-2 Parity, S-Corp Reasonable Compensation (IRS Rev. Rul. 74-44), Solo 401(k) Shelter, Cross-Border FX Drag, Billable Capacity Floor.
Global & Cross-Border Tax: US Form 2555 FEIE Nomad Stacking, B2B Foreign
- Status
- Healthy
- Uptime
- 100.0% over 43 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 29 tools
Most tools target a clearly distinct calculation, and descriptions include explicit 'Do not use X; use Y instead' cross-references (e.g. gst_regular vs gst_composition, home_loan_emi vs mortgage_piti, billable_floor vs contractor_parity) that strongly aid selection. Some residual overlap exists within the investment family (compound_wealth, sip_investment, cagr_inflation, ppf, sukanya) and the loan family, but the descriptions draw the boundaries well.
All names are lowercase snake_case, giving a uniform surface style. However the pattern is noun/noun-phrase rather than a verb_noun convention, and several tools are bare acronyms (fd, ppf, tcs, tds) mixed with descriptive phrases, which is a minor inconsistency.
At 29 tools the set is on the heavy side per the rubric. The breadth (India tax, US tax, investments, loans, cloud/AI finops, unit conversion, invoicing) justifies many entries, but several compounding calculators and multiple Indian tax tools could plausibly be consolidated.
Coverage is very broad across tax, investment, loan, finops, and conversion domains, with a meta tool (pack_status) exposing rate tables. Only minor gaps appear, such as no simple currency conversion or consolidated amortization export, which agents can work around.
Available Tools
29 toolsadvance_taxIndia advance tax instalmentsARead-onlyIdempotentInspect
Calculate Indian advance tax instalments and the interest for late or short payment (Sections 234A, 234B and 234C; sections 207-211). Instalment deadlines: 15% by 15 June, 45% by 15 September, 75% by 15 December, 100% by 15 March (presumptive 44AD/44ADA: 100% by 15 March). Pass the payments actually made and the filing date to get the interest; without them every instalment is treated as unpaid.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| assessed_tax | Yes | Total tax on the year's income in INR (₹), before advance tax and before TDS/TCS credit. Advance tax applies when the balance after TDS/TCS is ₹10,000 or more. | |
| tds_tcs_credit | No | Tax already deducted or collected at source for the year (₹). Default 0. | |
| filing_category | No | Sets the return due date. non_audit_individual (ITR-1/ITR-2): 31 July. non_audit_business (business or profession, accounts not audited, and such firms' partners): 31 August from tax year 2026-27, 31 July before. audit_corporate_and_business: 31 October. transfer_pricing_international: 30 November. | non_audit_individual |
| advance_tax_paid | No | Advance tax payments made, each with its date. Omit if none were made. | |
| capital_gains_tax | No | Part of assessed_tax that arises on capital gains (₹); excluded from instalments due before the gain arose. | |
| date_of_filing_or_payment | No | Date the return was (or will be) filed, YYYY-MM-DD. Ends the Section 234B period and decides whether Section 234A applies. Default: the return due date for filing_category. | |
| is_presumptive_44ad_44ada | No | True if income is declared under presumptive taxation (44AD/44ADA): one instalment of 100% by 15 March. | |
| is_senior_citizen_no_business | No | True for a resident senior citizen (60+) with no business or professional income: exempt from advance tax. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| as_of_date | No | |
| disclaimer | No | |
| minor_units | No | |
| rule_ids_used | No | |
| financial_year | No | |
| is_presumptive | No | |
| tds_tcs_credit | No | |
| assessment_year | No | |
| return_due_date | No | |
| gross_assessed_tax | No | |
| instalment_details | No | |
| total_amount_payable | No | |
| unpaid_tax_principal | No | |
| advance_tax_applicable | No | |
| filing_or_payment_date | No | |
| total_advance_tax_paid | No | |
| total_interest_payable | No | |
| section_234a_applicable | No | |
| section_234b_applicable | No | |
| net_advance_tax_base_s208 | No | |
| section_234a_months_charged | No | |
| section_234b_months_charged | No | |
| total_section_234a_interest | No | |
| total_section_234b_interest | No | |
| total_section_234c_interest | No | |
| exemption_or_applicability_reason | No | |
| section_234b_threshold_90_percent | No | |
| section_234a_shortfall_base_rule119a | No | |
| section_234b_shortfall_base_rule119a | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, so safety is covered. The description adds a genuinely useful behavioural default beyond the structured fields: 'without them every instalment is treated as unpaid', clarifying the consequence of omitting advance_tax_paid. It does not describe output shape, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded, then the instalment rules, then the default-behaviour caveat. Dense but nearly every clause carries information; the parenthetical deadline list is compact. Slightly crowded but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present the description needn't explain return values, and annotations cover the safety profile. The description supplies the statutory rules and the key default (unpaid instalments) needed to invoke the 9-parameter tool correctly, so nothing essential is missing for a read-only calculator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the schema carries the parameter detail. The description nonetheless adds domain meaning the schema lacks, namely the instalment percentages and deadlines (15%/45%/75%/100%) and the presumptive 44AD/44ADA single-instalment rule, which help the agent reason about the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Calculate') and resource ('Indian advance tax instalments and the interest for late or short payment') with statutory grounding in Sections 234A/234B/234C and 207-211. An agent can distinguish this from the sibling tax tools (tax_in, tds, tcs, gst_regular) without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to 'Pass the payments actually made and the filing date to get the interest', which is actionable guidance on inputs. It also lays out the deadline schedule so the agent understands what the tool models, but it stops short of naming when to prefer a sibling (e.g., tax_in for a plain income-tax computation) or any explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ai_token_arbitrageAI token cost arbitrageARead-onlyIdempotentInspect
Calculate multi-provider LLM API inference token costs, prompt caching economics (up to 95% discount), batch API savings (50%), and cross-model cost disparity multipliers across frontier and high-efficiency models (Anthropic Claude, OpenAI GPT, Google Gemini, DeepSeek).
Behavior: Deterministic, idempotent calculation with zero external side effects. Models official public provider pricing cards per million input/output tokens. Incorporates prompt cache hit pricing reductions and asynchronous batch API discounts. Evaluates real-time pack age and freshness status (FRESH < 14 days, AGING 14-30 days, STALE > 30 days). Returns comprehensive model cost matrix, cheapest and most expensive model arbitrage analysis, cache savings, and monthly cost projections.
Usage Guidelines: Use when budgeting AI agent inference costs, evaluating LLM providers, or deciding whether to implement prompt caching or batch inference. Do not use for cloud network egress; use cloud_egress_finops instead.
| Name | Required | Description | Default |
|---|---|---|---|
| isBatch | No | CamelCase alias for is_batch. | |
| asOfDate | No | CamelCase alias for as_of_date. | |
| is_batch | No | Whether asynchronous batch processing discount (50%) applies. Alias: isBatch. | |
| as_of_date | Yes | ISO date string (YYYY-MM-DD) for rate-pack historical resolution (e.g. '2026-09-07' for current, '2025-11-15' for 2025-Q4). Alias: asOfDate. | |
| promptTokens | No | CamelCase alias for prompt_tokens. | |
| cacheHitRatio | No | CamelCase alias for cache_hit_ratio. | |
| prompt_tokens | Yes | Number of input prompt tokens per API call. Must be a non-negative integer. Alias: promptTokens. | |
| cache_hit_ratio | No | Proportion of input prompt tokens served from cache (0.0 to 1.0 or 0% to 100%). Default is 0.80 (80%). Alias: cacheHitRatio. | |
| completionTokens | No | CamelCase alias for completion_tokens. | |
| completion_tokens | Yes | Number of generated output completion tokens per API call. Must be a non-negative integer. Alias: completionTokens. |
Output Schema
| Name | Required | Description |
|---|---|---|
| inputs | No | |
| matrix | No | |
| arbitrage | No | |
| freshness | No | |
| disclaimer | No | |
| rate_pack_id | No | |
| token_distribution | No | |
| statutory_authority | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so 'deterministic, idempotent, zero side effects' partly restates structured data. However, the description adds real behavioral substance: pricing is modeled per million input/output tokens, cache discounts up to 95% and batch discounts at 50% are applied, and a freshness tiering system (FRESH <14d, AGING 14-30d, STALE >30d) governs rate-pack resolution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is front-loaded and organized into labeled Behavior and Usage Guidelines sections, with no filler. It runs somewhat long for a single-function calculator, and a minor typo ('pack age') slightly blunts polish, but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, rich annotations, and 100% schema description coverage, the description only needs to supply purpose, behavior, and routing — all of which it does, including the sibling exclusion. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (including camelCase aliases), so the baseline is 3. The description goes beyond the schema by quantifying the economics behind the parameters — the up-to-95% cache discount tied to cache_hit_ratio and the 50% batch discount tied to is_batch — which gives the agent a reason to set those values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources — calculate multi-provider LLM inference token costs, prompt caching economics, batch API savings, and cross-model cost disparity — and names the actual providers. An agent can distinguish this from generic finops siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit positive triggers (budgeting agent inference costs, evaluating LLM providers, deciding on caching or batch inference) and an explicit negative routing rule: 'Do not use for cloud network egress; use cloud_egress_finops instead.' The alternative is named by exact tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
billable_floorBillable rate floorARead-onlyIdempotentInspect
Solve the exact minimum billable hourly rate required to achieve a target net spendable cash income, factoring in unpaid weeks, non-billable administrative drag, deductible overhead, health insurance, and SECA self-employment taxes.
Behavior: Deterministic, idempotent calculation with zero external side effects. Numerically solves the gross revenue needed so that Gross - Expenses - Health - SECA Tax - Income Tax equals Target Net Cash. Divides required gross revenue by actual billable hours (accounting for vacation weeks and non-billable admin/marketing percentage) to derive the hourly billable floor.
Usage Guidelines: Use when a freelancer, consultant, or agency owner wants to set their baseline hourly rate to support their personal lifestyle budget. Do not use when directly benchmarking against a specific W-2 salary offer; use contractor_parity instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| filingStatus | No | IRS income tax filing status: 'single' for unmarried individual or 'mfj' for married filing jointly. | single |
| targetNetCash | Yes | Desired annual net spendable cash take-home after all taxes and business expenses in USD ($/yr). Must be positive. | |
| vacationWeeks | No | Number of unpaid vacation, holiday, and sick weeks off planned per year (e.g. 4 for 4 weeks). | |
| annualExpenses | No | Annual tax-deductible business operating expenses in USD ($/yr) (software, office, hardware, insurance). | |
| nonBillablePercent | No | Percentage of total working hours lost to non-billable business activities like admin, sales, and invoicing (e.g. 28 for 28%). | |
| healthInsuranceAnnual | No | Annual out-of-pocket health insurance premium in USD ($/yr) paid directly by the freelancer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| currency | No | |
| metadata | No | |
| economics | No | |
| disclaimer | No | |
| naive_rate | No | |
| minor_units | No | |
| naive_economics | No | |
| naive_shortfall | No | |
| target_net_cash | No | |
| time_allocation | No | |
| statutory_authority | No | |
| required_hourly_rate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so 'deterministic, idempotent, zero side effects' is partly redundant. What is not redundant is the disclosed solution chain (Gross - Expenses - Health - SECA - Income Tax = Target Net Cash) and the derivation of the hourly floor from actual billable hours, which tells the agent how the number is produced rather than just that it is safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core computation before the behavioral block and the usage routing; the labeled Behavior/Usage structure makes it scannable. It runs a bit long and restates safety traits the annotations already carry, but no sentence is filler in a way that harms selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, rich annotations, and 100% schema coverage, the description only needs to add algorithmic intent and routing, and it does both. The agent knows what the tool computes, when to pick it, and which sibling to prefer otherwise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema; the baseline is 3. The description loosely maps its listed factors onto parameters (unpaid weeks -> vacationWeeks, admin drag -> nonBillablePercent, health -> healthInsuranceAnnual), but adds no units, formats or defaults beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: solve the minimum billable hourly rate to hit a target net cash income, and enumerates the factors it accounts for (unpaid weeks, admin drag, overhead, health insurance, SECA). It explicitly distinguishes itself from contractor_parity, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case (freelancer/consultant/agency owner setting a baseline lifestyle-supporting rate) and an explicit exclusion with the named alternative: do not use for benchmarking against a W-2 salary offer, use contractor_parity instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
breakeven_marginBreak-even and marginARead-onlyIdempotentInspect
Standard precision: this calculator uses ordinary floating-point arithmetic, keeps no dated table of official rates, and has not yet passed our full reference-test suite. Calculate cost-volume-profit break-even thresholds in units and revenue, contribution margin ratio, operational margin of safety, and degree of operating leverage (DOL).
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes Unit Contribution Margin = unitPrice - unitVariableCost; Contribution Margin Ratio = CM / unitPrice; Break-Even Units = fixedCosts / CM; Break-Even Revenue = Break-Even Units * unitPrice. If expected units sold is provided, computes Margin of Safety = (expectedUnits - breakEvenUnits) / expectedUnits and Degree of Operating Leverage. Returns detailed breakdown.
Usage Guidelines: Use for pricing strategy, manufacturing and SaaS unit economics, and operational risk appraisal. Do not use for hourly freelance billing rate minimums; use billable_floor instead.
| Name | Required | Description | Default |
|---|---|---|---|
| unitPrice | Yes | Selling price per individual product or service unit in currency units. Must be greater than unitVariableCost. | |
| fixedCosts | Yes | Total periodic fixed operating overhead costs in currency units (rent, salaries, software). Must be positive. | |
| unitVariableCost | Yes | Direct variable cost incurred per unit produced or delivered in currency units. Must be non-negative. | |
| expectedUnitsSold | No | Projected sales volume in units to evaluate operational margin of safety and operating leverage. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unitPrice | No | |
| fixedCosts | No | |
| breakEvenUnits | No | |
| expectedProfit | No | |
| breakEvenRevenue | No | |
| unitVariableCost | No | |
| expectedUnitsSold | No | |
| marginOfSafetyUnits | No | |
| marginOfSafetyPercent | No | |
| marginOfSafetyRevenue | No | |
| unitContributionMargin | No | |
| degreeOfOperatingLeverage | No | |
| contributionMarginRatioPercent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real value beyond that: it discloses the numerical precision posture (ordinary floating-point, no dated rate table, not passed the full reference-test suite) and the exact formulas used, which the agent could not infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the precision caveat, then behavior/formulas, then usage routing, which is a sensible order. It is somewhat long and 'Deterministic, idempotent calculation with zero external side effects' partly repeats the annotations, but most sentences carry distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no elaboration, and the description still notes a detailed breakdown is returned. Combined with the formulas, the optional expectedUnitsSold behavior (margin of safety and DOL only when supplied), and the precision caveat, nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters and their constraints (e.g., unitPrice must exceed unitVariableCost). The formulas restate how inputs relate but add no syntax, format, or edge-case detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (calculate) and a precise resource set: break-even thresholds in units and revenue, contribution margin ratio, margin of safety, and degree of operating leverage. It also names the sibling it is not (billable_floor), so an agent can distinguish it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use domains (pricing strategy, manufacturing and SaaS unit economics, operational risk appraisal) and an explicit when-not with the correct alternative: 'Do not use for hourly freelance billing rate minimums; use billable_floor instead.' Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cagr_inflationCAGR and inflation adjustmentARead-onlyIdempotentInspect
Calculate Compound Annual Growth Rate (CAGR), real inflation-adjusted purchasing power growth (Fisher equation), and exact investment doubling time (Rule of 72 exact logarithmic solution).
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes Nominal CAGR = (finalValue / initialValue)^(1 / periodsYears) - 1. Computes Real CAGR using the exact Fisher relation: (1 + Nominal) / (1 + Inflation) - 1. Computes exact doubling horizon = ln(2) / ln(1 + Nominal). Returns nominal CAGR %, real CAGR %, total nominal gain, total real purchasing power gain, and doubling years.
Usage Guidelines: Use for evaluating historical investment portfolio track records, business revenue growth metrics, and inflation drag analysis. Do not use for forward-looking recurring monthly investment projections; use compound_wealth or sip_investment instead.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | HISTORICAL_CAGR: growth from initialValue to finalValue. PROJECTION: grow initialValue at expected_annual_return_rate. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| finalValue | Yes | Ending value (HISTORICAL_CAGR), as a string with exactly 2 decimal places. | |
| initialValue | Yes | Starting value, as a string with exactly 2 decimal places. | |
| periodsYears | Yes | Period in years, from 0.0833 (1 month) to 50. | |
| inflationRatePercent | No | Annualized inflation rate percentage over the period (e.g. 2.5 for 2.5%). | |
| expected_annual_return_rate | No | Expected annual return in percent, as a decimal string. Required for PROJECTION mode. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| trace | No | |
| status | No | |
| as_of_date | No | |
| disclaimer | No | |
| final_value | No | |
| tenure_years | No | |
| initial_value | No | |
| rule_ids_used | No | |
| rule_of_72_years | No | |
| real_cagr_percent | No | |
| yearly_trajectory | No | |
| total_absolute_gain | No | |
| exact_doubling_years | No | |
| nominal_cagr_percent | No | |
| purchasing_power_loss | No | |
| inflation_rate_applied | No | |
| real_purchasing_power_value | No | |
| nominal_total_return_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered; the description's 'deterministic, idempotent, zero external side effects' sentence is partly redundant with that. It does add genuine value by disclosing the exact computational relations (Fisher equation, ln(2)/ln(1+Nominal)) and the returned metrics, which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the tool's purpose, then behavior, then usage routing in distinct labeled blocks. The formula clauses are dense but arguably earn their place for a math utility; the sentence count is modest and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so explaining return values is technically unnecessary, yet the description still enumerates them (nominal CAGR %, real CAGR %, gains, doubling years) for clarity. Combined with annotations covering safety and idempotency, an agent has enough to call the tool correctly, though PROJECTION mode usage is left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters, including the mode enum and the PROJECTION-only expected_annual_return_rate, are already documented in the schema. The description implies how initialValue, finalValue, periodsYears and inflation combine mathematically, but never mentions 'mode' or the projection path, so it does not add parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (Compute CAGR, real inflation-adjusted growth, doubling time) and names the exact outputs produced. The usage section explicitly names the sibling tools compound_wealth and sip_investment it is not, so an agent can separate it from look-alike growth calculators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'use for' contexts (historical portfolio track records, revenue growth, inflation drag) and an explicit 'do not use for' with the alternative tools to pick instead (compound_wealth, sip_investment). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_egress_finopsCloud egress cost (FinOps)ARead-onlyIdempotentInspect
Analyze tiered AWS/GCP public cloud internet data transfer egress pricing versus Cloudflare Zero-Egress Bandwidth Alliance and edge caching proxies, quantifying monthly and annual infrastructure cost savings.
Behavior: Deterministic, idempotent calculation with zero external side effects. Calculates tiered AWS/GCP egress charges ($0.09/GB for first 10TB, $0.085/GB for next 40TB, $0.07/GB for next 100TB, $0.05/GB beyond). Models edge cache offload reduction and compares against Cloudflare zero-egress routing. Returns monthly and annual gross egress costs, post-cache costs, and total net savings.
Usage Guidelines: Use for cloud architecture budgeting, FinOps reviews, and evaluating CDN caching or Cloudflare migration economics. Do not use for LLM token pricing; use ai_token_arbitrage instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD selecting the monthly egress price pack. Required; only months with a published pack are answered (otherwise a structured refusal). | |
| cacheHitRatio | No | Expected CDN edge caching hit ratio as a decimal (0.0 to 1.0) or percentage (0 to 100%). Default is 0.85 (85%). | |
| monthlyEgressGB | No | Monthly public internet outbound data transfer volume in Gigabytes (GB) (e.g. 50000 for 50 TB). Must be positive. | |
| primary_provider | No | The cloud the traffic leaves from, priced from the egress pack in force: 'aws', 'gcp' or 'azure'. Omitted: aws. |
Output Schema
| Name | Required | Description |
|---|---|---|
| inputs | No | |
| savings | No | |
| freshness | No | |
| disclaimer | No | |
| rate_pack_id | No | |
| statutory_authority | No | |
| primary_provider_cost | No | |
| multi_cloud_comparison | No | |
| edge_proxy_optimization | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the agent knows it is a safe, repeatable calculation. The description reinforces this with 'Deterministic, idempotent calculation with zero external side effects,' which is useful but largely redundant with annotations. It adds the pricing tiers and the return structure (monthly/annual gross, post-cache, net savings), which is extra context beyond annotations, but output schema likely covers return values. A 3 is appropriate: some added value but not deep behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured into purpose, behavior, and usage guidelines, with clear front-loading of the core function. It is appropriately sized and every sentence contributes. It could be marginally tighter, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a read-only calculation with a full input schema, an output schema, and rich annotations, the description covers purpose, behavior, and routing well. The only minor gap is not explaining the structured refusal for missing price packs beyond what the schema already states. Overall, it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in the input schema with descriptions, defaults, and enums. The description adds no parameter-level detail beyond what the schema provides. Baseline 3 is correct when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Analyze tiered AWS/GCP public cloud internet data transfer egress pricing versus Cloudflare Zero-Egress Bandwidth Alliance and edge caching proxies.' It distinguishes itself from all financial siblings by naming the exact cost domain (cloud egress) and even names the closest sibling, ai_token_arbitrage, to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidelines are explicit: 'Use for cloud architecture budgeting, FinOps reviews, and evaluating CDN caching or Cloudflare migration economics.' It also provides an explicit exclusion: 'Do not use for LLM token pricing; use ai_token_arbitrage instead.' This is exactly the when-to-use/when-not-to-use/alternative structure that earns a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compound_wealthCompound wealth growthARead-onlyIdempotentInspect
Standard precision: this calculator uses ordinary floating-point arithmetic, keeps no dated table of official rates, and has not yet passed our full reference-test suite. Simulate long-term compound interest growth for retirement portfolios, 401(k)s, Roth IRAs, UK ISAs, or European ETF savings plans (Sparplan) with recurring monthly deposits.
Behavior: Deterministic, idempotent calculation with zero external side effects. Applies discrete compound interest formula with periodic annuity deposits: Future Value = P*(1 + r/n)^(nt) + PMT(((1 + r/n)^(n*t) - 1)/(r/n)). Returns final accumulated balance, total principal contributed, total compound interest earned, and annual wealth progression milestone table.
Usage Guidelines: Use for multi-year personal wealth projection and retirement nest-egg simulations. Do not use for Indian mutual fund monthly SIPs with annual step-up; use sip_investment instead.
| Name | Required | Description | Default |
|---|---|---|---|
| principal | No | Initial lump-sum deposit or starting balance in currency units. Must be non-negative. | |
| tenureYears | Yes | Investment horizon in years (e.g. 10, 20, 30). Must be an integer >= 1. | |
| monthlyDeposit | No | Recurring monthly contribution added to the account. Must be non-negative. | |
| annualRatePercent | Yes | Expected annualized investment return rate percentage (e.g. 8 for 8%). Must be positive. | |
| compoundFrequency | No | Number of compounding periods per year (1 for annual, 4 for quarterly, 12 for monthly). |
Output Schema
| Name | Required | Description |
|---|---|---|
| principal | No | |
| futureValue | No | |
| totalInterest | No | |
| totalDeposited | No | |
| yearlySchedule | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the description's repetition of determinism and zero side effects adds little. However, it goes beyond annotations by disclosing precision limitations ('ordinary floating-point arithmetic,' 'no dated table of official rates,' 'not yet passed our full reference-test suite'), the exact formula used, and the return contents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for precision caveat, purpose, behavior, and usage. It is slightly less front-loaded because the precision caveat comes before the purpose, and the deterministic/idempotent/zero-side-effects sentence duplicates annotation data, but no sentence is seriously wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, rich annotations, and an existing output schema, the description is complete enough: it covers purpose, usage boundaries, calculation method, precision caveats, and the alternative tool. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful semantic mapping via the formula: P corresponds to principal, r to annualRatePercent, n to compoundFrequency, t to tenureYears, and PMT to monthlyDeposit, clarifying how the parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Simulate long-term compound interest growth for retirement portfolios... with recurring monthly deposits.' It explicitly distinguishes itself from the sibling tool sip_investment for Indian mutual fund SIPs, so an agent can route correctly without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: 'Use for multi-year personal wealth projection and retirement nest-egg simulations.' It also gives an explicit exclusion and alternative: 'Do not use for Indian mutual fund monthly SIPs with annual step-up; use sip_investment instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contractor_parityUS 1099 contractor vs W-2 parityARead-onlyIdempotentInspect
Calculate tax liabilities, statutory benefits, and net take-home cash between W-2 salaried employment and 1099 independent contractor billing, solving the exact breakeven billing rate ($/hr).
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes federal FICA (Social Security up to statutory wage base and Medicare), federal income tax brackets, state income tax, employer health subsidy, 401(k) match, PTO value, SECA tax with 50% above-the-line deduction, and Section 199A QBI deduction. Returns net spendable cash for both employment models, complete tax breakdowns, effective tax rates, and the exact breakeven hourly rate.
Usage Guidelines: Use when an individual or hiring manager is deciding between a W-2 salaried offer and a 1099 contractor contract. Do not use for solo freelancer baseline rate setting without a W-2 benchmark; use billable_floor instead.
| Name | Required | Description | Default |
|---|---|---|---|
| ptoDays | No | Annual W-2 paid time off days (combined vacation and sick leave). | |
| w2Salary | Yes | W-2 gross annual salary in USD ($/yr). Must be a positive number. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| eligibleQBI | Yes | Whether the contractor income qualifies for the Section 199A qualified business income deduction. Required: it changes federal tax and is not assumed. | |
| filingStatus | No | IRS income tax filing status: 'single' for unmarried individual or 'mfj' for married filing jointly. | single |
| hoursPerWeek | No | Expected billable client hours per week as a 1099 contractor. Must be greater than 0. | |
| weeksPerYear | No | Active billable working weeks per year as a 1099 contractor (52 minus unpaid vacation and bench time). | |
| annualExpenses | No | Annual tax-deductible business operating expenses in USD ($/yr) (software, hardware, insurance). | |
| match401kPercent | No | W-2 employer 401(k) retirement match as a percentage of gross salary (e.g. 4.0 for 4%). | |
| healthSubsidyAnnual | No | Annual W-2 employer-paid health insurance subsidy in USD ($/yr). | |
| stateTaxRatePercent | No | Effective or statutory state income tax rate in percent (e.g. 5.0 for 5%). Set to 0 for states without income tax. | |
| contractorHourlyRate | Yes | 1099 contractor hourly billing rate in USD ($/hr). Must be a positive number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| w2 | No | |
| verdict | No | |
| currency | No | |
| metadata | No | |
| contractor | No | |
| disclaimer | No | |
| w2TakeHome | No | |
| minor_units | No | |
| net_cash_delta | No | |
| contractorTakeHome | No | |
| breakevenHourlyRate | No | |
| statutory_authority | No | |
| contractor_advantage | No | |
| breakeven_contractor_hourly_rate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the leading 'deterministic, idempotent, zero side effects' sentence restates structured data. However, it adds real context by enumerating the computational scope (FICA/SECA, QBI, 199A, 401k match, PTO, health subsidy) so the agent knows the breadth of what is modeled before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by clearly labeled Behavior and Usage Guidelines blocks. Length is proportionate to a 12-parameter, multi-domain tax engine and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete per-parameter descriptions, and annotations covering the safety profile, the description only needs to add scope and routing — which it does. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with defaults and constraints documented per property, so the baseline is 3. The description adds no per-parameter meaning (e.g. no guidance on how as_of_date's rule pack or eligibleQBI interacts) beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Calculate) and a precisely scoped resource (W-2 vs 1099 tax, benefits and net take-home parity), including the exact deliverable (breakeven $/hr). Clearly differentiated from the sibling billable_floor, which is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when ('deciding between a W-2 salaried offer and a 1099 contractor contract') and an explicit when-not with the named alternative ('do not use for solo freelancer baseline rate setting without a W-2 benchmark; use billable_floor instead'). The routing decision is fully determined from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdFixed deposit maturityBRead-onlyIdempotentInspect
Calculate Bank and Corporate Fixed Deposit (FD) maturity amount and interest returns. Computes quarterly, monthly, half-yearly, and cumulative compounding with Section 194A TDS threshold analysis (₹40,000 general / ₹50,000 senior citizens).
| Name | Required | Description | Default |
|---|---|---|---|
| principal | Yes | Deposit amount in INR. At least 1,000 (statutory minimum FD principal, RBI Master Direction 2016). | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| interest_rate | Yes | Annual interest rate in percent, as a decimal string (e.g. 7.00). | |
| tenure_months | Yes | Deposit tenure in months (3 to 120, as the fixed deposit rule pack allows). | |
| compounding_convention | No | Read-only. Compounding is fixed by the statutory rule pack in force, not chosen by the caller: Indian bank fixed deposits compound quarterly by RBI convention. Supplying any other value does not change the computation, so only the supported convention is listed. The value actually applied is returned in the response as compounding_convention. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| principal | No | |
| as_of_date | No | |
| disclaimer | No | |
| minor_units | No | |
| payout_type | No | |
| tenure_years | No | |
| rule_ids_used | No | |
| tds_threshold | No | |
| gross_interest | No | |
| tds_applicable | No | |
| maturity_amount | No | |
| yearly_schedule | No | |
| is_senior_citizen | No | |
| section_reference | No | |
| base_interest_rate | No | |
| total_tds_deducted | No | |
| net_maturity_amount | No | |
| compounding_convention | No | |
| effective_interest_rate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful domain behavior (statutory rule-pack analysis, Section 194A TDS thresholds of 40,000/50,000), but says nothing about rate limits, output shape, or precision/rounding behavior — a moderate but not rich addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose before the TDS detail. Efficient overall, though the compounding-convention enumeration adds a claim that the schema does not support and could mislead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers purpose plus the TDS threshold behavior. The only gap is that it does not resolve the apparent mismatch between the listed compounding options and the schema's fixed quarterly enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries parameter meaning and the baseline is 3. The description adds no per-parameter detail beyond what the schema states, and its claim of 'quarterly, monthly, half-yearly, and cumulative compounding' is not reconciled with the single-value enum in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (calculate FD maturity amount and interest returns) and names the compounding and TDS computations performed. It is clearly distinguishable from siblings like ppf, sukanya, or sip_investment, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no mention of alternatives among the many deposit/investment siblings. The agent must infer that this tool is the one for bank/corporate FDs rather than ppf or sukanya.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
feie_nomad_trackerUS Foreign Earned Income Exclusion trackerARead-onlyIdempotentInspect
Track IRS Form 2555 Foreign Earned Income Exclusion (FEIE) Physical Presence Test eligibility (330 full foreign days in rolling 365 days), statutory exclusion cap ($130,000 for 2025), and US sticky domicile audit risks (CA, NY, VA, SC).
Behavior: Deterministic, idempotent calculation with zero external side effects. Evaluates whether daysOutsideUSInRollingPeriod meets the mandatory 330-day threshold. Applies statutory maximum exclusion limit ($126,500 for 2024, $130,000 for 2025), computes tax liability on excess income, and flags aggressive state revenue agency sticky domicile rules.
Usage Guidelines: Use for US citizen digital nomads and expats evaluating foreign earned income tax exemptions under IRS Section 911. Do not use for foreign corporate withholding tax; use b2b_withholding_risk instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| filingStatus | No | IRS filing status: 'single' or 'mfj' (married filing jointly). | |
| stateDomicile | No | Two-letter postal code of taxpayer's last or current US state domicile (e.g. CA, NY, TX, FL). High-audit states (CA, NY, VA, SC) trigger domicile warnings. | CA |
| foreignEarnedIncome | No | Foreign earned income for the tax year, in USD. | |
| qualifyingDaysInTaxYear | No | Qualifying days that fall in the tax year; the exclusion is prorated by these (26 U.S.C. 911(b)(2)(A)). Required - never assumed. | |
| daysOutsideUSInRollingPeriod | No | Full 24-hour days outside the US within any 12 consecutive months (Physical Presence Test, 26 U.S.C. 911(d)(1)(B): 330 needed). Required - never assumed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| test_type | No | |
| as_of_date | No | |
| disclaimer | No | |
| exclusions | No | |
| rate_pack_id | No | |
| filing_status | No | |
| qualification | No | |
| tax_calculation | No | |
| state_tax_exposure | No | |
| statutory_authority | No | |
| foreign_earned_income | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds calculation-specific behavior: it evaluates the 330-day threshold, applies the statutory cap, computes liability on excess, and flags sticky domicile states. It repeats the idempotent/read-only nature already in annotations, preventing a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and structured with explicit 'Behavior' and 'Usage Guidelines' labels, making it scannable. It is slightly redundant: the $130,000 2025 exclusion cap is stated in both the opening sentence and the Behavior section, which costs a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values. It covers purpose, usage, alternatives, and behavioral rules, while the schema fully documents all six parameters. Nothing an agent needs in order to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters in detail, including enums, required fields, and legal citations. The description references the 330-day threshold and exclusion caps but adds no parameter semantics beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: tracking IRS Form 2555 FEIE Physical Presence Test eligibility, statutory exclusion cap, and US sticky domicile risks. It explicitly distinguishes the tool from the sibling b2b_withholding_risk, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the exact audience (US citizen digital nomads and expats evaluating FEIE under Section 911), provides a clear exclusion (do not use for foreign corporate withholding tax), and names the alternative tool (b2b_withholding_risk). This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fx_invoicingFX invoicing and conversionARead-onlyIdempotentInspect
Compare the local currency that lands from a USD invoice across the payment providers you name, using each provider's fees as you supply them, against a published reference exchange rate (European Central Bank reference rates, USD base).
Behavior: Deterministic, idempotent calculation with zero external side effects. For each rail you give (fixed fee in USD, percentage fee, exchange-rate markup) it computes the net USD after fees, the landed local amount, the total cost and its share of the invoice, ranks the rails, and reports the saving of the best over the worst. TrueCalci does not preset or verify any provider's pricing: providers price per currency route and account, so the fees are yours.
Usage Guidelines: Use when a freelancer or vendor invoicing in USD wants to compare payout providers whose fees they know. Do not use for domestic US employee vs contractor parity; use contractor_parity instead.
| Name | Required | Description | Default |
|---|---|---|---|
| rails | Yes | The payment providers to compare, with the fees YOUR account is charged for this route. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| invoiceUsd | Yes | Gross billed invoice amount in USD ($). Must be a positive number greater than 0. | |
| targetCurrency | No | Payout destination currency code: 'EUR' (Euro), 'GBP' (British Pound), 'CAD' (Canadian Dollar), 'AUD' (Australian Dollar), 'INR' (Indian Rupee), 'SGD' (Singapore Dollar), 'BRL' (Brazilian Real), 'MXN' (Mexican Peso), or 'PHP' (Philippine Peso). | EUR |
| customMidMarketRate | No | Optional: your own USD-to-target exchange rate, used instead of the published reference rate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rails | No | |
| currency | No | |
| disclaimer | No | |
| worst_rail | No | |
| invoice_usd | No | |
| minor_units | No | |
| rate_pack_id | No | |
| as_of_timestamp | No | |
| target_currency | No | |
| lowest_cost_rail | No | |
| annual_savings_usd | No | |
| statutory_authority | No | |
| theoretical_max_local | No | |
| single_invoice_savings_usd | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, and the description partly restates that ('Deterministic, idempotent calculation with zero external side effects'). It adds genuine value by disclosing the key limitation that TrueCalci neither presets nor verifies provider pricing, so supplied fees are authoritative — an important caveat for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with purpose, then behavior, then usage, and each block earns its place. It is slightly long because the behavior sentence enumerates outputs that the output schema already covers, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, an output schema, and rich annotations, the description only needs to add routing, the pricing caveat, and the computation intent — all of which are present. An agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the nested rail fields is already documented in the schema; baseline is 3. The description reinforces that rails carry the user's own account-specific fees and that the date selects the rule pack, but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: comparing landed local currency from a USD invoice across named payment rails against the ECB reference rate. It names what is computed (net USD after fees, landed amount, cost share, ranking, best-vs-worst saving), which is far more specific than the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use ('freelancer or vendor invoicing in USD wants to compare payout providers whose fees they know') and a when-not-to-use with the named alternative ('Do not use for domestic US employee vs contractor parity; use contractor_parity instead'). This routes the agent unambiguously among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
goldGold valuationBRead-onlyIdempotentInspect
Calculate Gold and Silver commodity valuation, hallmarking purity adjustments (24K, 22K, 18K, 14K), statutory GST (3%), making charges, and Indian regional unit conversions (Tola, Sovereign, Sovereign/Pavan, Grams, Troy Ounces).
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| purity_karat | Yes | Purity in Karats (24K pure, 22K standard jewellery 916, 18K 750, 14K 585). Required - the engine never assumes a hallmark. | |
| weight_grams | Yes | Weight of gold in grams. | |
| rate_per_gram_24k | Yes | Current market price of 24K gold per gram in INR (₹), as a string with exactly 2 decimal places (money is never a float). | |
| making_charges_percent | No | Making charges as percentage of pure metal value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| trace | No | |
| status | No | |
| currency | No | |
| gold_cgst | No | |
| gold_sgst | No | |
| total_gst | No | |
| as_of_date | No | |
| disclaimer | No | |
| unit_input | No | |
| minor_units | No | |
| hallmark_fee | No | |
| purity_karat | No | |
| purity_ratio | No | |
| weight_input | No | |
| hallmark_cgst | No | |
| hallmark_sgst | No | |
| rule_ids_used | No | |
| gold_gst_total | No | |
| making_charges | No | |
| raw_gold_value | No | |
| weight_in_grams | No | |
| hallmark_applied | No | |
| is_benchmark_rate | No | |
| rate_per_gram_24k | No | |
| gold_taxable_value | No | |
| hallmark_gst_total | No | |
| making_charges_type | No | |
| total_taxable_value | No | |
| final_invoice_amount | No | |
| making_charges_value | No | |
| gold_gst_rate_percent | No | |
| rate_per_gram_applied | No | |
| hallmark_total_with_gst | No | |
| purity_fineness_percent | No | |
| effective_price_per_gram | No | |
| hallmark_gst_rate_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description adds context about computational behavior (statutory GST rate of 3%, supported karat levels, Indian regional units), which is useful but does not describe return format, rounding, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the core action ('Calculate Gold and Silver commodity valuation') and then the components. Dense but efficient; each listed item carries information without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a pure calculation tool with full schema coverage and an output schema, the description scopes the computation adequately. However, it advertises 'Silver commodity valuation' while the schema exposes only gold inputs (weight_grams described as gold, rate_per_gram_24k), a capability mismatch that leaves the description incomplete relative to what the tool actually accepts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters with patterns, enum values, and defaults. The description lists the karats and units but adds no syntax or format detail beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Calculate Gold and Silver commodity valuation') and enumerates the computation components (purity adjustments, GST, making charges, unit conversions), making the tool's scope clear. It doesn't explicitly differentiate from siblings like land_units or gst_regular, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use or when-not-to-use guidance and names no alternatives. The reader must infer that this is the tool for gold/silver valuation from the description alone, which is descriptive rather than directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gst_compositionIndia GST composition schemeARead-onlyIdempotentInspect
Calculate statutory GST quarterly tax liabilities under the Composition Scheme (Section 10 of CGST Act). Computes applicable turnover tax for traders (1%), manufacturers (1%), and restaurant service providers (5%), enforcing statutory turnover thresholds.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Composition scheme business category. | trader |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| quarter_turnover | Yes | Quarterly aggregate turnover in INR (₹). | |
| preceding_fy_turnover | Yes | Aggregate turnover of the preceding financial year in INR, as a string with exactly 2 decimal places. Required to check the Section 10 threshold. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| eligible | No | |
| as_of_date | No | |
| disclaimer | No | |
| cgst_amount | No | |
| minor_units | No | |
| sgst_amount | No | |
| rule_ids_used | No | |
| itc_admissible | No | |
| turnover_limit | No | |
| dealer_category | No | |
| quarter_turnover | No | |
| cgst_rate_percent | No | |
| sgst_rate_percent | No | |
| statutory_section | No | |
| total_tax_payable | No | |
| compliance_statement | No | |
| taxable_turnover_base | No | |
| composition_tax_amount | No | |
| rcm_tax_payable_to_govt | No | |
| composition_rate_percent | No | |
| can_collect_tax_from_customer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish it as read-only, idempotent, non-destructive, and closed-world. The description adds domain behavior by stating the applicable rates and that it enforces turnover thresholds, though it does not specify the failure mode when a threshold is breached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core calculation and then the category, rate, and threshold details. Every clause carries information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a deterministic calculation with a complete parameter schema, an output schema, and rich safety annotations. The description supplies the scheme, rates, and threshold enforcement so an agent can invoke it correctly; only alternative-tool routing is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents each parameter. The description adds the rate mapping (1%, 1%, 5%) for the category parameter and reiterates the threshold-check purpose of preceding FY turnover, giving meaningful semantic lift beyond the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Calculate) and resource (statutory GST quarterly tax liabilities under the Composition Scheme), naming Section 10 and the three covered categories. This clearly separates it from a generic GST or regular-scheme calculator, even though it does not explicitly name the sibling gst_regular.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use for Composition Scheme taxpayers by repeatedly naming the scheme and statutory thresholds, but gives no explicit when-to-use, when-not-to-use, or alternative tool guidance. The context is enough to infer the intended audience, but routing guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gst_regularIndia GST (regular scheme: CGST, SGST, IGST)Read-onlyIdempotentInspect
Calculate Indian GST on a supply under the regular scheme: CGST + SGST for an intra-state supply, IGST for an inter-state supply, export or SEZ supply, with optional compensation cess, reverse charge and input tax credit eligibility (Sections 9 and 16-17, CGST Act 2017; Section 5, IGST Act 2017).
Behavior: Deterministic, idempotent calculation with zero external side effects. The rate must be one notified in the GST rule pack in force on as_of_date; the engine refuses a rate the pack does not contain rather than assume one. Exclusive mode adds tax to the amount; inclusive mode extracts it. Returns taxable value, CGST, SGST, IGST, cess, total tax and invoice total.
Usage Guidelines: Use for a registered person under the regular scheme. Do not use for a composition-scheme taxpayer; use gst_composition instead.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Supply value in INR (the taxable value in exclusive mode, the tax-inclusive total in inclusive mode). | |
| is_rcm | No | Tax payable by the recipient under reverse charge (Section 9(3)/9(4)). | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| supply_type | No | Intra-state (CGST + SGST), inter-state (IGST), export or SEZ supply. If omitted, derived from supplier_state and place_of_supply when both are given. | |
| cess_percent | No | Compensation cess in percent, where applicable. | 0 |
| itc_eligible | No | Whether the recipient may claim input tax credit (false for a Section 17(5) blocked credit). | |
| rate_percent | Yes | GST rate in percent. Must be a rate notified in the rule pack in force on as_of_date. | |
| supplier_state | No | Supplier's state: 2-digit GST state code or state name. | |
| place_of_supply | No | Place of supply: 2-digit GST state code or state name. | |
| calculation_mode | No | 'exclusive' adds GST to amount; 'inclusive' extracts GST from amount. | exclusive |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| is_rcm | No | |
| status | No | |
| currency | No | |
| round_off | No | |
| total_tax | No | |
| disclaimer | No | |
| gst_amount | No | |
| base_amount | No | |
| cess_amount | No | |
| cgst_amount | No | |
| igst_amount | No | |
| minor_units | No | |
| sgst_amount | No | |
| supply_type | No | |
| cess_percent | No | |
| itc_eligible | No | |
| net_tax_cost | No | |
| rule_ids_used | No | |
| calculation_mode | No | |
| supply_structure | No | |
| statutory_section | No | |
| eligible_itc_amount | No | |
| gross_invoice_total | No | |
| effective_rate_percent | No | |
| tax_payable_direct_to_govt | No | |
| invoice_payable_to_supplier | No |
home_loan_emiHome loan EMIARead-onlyIdempotentInspect
Calculate reducing-balance monthly Equated Monthly Installment (EMI), total interest payable, and amortization schedule for home, auto, or personal loans.
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes standard monthly EMI formula: E = P * r * (1 + r)^n / ((1 + r)^n - 1), where r = annualRate / 12 / 100. Returns monthly EMI, total payment (principal + interest), total interest percentage, and first-year amortization breakdown.
Usage Guidelines: Use for general global reducing-balance loans and consumer debt. Do not use for US residential mortgages requiring property tax, hazard insurance, and PMI escrow; use mortgage_piti instead.
| Name | Required | Description | Default |
|---|---|---|---|
| principal | Yes | Total borrowed principal loan amount in currency units. Must be a positive number. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| tenureYears | No | Total loan repayment duration in years (e.g. 15, 20, 30). Must be an integer >= 1. | |
| interestRatePercent | Yes | Annual interest rate in percent, as a decimal string (e.g. 8.50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| principal | No | |
| as_of_date | No | |
| disclaimer | No | |
| monthlyEMI | No | |
| minor_units | No | |
| monthly_emi | No | |
| totalAmount | No | |
| actualMonths | No | |
| tenure_years | No | |
| interestSaved | No | |
| rule_ids_used | No | |
| totalInterest | No | |
| has_prepayment | No | |
| interest_saved | No | |
| total_interest | No | |
| yearlySchedule | No | |
| yearly_schedule | No | |
| scheduled_months | No | |
| tenureReducedYears | No | |
| amortization_method | No | |
| actual_tenure_months | No | |
| annual_interest_rate | No | |
| tenure_reduced_years | No | |
| total_amount_payable | No | |
| tenure_reduced_months | No | |
| prepayment_total_principal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so part of the behavior sentence ('deterministic, idempotent, zero side effects') is redundant. What the description adds beyond structured data is the exact EMI formula, the rate convention (r = annualRate/12/100), and the scope of computed outputs, which meaningfully reduces ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then clearly sectioned Behavior and Usage Guidelines. Slightly wasteful in restating the idempotency/side-effect profile already carried by annotations and in listing return fields that the output schema covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and an output schema covering return values, the description supplies everything needed for selection: purpose, formula assumptions, and an explicit sibling alternative. Only minor gaps remain, such as how as_of_date's rule-pack selection can change results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents principal, rate, tenureYears default, and as_of_date. The description adds no parameter-level meaning beyond the formula's rate convention, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (calculate EMI, total interest, amortization) and scopes it to reducing-balance consumer loans. It explicitly positions itself against the sibling mortgage_piti, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use ('general global reducing-balance loans and consumer debt') and an explicit when-not-to-use with a named alternative ('US residential mortgages requiring property tax, hazard insurance, and PMI escrow; use mortgage_piti instead'). This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
land_unitsLand area unit conversionARead-onlyIdempotentInspect
Convert Indian regional and universal land measurement units under the Legal Metrology Act, 2009 and State Land Revenue Codes (UP, Punjab, Haryana, West Bengal, Gujarat, Bihar, Assam, HP, MP, Rajasthan).
Behavior: Deterministic, idempotent conversion that requires the state for regional units (Bigha, Katha, Biswa, etc.), because their size differs by state, and refuses rather than guesses. Universal units (sqft, sqm, gaj/sqyd, acre, hectare, guntha, cent, ground, ankanam) resolve nationally. Returns target converted value, square foot baseline, and complete 7-unit standard breakdown.
Usage Guidelines: Specify 'state' when converting traditional units (e.g. 'bigha' or 'katha') to avoid ambiguous multi-fold variance.
| Name | Required | Description | Default |
|---|---|---|---|
| area | Yes | Area to convert, in from_unit. Must be greater than 0. | |
| state | No | Indian state name or 2-letter code (e.g. 'UP', 'WEST_BENGAL', 'GUJARAT', 'PUNJAB', 'HARYANA', 'BIHAR', 'ASSAM', 'HP', 'MP', 'RAJASTHAN'). Required for regionally ambiguous units. | |
| to_unit | No | Unit to convert into. If omitted, the area is returned in every standard unit. | |
| from_unit | Yes | Unit of area. Regional units (bigha, biswa, katha ...) need state. | |
| as_of_date | Yes | Statutory rule reference date (YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| to_unit | No | |
| from_unit | No | |
| as_of_date | No | |
| disclaimer | No | |
| input_area | No | |
| rule_ids_used | No | |
| state_applied | No | |
| sqft_factor_to | No | |
| converted_value | No | |
| sqft_factor_from | No | |
| standard_breakdown | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds critical context beyond annotations: deterministic conversion, refusal rather than guessing when state is missing for regional units, and the exact return composition (target value, square-foot baseline, 7-unit breakdown). This is rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and then organized into Behavior and Usage Guidelines sections. It is somewhat long, especially the state list, but every part is relevant and well-structured. It avoids redundancy and keeps the core usage rule easy to find.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers the legal context, conditional state requirement, universal-vs-regional distinction, and return shape. An output schema exists, so return values need not be fully explained, but the description still summarizes them helpfully. Nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains area, state, to_unit, from_unit, and as_of_date. The description reinforces that state is required for regionally ambiguous units and that to_unit omission returns all standard units, but these points are already present in the schema. It adds little new syntactic or semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Convert Indian regional and universal land measurement units.' It distinguishes regional from universal units and names the governing legal framework, making the tool's scope immediately clear. Sibling tools are all finance/tax calculators, so no further differentiation is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Specify state when converting traditional units (e.g. bigha or katha) to avoid ambiguous multi-fold variance.' It also implicitly frames usage under the Legal Metrology Act and State Land Revenue Codes. However, it does not state when not to use the tool or name alternatives, which is reasonable given the lack of sibling overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mortgage_pitiUS mortgage PITIARead-onlyIdempotentInspect
Calculate monthly US mortgage payments broken down into PITI (Principal, Interest, Property Taxes, Homeowners Insurance, and Private Mortgage Insurance) along with full 30-year amortization schedule.
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes standard monthly amortization using fixed-rate annuity formula, computes annual property taxes divided by 12, monthly hazard insurance, and conditional PMI (applied automatically if down payment is under 20% until 78% LTV threshold). Returns monthly total, principal/interest component, tax/escrow components, total lifetime interest, and payoff schedule.
Usage Guidelines: Use for US residential home purchase financing and refinancing scenarios. Do not use for international reducing-balance loans without escrow/PMI; use home_loan_emi instead.
| Name | Required | Description | Default |
|---|---|---|---|
| homePrice | Yes | Total purchase price or appraised property value in currency units (e.g. 450000). Must be positive. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| interestRate | Yes | Annual interest rate in percent, as a decimal string (e.g. 6.75). | |
| loanTermYears | No | Standard US alias for tenureYears (loan term in years). | |
| annualPmiPercent | No | Annual Private Mortgage Insurance premium percentage (e.g. 0.75 for 0.75% of original loan amount). | |
| downPaymentPercent | No | Down payment as a percentage of purchase price (e.g. 20 for 20%). Values below 20 automatically trigger PMI calculations. | |
| annualHomeInsurance | No | Annual hazard/homeowners insurance premium in currency units (e.g. 1400). | |
| propertyTaxRatePercent | No | Annual local property tax rate as a percentage of home value (e.g. 1.2 for 1.2%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| monthlyPI | No | |
| as_of_date | No | |
| disclaimer | No | |
| home_price | No | |
| monthlyPmi | No | |
| assumptions | No | |
| minor_units | No | |
| monthly_pmi | No | |
| down_payment | No | |
| totalPmiPaid | No | |
| totalTaxPaid | No | |
| isPmiRequired | No | |
| rule_ids_used | No | |
| totalInterest | No | |
| yearlySchedule | No | |
| is_pmi_required | No | |
| loan_term_years | No | |
| totalCostOfLoan | No | |
| yearly_schedule | No | |
| monthlyTotalPITI | No | |
| monthlyPropertyTax | No | |
| totalInsurancePaid | No | |
| total_lifetime_pmi | No | |
| annual_property_tax | No | |
| initial_ltv_percent | No | |
| total_interest_paid | No | |
| annual_interest_rate | No | |
| down_payment_percent | No | |
| initial_monthly_piti | No | |
| monthlyHomeInsurance | No | |
| monthly_property_tax | No | |
| total_principal_paid | No | |
| principal_loan_amount | No | |
| annual_hazard_insurance | No | |
| total_property_tax_paid | No | |
| monthly_hazard_insurance | No | |
| is_property_tax_estimated | No | |
| property_tax_rate_applied | No | |
| total_cost_of_home_and_loan | No | |
| total_hazard_insurance_paid | No | |
| total_principal_and_interest | No | |
| is_hazard_insurance_estimated | No | |
| monthly_principal_and_interest | No | |
| monthly_piti_after_pmi_cancellation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the description's 'deterministic, idempotent, zero side effects' line is largely redundant. However, it adds genuinely new behavioral detail: PMI is applied automatically below 20% down until the 78% LTV threshold, and it discloses the calculation basis (fixed-rate annuity, tax/12, monthly insurance). That is useful beyond the annotations, though the repetition of annotation-covered traits keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clearly labeled sections (description, Behavior, Usage Guidelines) with the purpose front-loaded. Efficient overall, but the Behavior paragraph spends a clause restating annotation-provided traits (deterministic/idempotent/no side effects) that the agent already sees in structured form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, yet the description still previews the outputs (monthly total, P&I split, escrow components, lifetime interest, payoff schedule). Combined with the routing guidance and PMI rules, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning the schema does not: downPaymentPercent below 20 automatically triggers PMI, and PMI persists until 78% LTV. That explains the interaction between downPaymentPercent and annualPmiPercent rather than merely restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Calculate) and resource (monthly US mortgage PITI payments) and enumerates the components. It explicitly contrasts itself with home_loan_emi, so an agent can distinguish it from siblings without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (US residential purchase and refinancing) and when-not-to-use (international reducing-balance loans without escrow/PMI), naming the alternative tool home_loan_emi. The routing condition is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
npv_irrNPV and IRRARead-onlyIdempotentInspect
Standard precision: this calculator uses ordinary floating-point arithmetic, keeps no dated table of official rates, and has not yet passed our full reference-test suite. Compute Net Present Value (NPV), Internal Rate of Return (IRR) via iterative Newton-Raphson polynomial convergence, and discounted payback period for capital budgeting and investment appraisal.
Behavior: Deterministic, idempotent calculation with zero external side effects. Evaluates NPV = -C0 + sum(Ct / (1 + r)^t). Computes exact IRR by finding the discount rate where NPV equals zero using up to 100 Newton-Raphson iterations with tolerance 1e-7. Returns NPV, IRR percentage, profitability index (PI), and payback period in periods/years.
Usage Guidelines: Use for evaluating capital investments, M&A valuations, corporate projects, and multi-year cash flow hurdle rates. Do not use for simple compound interest projections with fixed monthly deposits; use compound_wealth instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cashflows | Yes | Series of sequential periodic net cash inflows starting from period 1 onwards. Minimum 1 cash flow required. | |
| initialInvestment | Yes | Upfront initial capital outlay at period 0 in currency units. Entered as a positive number (treated as cash outflow). Must be positive. | |
| discountRatePercent | No | Annual cost of capital or hurdle discount rate percentage (e.g. 10.0 for 10%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| npv | No | |
| isViable | No | |
| schedule | No | |
| irrPercent | No | |
| netCashflow | No | |
| paybackYears | No | |
| totalInflows | No | |
| initialInvestment | No | |
| profitabilityIndex | No | |
| discountRatePercent | No | |
| discountedPaybackYears | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the restated 'deterministic, idempotent... zero external side effects' sentence earns no credit. What does add value is the method transparency (Newton-Raphson with up to 100 iterations, tolerance 1e-7), the exact NPV formula, and the honest precision caveat that it uses plain floating-point and hasn't passed the full reference-test suite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bold-labelled sections (Behavior, Usage Guidelines) make it scannable, and the usage contract is tight. It is slightly padded — the leading precision disclaimer sits ahead of the purpose statement, and the behavioral sentence partly restates annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be spelled out, yet the description still names them (NPV, IRR percentage, PI, payback period). Combined with formula, convergence behavior, precision caveat, and a routing alternative, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains initialInvestment, cashflows, and discountRatePercent semantics and units. The description adds conceptual context (rate where NPV equals zero) but no parameter-level syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources: 'Compute Net Present Value (NPV), Internal Rate of Return (IRR)... and discounted payback period' for capital budgeting. This clearly differentiates it from sibling compound_wealth, which it names explicitly for a different use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use contexts ('capital investments, M&A valuations, corporate projects, and multi-year cash flow hurdle rates') and an explicit exclusion with the alternative ('Do not use for simple compound interest projections with fixed monthly deposits; use compound_wealth instead').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_statusStatutory rule pack statusARead-onlyIdempotentInspect
Lists the official rate tables each calculator uses (free, no credits). Shows the active government rate tables (AY 2025-26, IRS Rev. Proc., HMRC, etc.), hash checksums, and legal enactment citations.
| Name | Required | Description | Default |
|---|---|---|---|
| engineId | No | Optional engine ID (e.g. 'tds', 'tcs', 'gst_regular', 'advance_tax', 'vat_sales_tax', 'tax_in') to query specific statutory pack metadata. |
Output Schema
| Name | Required | Description |
|---|---|---|
| class | No | |
| packs | No | |
| credits | No | |
| service | No | |
| timestamp | No | |
| total_engines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds valuable context beyond that: it is free/no-credit and returns active rate tables, hash checksums, and legal citations, though it does not discuss pagination or output limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler. The first states the core purpose and free status; the second details the returned content, and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety, schema covering the only parameter, and an output schema present, the description provides enough for correct invocation. It could be slightly stronger by clarifying when engineId should be omitted versus supplied, but overall it is complete for this metadata tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single optional engineId parameter, including examples and its purpose. The description itself adds no additional parameter semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it lists the official rate tables each calculator uses and shows active government rate tables, checksums, and legal citations. It is clearly distinguishable from the calculator siblings, though it does not explicitly name an alternative or sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It notes the tool is free with no credits, which is useful usage context, but does not state when to use this status tool versus the calculator tools or when it is unnecessary. The intended use is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppfIndia Public Provident FundARead-onlyIdempotentInspect
Simulate Public Provident Fund (PPF) 15-year statutory compound wealth accumulation under Ministry of Finance notifications. Enforces ₹1,50,000 annual deposit ceiling, current 7.1% p.a. sovereign interest rate, monthly 5th day balance compounding rules, and Section 80C EEE tax-exempt maturity.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| tenure_years | No | PPF tenure in years (initial 15 years, extendable in 5-year blocks). | |
| yearly_deposit | Yes | Annual deposit amount in INR (₹500 to ₹1,50,000). |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| as_of_date | No | |
| disclaimer | No | |
| minor_units | No | |
| tenure_years | No | |
| rule_ids_used | No | |
| total_invested | No | |
| maturity_amount | No | |
| projection_from | No | |
| yearly_schedule | No | |
| deposit_day_of_month | No | |
| start_financial_year | No | |
| total_interest_earned | No | |
| fifth_day_rule_applied | No | |
| statutory_annual_limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered; the description adds substantial domain behavior beyond that — the ₹1,50,000 ceiling, 7.1% rate, monthly 5th-day compounding rule, and Section 80C EEE treatment. It doesn't disclose error or edge-case handling (e.g., deposits exceeding the ceiling), keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads purpose and then stacks the governing rules; nothing is wasted. It is slightly packed, but every clause carries domain value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers the rule pack, rate, ceiling, and tax treatment. What remains missing is routing guidance among sibling instruments, which is a minor gap for a self-contained simulator.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters, including the date's rule-pack semantics and tenure extension. The description adds the deposit ceiling and rate context but no new parameter-level syntax or format detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Simulate) and resource (Public Provident Fund 15-year statutory compound wealth accumulation), scoping it to Ministry of Finance rules. An agent can distinguish it from fd, sukanya, and compound_wealth without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (Indian sovereign savings scheme simulation) but never states when to choose this over close siblings like fd, sukanya, or compound_wealth, nor any exclusions. Usage is inferable but not directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scorp_optimizerUS S-corp payroll tax comparisonRead-onlyIdempotentInspect
Compute employment taxes with and without an S-Corporation election: reasonable officer salary split, SECA/FICA payroll taxes, the fees entered, and the net difference, under IRS Rev. Rul. 74-44. Computation only; not a recommendation to elect.
Behavior: Deterministic, idempotent calculation with zero external side effects. Splits net business profit into W-2 officer wages and Schedule K-1 shareholder distributions. Applies FICA to salary only (exempting distributions), accounts for employer-half FICA deduction, deducts annual CPA corporate filing and payroll processing fees, and computes the mathematical breakeven net profit threshold.
Usage Guidelines: Use when a US small business owner, single-member LLC, or high-earning freelancer is considering electing S-Corp status to reduce self-employment taxes. Do not use for retirement account contribution limits; use solo_401k_shield instead.
| Name | Required | Description | Default |
|---|---|---|---|
| netProfit | Yes | Annual net business profit before owner compensation in USD ($/yr). Must be a positive number. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| cpaAnnualFee | No | Annual CPA accounting fee for corporate Form 1120-S preparation and filing in USD ($/yr). | |
| salaryPercent | No | Officer W-2 reasonable compensation percentage of net profit (e.g. 50, 55, 60%). Must comply with IRS Rev. Rul. 74-44 industry benchmarks. | |
| stateAnnualFee | No | Annual state franchise tax or corporate filing fee in USD ($/yr) (e.g. $800 in CA, $200 in DE). | |
| payrollAnnualFee | No | Annual software and compliance fee for running compliant W-2 payroll in USD ($/yr) (e.g. Gusto, Rippling). |
Output Schema
| Name | Required | Description |
|---|---|---|
| llc | No | |
| scorp | No | |
| savings | No | |
| currency | No | |
| overhead | No | |
| netProfit | No | |
| as_of_date | No | |
| disclaimer | No | |
| net_profit | No | |
| minor_units | No | |
| rate_pack_id | No | |
| filing_status | No | |
| wage_base_cap | No | |
| effectiveTaxYear | No | |
| statutoryWageBase | No | |
| sole_prop_baseline | No | |
| statutory_authority | No |
sip_investmentSIP investment returnsARead-onlyIdempotentInspect
Calculate Systematic Investment Plan (SIP) mutual fund maturity wealth with optional annual percentage step-up (top-up) for compounding wealth growth.
Behavior: Deterministic, idempotent calculation with zero external side effects. Models monthly SIP compounding using formula FV = P * [((1 + i)^n - 1) / i] * (1 + i). When stepUpPercent > 0, dynamically increases monthly installment each 12-month cycle. Returns maturity amount, total invested capital, total estimated capital gains, and year-by-year accumulation.
Usage Guidelines: Use for mutual fund SIP investments, recurring deposits, and goal-based financial planning. Do not use for US 401(k) / Roth IRA compounding with lump sum; use compound_wealth instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| tenureYears | No | Total investment duration in years (e.g. 5, 10, 20). Must be an integer >= 1. | |
| stepUpPercent | No | Annual percentage increase in monthly contribution (e.g. 10 for 10% annual hike). | |
| annualReturnRate | No | Expected annualized return rate percentage (e.g. 12 for 12% equity CAGR). | |
| monthlyInvestment | Yes | Monthly SIP amount in INR as a string with exactly 2 decimal places. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| as_of_date | No | |
| disclaimer | No | |
| minor_units | No | |
| tenureYears | No | |
| tenure_years | No | |
| maturityValue | No | |
| rule_ids_used | No | |
| stepUpPercent | No | |
| totalInvested | No | |
| maturity_value | No | |
| total_invested | No | |
| annualReturnRate | No | |
| estimatedReturns | No | |
| yearly_breakdown | No | |
| estimated_returns | No | |
| monthlyInvestment | No | |
| wealth_multiplier | No | |
| annual_return_rate | No | |
| monthly_investment | No | |
| annual_step_up_percent | No | |
| compounding_convention | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered; the description goes further by disclosing the compounding formula, the step-up mechanic (installment increases each 12-month cycle), and the returned fields. It adds genuine behavioral context beyond the structured metadata, though the deterministic/idempotent restatement is partially redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then organized into Behavior and Usage Guidelines sections with zero filler. Slightly verbose in enumerating return fields that the output schema already carries, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, mechanics, the step-up edge case, return composition, and sibling routing; with an output schema present, return values need not be detailed yet are still summarized. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks: it explains that stepUpPercent triggers a dynamic increase every 12 months and that as_of_date selects the rule pack in force. These meaningfully clarify how the parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (calculate SIP mutual fund maturity wealth) with a named optional behavior (annual step-up). It distinguishes itself from the sibling compound_wealth explicitly, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use (mutual fund SIP, recurring deposits, goal-based planning) and an explicit when-not-to-use with the named alternative ('Do not use for US 401(k) / Roth IRA compounding with lump sum; use compound_wealth instead'). This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solo_401k_shieldUS Solo 401(k) contributionARead-onlyIdempotentInspect
Compare Solo 401(k) and SEP-IRA contribution limits for the tax year in force on as_of_date, and the income-tax reduction their pre-tax part gives at the marginal rate entered.
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes employee elective deferral (up to $23,000 or $30,500 if age 50+) plus employer profit-sharing (20% of adjusted net earnings for LLC/sole prop, 25% of W-2 salary for S-Corp) subject to annual statutory additions cap. Multiplies total deductible contribution by marginal tax rate to return net cash saved.
Usage Guidelines: Use when an owner-only business, independent contractor, or partner wants to optimize pre-tax retirement deductions. Do not use for multi-year exponential compound investment growth modeling; use compound_wealth instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| entityType | No | Tax treatment of the business, which changes the contribution limits. The previously advertised value "llc" is not accepted: an LLC may be taxed either way, so choosing one on the caller's behalf would be a guess. State the tax treatment, not the legal form. | |
| isAge50Plus | No | Deprecated and ignored: catch-up eligibility and its limit come from participant_age (required), under the rule pack in force on as_of_date. | |
| netEarnings | Yes | Annual net business profit (Schedule C) or W-2 officer salary (S-Corp) in USD ($/yr). Must be a positive number. | |
| participant_age | Yes | Participant age in years. Required: it decides catch-up eligibility (IRC s.414(v), SECURE 2.0 s.109). | |
| marginalTaxRatePercent | No | Combined federal and state marginal income tax bracket percentage (e.g. 28 for 28%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| sepIra | No | |
| sep_ira | No | |
| currency | No | |
| solo401k | No | |
| solo_401k | No | |
| as_of_date | No | |
| comparison | No | |
| disclaimer | No | |
| entityType | No | |
| entity_type | No | |
| isAge50Plus | No | |
| minor_units | No | |
| netEarnings | No | |
| net_earnings | No | |
| rate_pack_id | No | |
| catch_up_type | No | |
| participant_age | No | |
| effectiveTaxYear | No | |
| planCompensation | No | |
| plan_compensation | No | |
| statutory_authority | No | |
| mandatory_roth_catchup | No | |
| marginalTaxRatePercent | No | |
| annual_compensation_cap | No | |
| catch_up_eligible_limit | No | |
| marginal_tax_rate_percent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and no destructive/open-world behavior, so the sentence restating determinism and zero side effects earns no extra credit. The description does add real behavioral substance beyond the annotations: the deferral caps ($23,000 / $30,500 age 50+), employer profit-sharing math (20% of adjusted net earnings vs 25% of W-2 salary), and the statutory additions cap that governs the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded and organized into Purpose, Behavior, and Usage Guidelines blocks with no filler. It is dense for a single tool but each sentence, including the formulas, contributes to correct invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, full schema coverage, rich annotations, and an output schema present, the description supplies everything an agent needs to decide and call correctly; return-value explanation is correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema descriptions are unusually rich (entityType caveat, as_of_date rule-pack selection, deprecated isAge50Plus, participant_age catch-up rationale), so the schema carries the parameter burden. The description reinforces the age/entity/rate inputs implicitly through the formula but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resources: it compares Solo 401(k) and SEP-IRA contribution limits for a given tax year and computes the income-tax reduction from the pre-tax portion. The scope (owner-only retirement contribution optimization) is clear enough to separate it from siblings like scorp_optimizer or compound_wealth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states explicit when-to-use (owner-only business, independent contractor, or partner optimizing pre-tax retirement deductions) and a when-not with a named alternative: multi-year compound growth modeling should use compound_wealth instead. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
startup_runway_dilutionStartup runway and dilutionARead-onlyIdempotentInspect
Model early-stage startup cash runway calendar exhaustion date, Post-Money SAFE note conversion cap dilution, and Series A unallocated option pool shuffle waterfall.
Behavior: Deterministic, idempotent calculation with zero external side effects. Computes net burn = grossBurn - revenue; Runway months = cashOnHand / netBurn. Models post-money SAFE equity percentage = safeInvestment / postMoneyCap. Simulates Series A pre-money option pool expansion (diluting existing holders prior to lead investor entry) and calculates founder post-financing ownership percentage.
Usage Guidelines: Use for venture capital fundraising planning, startup cash runway tracking, and cap table dilution modeling. Do not use for discounted cash flow or IRR project appraisal; use npv_irr instead.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| cashOnHand | No | Current cash reserves in bank in USD ($). Must be positive. | |
| postMoneyCap | No | Agreed valuation cap on the Post-Money SAFEs in USD ($). | |
| monthlyRevenue | No | Monthly recurring revenue (MRR) or cash collections in USD ($/mo). Default is 15000. | |
| safeInvestment | No | Total capital raised via Post-Money SAFE notes in USD ($). | |
| seriesAPreMoney | No | Agreed Series A pre-money company valuation in USD ($). | |
| monthlyGrossBurn | No | Total monthly cash operating expenses in USD ($/mo). Must be positive. | |
| seriesAInvestment | No | New equity capital invested by Series A lead investors in USD ($). | |
| optionPoolExpansionPercent | No | Required post-closing unallocated employee stock option pool percentage (e.g. 10 for 10%). |
Output Schema
| Name | Required | Description |
|---|---|---|
| runway | No | |
| disclaimer | No | |
| cap_table_dilution | No | |
| statutory_rate_pack | No | |
| monthly_cash_schedule | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds substantial beyond that: deterministic calculation, zero external side effects, and concrete formulas for net burn, runway, SAFE equity percentage, and option pool dilution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and structured into purpose, behavior, and usage guidelines. Despite its density, each section adds necessary information for a complex multi-parameter financial model.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is fully documented and an output schema exists, so return values need not be explained. The description supplies the purpose, behavioral model, formulas, and usage exclusions needed to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by naming relationships among parameters, such as net burn = grossBurn - revenue and SAFE equity = safeInvestment / postMoneyCap, which helps an agent reason about how inputs interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: models startup cash runway, Post-Money SAFE cap dilution, and Series A option pool expansion. It clearly distinguishes this tool from the explicitly named sibling npv_irr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use cases (venture capital fundraising planning, runway tracking, cap table dilution modeling) and an explicit when-not-to-use exclusion with the alternative tool (npv_irr for DCF or IRR).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sukanyaIndia Sukanya Samriddhi YojanaBRead-onlyIdempotentInspect
Simulate Sukanya Samriddhi Yojana (SSY) sovereign small savings scheme for girl child education and marriage under Government of India statutory guidelines. Computes compounding at 8.2% p.a. with 21-year maturity schedule and Section 80C EEE tax exemption.
| Name | Required | Description | Default |
|---|---|---|---|
| girl_age | No | Current age of the girl child (must be under 10 years at account opening). | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| yearly_deposit | Yes | Annual deposit in INR (₹250 to ₹1,50,000, payable for 15 years). |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| status | No | |
| currency | No | |
| as_of_date | No | |
| disclaimer | No | |
| minor_units | No | |
| rule_ids_used | No | |
| total_invested | No | |
| maturity_amount | No | |
| projection_from | No | |
| total_withdrawn | No | |
| yearly_schedule | No | |
| contribution_years | No | |
| total_tenure_years | No | |
| deposit_day_of_month | No | |
| start_financial_year | No | |
| total_interest_earned | No | |
| fifth_day_rule_applied | No | |
| statutory_annual_limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds domain behavior (compounding rate, 21-year maturity, Section 80C EEE exemption), but hardcoding '8.2% p.a.' sits uneasily with the schema's statement that as_of_date selects the governing rule pack, which could mislead on historical/future dates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the purpose and followed by the mechanics. No filler, though the second sentence packs rate, maturity and tax treatment into a single clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the schema fully documents inputs. The main gap is the absence of when-to-use/routing guidance against the many sibling financial calculators.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – all three parameters, including the ₹250–₹1,50,000 deposit band and the under-10 age constraint, are documented in the schema. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Simulate') and a specific resource (Sukanya Samriddhi Yojana), including the girl-child scope, 8.2% rate and 21-year maturity. This clearly separates it from siblings like ppf or fd, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says nothing about when to use this tool versus alternatives such as ppf or compound_wealth, nor about prerequisites (e.g., account-opening age limits are only in the schema). Usage is only inferable from the scheme name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tax_inIndia income tax (new vs old regime)ARead-onlyIdempotentInspect
Compute Indian personal income tax for the tax year in force on as_of_date (Income-tax Act, 2025 from tax year 2026-27; the 1961 Act before), comparing the new regime (standard deduction and Section 87A rebate) with the old regime (Chapter VI-A deductions such as 80C and 80D), and naming the lower one. Pass regime to get only one.
| Name | Required | Description | Default |
|---|---|---|---|
| regime | No | Tax regime to compute: 'both' (dual comparison), 'new', or 'old'. | both |
| as_of_date | Yes | Statutory as-of date in ISO YYYY-MM-DD format. | |
| gross_income | Yes | Gross annual income from all sources in INR (₹). | |
| deductions_80c | No | Chapter VI-A Section 80C deductions (capped at ₹1,50,000 for Old Regime). | |
| deductions_80d | No | Section 80D health insurance premium deduction for Old Regime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| engine | No | |
| status | No | |
| as_of_date | No | |
| comparison | No | |
| disclaimer | No | |
| new_regime | No | |
| old_regime | No | |
| minor_units | No | |
| gross_income | No | |
| new_regime_tax | No | |
| old_regime_tax | No | |
| tax_difference | No | |
| comparison_note | No | |
| calculation_type | No | |
| lower_tax_regime | No | |
| statutory_authority | No | |
| tax_difference_formatted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: which statute applies at a given date, what each regime models (standard deduction, 87A rebate vs Chapter VI-A), and that the lower liability is reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action, then the date/statute rule, then the regime switch. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All five parameters are schema-documented, an output schema exists so return values need not be described, and the one non-obvious semantic (date-driven statute selection) is explained. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic links the schema does not: as_of_date maps to the applicable Act and regime maps to single-vs-dual computation. It does not add numeric examples or format hints for gross_income beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Compute Indian personal income tax') plus scope (dual-regime comparison for the tax year in force on as_of_date). The regime-comparison behavior and 'naming the lower one' clearly separate it from siblings like advance_tax, tds, and gst_regular.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that as_of_date selects the governing Act and that passing regime narrows to a single computation, which tells the agent how to steer the call. It stops short of stating when not to use it or naming an alternative sibling, so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tcsIndia TCS (tax collected at source)ARead-onlyIdempotentInspect
Calculate statutory Tax Collected at Source (TCS) under Section 206C of the Indian Income-tax Act, 1961 (AY 2025-26 / FY 2024-25). Computes liability for Section 206C(1H) sale of goods above ₹50 lakh threshold, scrap sale, timber, alcoholic liquor, minerals, Liberalised Remittance Scheme (LRS), and overseas tour packages, including Section 206CC higher rates.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Sale consideration / receipt amount in INR (₹). | |
| nature | No | Statutory nature of the collection, which selects the section under s.206C and therefore the rate. State it exactly; it is not inferred and has no default, because a default would choose a section on the caller's behalf. Alias: payment_nature. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| buyer_pan_status | No | Whether the buyer has furnished a valid PAN. Note that "missing_or_invalid" currently returns INSUFFICIENT rather than a number: collection without PAN falls under s.206CC, and that rule is not yet in the active rate pack, so the engine refuses rather than answering at the ordinary rate and understating the liability. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| amount | No | |
| status | No | |
| pack_id | No | |
| section | No | |
| currency | No | |
| base_rate | No | |
| applicable | No | |
| as_of_date | No | |
| disclaimer | No | |
| tcs_amount | No | |
| liable_base | No | |
| minor_units | No | |
| rule_ids_used | No | |
| effective_rate | No | |
| payment_nature | No | |
| total_collectible | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so the safety profile is covered. The description adds domain context (Section 206CC higher rates, the date-selected rule pack) but discloses no additional behavioral traits such as refusal modes, error handling, or thresholds beyond the s.206C(1H) ₹50 lakh mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and statute, then a single compact enumeration of covered natures; nothing is redundant. The list is long but each item maps to a distinct section/rate, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and annotations plus 100% schema coverage carry the safety and parameter burden. The description supplies adequate statutory scope; only explicit usage/routing guidance is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the enum values, the required 'amount'/'as_of_date' constraints, the PAN-status refusal behaviour and the 'nature' alias are all documented in the schema itself. The description adds no parameter-level detail beyond what structured data already supplies, making 3 the correct baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Calculate statutory Tax Collected at Source (TCS)') and pins the exact statutory basis (Section 206C, AY 2025-26), then enumerates the covered collection natures. An agent can distinguish this from the sibling 'tds' (deducted vs collected at source) purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the statutory scope, but the description never states when to prefer this tool over alternatives ('tds', 'tax_in', 'gst_regular') or the preconditions for a valid call. It gives context for interpreting the result without routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tdsIndia TDS (tax deducted at source)ARead-onlyIdempotentInspect
Calculate statutory Tax Deducted at Source (TDS) under the Indian Income-tax Act, 1961 (AY 2025-26 / FY 2024-25). Supports Section 194C (contractor), 194J (professional/technical fees), 194Q (goods purchase), 194H (commission/brokerage), 194I (rent), higher deduction rate under Section 206AA for missing PAN, and precedence evaluation between 194Q and 206C(1H).
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Transaction payment or credit amount in INR (₹). | |
| resident | Yes | Whether the payee is resident under s.6. Non-resident payments fall under s.195 and are out of scope, so false is refused rather than answered. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the statutory rate pack in force on that date. Required: the engine will not assume a date. | |
| payee_type | Yes | Payee class. Under s.194C this selects 1% (individual or HUF) versus 2% (domestic company), so it changes the answer and is not defaulted. The legacy values 'individual' and 'company' are still accepted as exact synonyms; any other value is refused. | |
| payment_type | Yes | Statutory nature of the payment, which selects the section and therefore the rate. State it exactly; the engine does not infer it. Note that professional_services (10%) and technical_services (2%) are DISTINCT and differ fivefold - there is deliberately no combined value, and a request that does not distinguish them is answered AMBIGUOUS rather than guessed. | |
| pan_available | Yes | Whether the payee has furnished a PAN. Required: without a PAN, Section 206AA applies the higher rate, so it is never assumed. | |
| pan_operative | Yes | Whether the furnished PAN is operative (linked to Aadhaar). Required when pan_available is true: an inoperative PAN is treated as no PAN under Section 206AA. |
Output Schema
| Name | Required | Description |
|---|---|---|
| trace | No | |
| reason | No | |
| status | No | |
| pack_id | No | |
| currency | No | |
| applicable | No | |
| as_of_date | No | |
| comparison | No | |
| disclaimer | No | |
| tds_amount | No | |
| act_applied | No | |
| escalations | No | |
| liable_base | No | |
| minor_units | No | |
| net_payable | No | |
| on_crossing | No | |
| return_form | No | |
| act_2025_ref | No | |
| payment_code | No | |
| rule_ids_used | No | |
| crossing_basis | No | |
| effective_rate | No | |
| engine_version | No | |
| legacy_section | No | |
| threshold_value | No | |
| certificate_form | No | |
| deposit_due_date | No | |
| preimage_version | No | |
| consumed_input_fields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful domain behavior beyond annotations: higher deduction rate under Section 206AA for missing PAN and precedence evaluation between 194Q and 206C(1H). It stops short of disclosing the refusal for non-resident payments (that appears only in the schema), but still contributes useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, followed by supported sections and special rules. Every clause earns its place, and there is no redundant or filler content. It is appropriately sized for a complex statutory calculation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, rich schema, annotations, and existing output schema, the description covers the essential scope (Act, assessment year, supported sections, key rules). It does not mention the out-of-scope handling for non-resident payments or the mandatory date selection, but those details are fully documented in the schema. The description is largely complete, with only minor contextual gaps that the structured fields already fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured schema already documents all seven parameters in detail. The description adds no parameter-level syntax, format, or constraint information beyond what the schema provides. A baseline score of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Calculate') and resource ('Tax Deducted at Source') within a precise legal context (Indian Income-tax Act, 1961, AY 2025-26). It lists the supported sections, which clearly distinguishes it from siblings like tcs or gst_regular. An agent can immediately tell this is a statutory TDS calculator for India.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by enumerating supported sections and special rules (missing PAN, 194Q vs 206C(1H) precedence), but it never explicitly states when to choose this tool over alternatives such as tcs or advance_tax. There is no 'when-not-to-use' or sibling routing guidance. The schema descriptions carry the burden of prerequisites and refusals, so the description's guidance is minimal but not absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vat_sales_taxVAT and sales taxARead-onlyIdempotentInspect
Calculate European Value Added Tax (VAT) and global sales taxes in either Add Mode (Net price to Gross price) or Remove Mode (Gross price to Net price) with statutory rate verification.
Behavior: Deterministic, idempotent calculation with zero external side effects. In 'add' mode: Tax = Amount * (Rate / 100), Total = Amount + Tax. In 'remove' mode: Net = Amount / (1 + Rate / 100), Tax = Amount - Net. Returns exact net, tax amount, and gross values rounded to 2 decimal places.
Usage Guidelines: Use for e-commerce, international invoicing, retail pricing, and VAT compliance calculations. Do not use for restaurant tipping and bill splits; use tip_splitter instead.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Calculation mode: 'add' to append tax to net amount, or 'remove' to extract embedded tax from gross amount. | add |
| amount | Yes | Base monetary amount to calculate tax on (net amount in 'add' mode, gross price in 'remove' mode). Must be positive. | |
| as_of_date | Yes | Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date. | |
| vatRatePercent | Yes | VAT or sales tax rate in percent (0-100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| metadata | No | |
| rate_tier | No | |
| disclaimer | No | |
| net_amount | No | |
| vat_amount | No | |
| gross_amount | No | |
| jurisdiction | No | |
| rate_percent | No | |
| effective_date | No | |
| statutory_authority | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered; the description adds the actual arithmetic in both modes and the 2-decimal rounding of returns, which is genuinely behavioral detail beyond the annotations. The 'statutory rate verification' claim is slightly opaque given the rate arrives as a user-supplied parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then clearly labelled Behaviour and Usage Guidelines sections. The formulas are slightly verbose but each conveys a distinct, load-bearing fact; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-purpose calculator with an output schema (so return values need no prose) and full parameter coverage, the description supplies modes, formulas, rounding and usage scope. Minor gaps remain around the statutory rate source implied by 'verification' and differentiation from the GST/income-tax siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents amount, vatRatePercent, as_of_date and the mode enum. The description's parameters section adds only marginal mapping (net vs gross meaning of amount per mode) and no new syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Calculate European Value Added Tax (VAT) and global sales taxes') plus the add/remove mode scope. However, it does not differentiate against the actual tax siblings in this namespace (gst_regular, gst_composition, tax_in, tcs, tds) – its only named alternative, tip_splitter, is not a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use contexts (e-commerce, international invoicing, retail pricing, VAT compliance) and an explicit exclusion with an alternative ('Do not use for restaurant tipping and bill splits; use tip_splitter instead'). The exclusion targets a tool outside the sibling set, so it does not help the agent route among the real tax siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Removed
b2b_withholding_risk
1 tool update
- Changed
gst_regular1 field changed- added
Output schema / properties / round_offAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +}
3 tool updates
- Changed
billable_floor2 fields changed- removed
Output schema / properties / optimal_hourly_rateRemoved value: -{ - "type": [ - "string", - "number", - "null" - ] -} - added
Output schema / properties / required_hourly_rateAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +}
- Changed
fx_invoicing2 fields changed- added
Output schema / properties / lowest_cost_railAdded value: +{ + "type": [ + "object", + "null" + ] +} - removed
Output schema / properties / optimal_railRemoved value: -{ - "type": [ - "object", - "null" - ] -}
- Changed
tax_in8 fields changed- added
Output schema / properties / comparison_noteAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +} - added
Output schema / properties / lower_tax_regimeAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +} - removed
Output schema / properties / optimal_regimeRemoved value: -{ - "type": [ - "string", - "number", - "null" - ] -} - removed
Output schema / properties / recommendationRemoved value: -{ - "type": [ - "string", - "number", - "null" - ] -} - added
Output schema / properties / tax_differenceAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +} - added
Output schema / properties / tax_difference_formattedAdded value: +{ + "type": [ + "string", + "number", + "null" + ] +} - removed
Output schema / properties / tax_savingsRemoved value: -{ - "type": [ - "string", - "number", - "null" - ] -} - removed
Output schema / properties / tax_savings_formattedRemoved value: -{ - "type": [ - "string", - "number", - "null" - ] -}
1 tool update
- Changed
cloud_egress_finops1 field changed- added
Input schema / properties / primary_providerAdded value: +{ + "description": "The cloud the traffic leaves from, priced from the egress pack in force: 'aws', 'gcp' or 'azure'. Omitted: aws.", + "enum": [ + "aws", + "gcp", + "azure" + ], + "type": "string" +}
1 tool update
- Changed
solo_401k_shield3 fields changed- removed
Input schema / properties / isAge50Plus / defaultRemoved value: -false - added
Input schema / properties / isAge50Plus / deprecatedAdded value: +true - changed
Input schema / properties / isAge50Plus / descriptionPrevious value: -"Whether the account holder is age 50 or older, unlocking the statutory $7,500 catch-up contribution."New value: +"Deprecated and ignored: catch-up eligibility and its limit come from participant_age (required), under the rule pack in force on as_of_date."
1 tool update
- Changed
fx_invoicing1 field changed- changed
Input schema / properties / rails / items / properties / name / descriptionPrevious value: -"Provider or method name, e.g. 'Bank wire'."New value: +"Provider name, e.g. 'Bank wire'."
1 tool update
- Changed
fx_invoicing3 fields changed- added
Input schema / properties / customMidMarketRateAdded value: +{ + "description": "Optional: your own USD-to-target exchange rate, used instead of the published reference rate.", + "exclusiveMinimum": 0, + "type": "number" +} - added
Input schema / properties / railsAdded value: +{ + "description": "The payment providers to compare, with the fees YOUR account is charged for this route.", + "items": { + "properties": { + "feePercent": { + "description": "Percentage fee on the amount sent (%), e.g. 0.55 for 0.55%.", + "example": 0.5, + "exclusiveMaximum": 100, + "minimum": 0, + "type": "number" + }, + "fixedFeeUsd": { + "description": "Fixed fee per transfer in USD ($). 0 if none.", + "example": 25, + "minimum": 0, + "type": "number" + }, + "fxMarkupPercent": { + "description": "Markup over the reference exchange rate (%), e.g. 1.5 for 1.5%. 0 if the provider converts at the mid-market rate.", + "example": 1.5, + "exclusiveMaximum": 100, + "minimum": 0, + "type": "number" + }, + "name": { + "description": "Provider or method name, e.g. 'Bank wire'.", + "example": "Bank wire", + "maxLength": 80, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "fixedFeeUsd", + "feePercent", + "fxMarkupPercent" + ], + "type": "object" + }, + "maxItems": 10, + "minItems": 1, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "invoiceUsd", - "as_of_date" -]New value: +[ + "invoiceUsd", + "rails", + "as_of_date" +]
1 tool update
- Changed
land_units1 field changed- changed
Input schema / properties / to_unit / descriptionPrevious value: -"Unit to convert into."New value: +"Unit to convert into. If omitted, the area is returned in every standard unit."
30 tool updates
- Changed
advance_tax1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "advance_tax_applicable": { + "type": [ + "boolean", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "assessment_year": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "exemption_or_applicability_reason": { + "type": [ + "string", + "number", + "null" + ] + }, + "filing_or_payment_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "financial_year": { + "type": [ + "string", + "number", + "null" + ] + }, + "gross_assessed_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "instalment_details": { + "type": [ + "array", + "null" + ] + }, + "is_presumptive": { + "type": [ + "boolean", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "net_advance_tax_base_s208": { + "type": [ + "string", + "number", + "null" + ] + }, + "return_due_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "section_234a_applicable": { + "type": [ + "boolean", + "null" + ] + }, + "section_234a_months_charged": { + "type": [ + "string", + "number", + "null" + ] + }, + "section_234a_shortfall_base_rule119a": { + "type": [ + "string", + "number", + "null" + ] + }, + "section_234b_applicable": { + "type": [ + "boolean", + "null" + ] + }, + "section_234b_months_charged": { + "type": [ + "string", + "number", + "null" + ] + }, + "section_234b_shortfall_base_rule119a": { + "type": [ + "string", + "number", + "null" + ] + }, + "section_234b_threshold_90_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tds_tcs_credit": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_advance_tax_paid": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_amount_payable": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_interest_payable": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_section_234a_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_section_234b_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_section_234c_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "unpaid_tax_principal": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
ai_token_arbitrage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "arbitrage": { + "type": [ + "object", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "freshness": { + "type": [ + "object", + "null" + ] + }, + "inputs": { + "type": [ + "object", + "null" + ] + }, + "matrix": { + "type": [ + "object", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "token_distribution": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
b2b_withholding_risk1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "engine": { + "type": [ + "string", + "number", + "null" + ] + }, + "grossInvoicing": { + "type": [ + "object", + "null" + ] + }, + "netPaymentTargetUsd": { + "type": [ + "string", + "number", + "null" + ] + }, + "permanentEstablishment": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
billable_floor1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "economics": { + "type": [ + "object", + "null" + ] + }, + "metadata": { + "type": [ + "object", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "naive_economics": { + "type": [ + "object", + "null" + ] + }, + "naive_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "naive_shortfall": { + "type": [ + "string", + "number", + "null" + ] + }, + "optimal_hourly_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "target_net_cash": { + "type": [ + "string", + "number", + "null" + ] + }, + "time_allocation": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
breakeven_margin1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "breakEvenRevenue": { + "type": [ + "string", + "number", + "null" + ] + }, + "breakEvenUnits": { + "type": [ + "string", + "number", + "null" + ] + }, + "contributionMarginRatioPercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "degreeOfOperatingLeverage": { + "type": [ + "string", + "number", + "null" + ] + }, + "expectedProfit": { + "type": [ + "string", + "number", + "null" + ] + }, + "expectedUnitsSold": { + "type": [ + "string", + "number", + "null" + ] + }, + "fixedCosts": { + "type": [ + "string", + "number", + "null" + ] + }, + "marginOfSafetyPercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "marginOfSafetyRevenue": { + "type": [ + "string", + "number", + "null" + ] + }, + "marginOfSafetyUnits": { + "type": [ + "string", + "number", + "null" + ] + }, + "unitContributionMargin": { + "type": [ + "string", + "number", + "null" + ] + }, + "unitPrice": { + "type": [ + "string", + "number", + "null" + ] + }, + "unitVariableCost": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
cagr_inflation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "exact_doubling_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "final_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "inflation_rate_applied": { + "type": [ + "string", + "number", + "null" + ] + }, + "initial_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "mode": { + "type": [ + "string", + "number", + "null" + ] + }, + "nominal_cagr_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "nominal_total_return_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "purchasing_power_loss": { + "type": [ + "string", + "number", + "null" + ] + }, + "real_cagr_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "real_purchasing_power_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "rule_of_72_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_absolute_gain": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearly_trajectory": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
cloud_egress_finops1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "edge_proxy_optimization": { + "type": [ + "object", + "null" + ] + }, + "freshness": { + "type": [ + "object", + "null" + ] + }, + "inputs": { + "type": [ + "object", + "null" + ] + }, + "multi_cloud_comparison": { + "type": [ + "object", + "null" + ] + }, + "primary_provider_cost": { + "type": [ + "object", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "savings": { + "type": [ + "object", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
compound_wealth1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "futureValue": { + "type": [ + "string", + "number", + "null" + ] + }, + "principal": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalDeposited": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalInterest": { + "type": [ + "string", + "number", + "null" + ] + }, + "yearlySchedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
contractor_parity1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "breakevenHourlyRate": { + "type": [ + "string", + "number", + "null" + ] + }, + "breakeven_contractor_hourly_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "contractor": { + "type": [ + "object", + "null" + ] + }, + "contractorTakeHome": { + "type": [ + "string", + "number", + "null" + ] + }, + "contractor_advantage": { + "type": [ + "boolean", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "metadata": { + "type": [ + "object", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "net_cash_delta": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "verdict": { + "type": [ + "object", + "null" + ] + }, + "w2": { + "type": [ + "object", + "null" + ] + }, + "w2TakeHome": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
fd1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "base_interest_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "compounding_convention": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_interest_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "gross_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "is_senior_citizen": { + "type": [ + "boolean", + "null" + ] + }, + "maturity_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "net_maturity_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "payout_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "principal": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "section_reference": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tds_applicable": { + "type": [ + "boolean", + "null" + ] + }, + "tds_threshold": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_tds_deducted": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearly_schedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
feie_nomad_tracker1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "exclusions": { + "type": [ + "object", + "null" + ] + }, + "filing_status": { + "type": [ + "string", + "number", + "null" + ] + }, + "foreign_earned_income": { + "type": [ + "string", + "number", + "null" + ] + }, + "qualification": { + "type": [ + "object", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "state_tax_exposure": { + "type": [ + "object", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "tax_calculation": { + "type": [ + "object", + "null" + ] + }, + "test_type": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
fx_invoicing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annual_savings_usd": { + "type": [ + "string", + "number", + "null" + ] + }, + "as_of_timestamp": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "invoice_usd": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "optimal_rail": { + "type": [ + "object", + "null" + ] + }, + "rails": { + "type": [ + "array", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "single_invoice_savings_usd": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "target_currency": { + "type": [ + "object", + "null" + ] + }, + "theoretical_max_local": { + "type": [ + "string", + "number", + "null" + ] + }, + "worst_rail": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
gold1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_price_per_gram": { + "type": [ + "string", + "number", + "null" + ] + }, + "final_invoice_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "gold_cgst": { + "type": [ + "string", + "number", + "null" + ] + }, + "gold_gst_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "gold_gst_total": { + "type": [ + "string", + "number", + "null" + ] + }, + "gold_sgst": { + "type": [ + "string", + "number", + "null" + ] + }, + "gold_taxable_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_applied": { + "type": [ + "boolean", + "null" + ] + }, + "hallmark_cgst": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_fee": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_gst_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_gst_total": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_sgst": { + "type": [ + "string", + "number", + "null" + ] + }, + "hallmark_total_with_gst": { + "type": [ + "string", + "number", + "null" + ] + }, + "is_benchmark_rate": { + "type": [ + "boolean", + "null" + ] + }, + "making_charges": { + "type": [ + "string", + "number", + "null" + ] + }, + "making_charges_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "making_charges_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "mode": { + "type": [ + "string", + "number", + "null" + ] + }, + "purity_fineness_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "purity_karat": { + "type": [ + "string", + "number", + "null" + ] + }, + "purity_ratio": { + "type": [ + "string", + "number", + "null" + ] + }, + "rate_per_gram_24k": { + "type": [ + "string", + "number", + "null" + ] + }, + "rate_per_gram_applied": { + "type": [ + "string", + "number", + "null" + ] + }, + "raw_gold_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_gst": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_taxable_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "unit_input": { + "type": [ + "string", + "number", + "null" + ] + }, + "weight_in_grams": { + "type": [ + "string", + "number", + "null" + ] + }, + "weight_input": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
gst_composition1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "can_collect_tax_from_customer": { + "type": [ + "boolean", + "null" + ] + }, + "cgst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "cgst_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "compliance_statement": { + "type": [ + "string", + "number", + "null" + ] + }, + "composition_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "composition_tax_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "dealer_category": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "eligible": { + "type": [ + "boolean", + "null" + ] + }, + "itc_admissible": { + "type": [ + "boolean", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "quarter_turnover": { + "type": [ + "string", + "number", + "null" + ] + }, + "rcm_tax_payable_to_govt": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "sgst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "sgst_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_section": { + "type": [ + "string", + "number", + "null" + ] + }, + "taxable_turnover_base": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_tax_payable": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "turnover_limit": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
gst_regular1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "base_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "calculation_mode": { + "type": [ + "string", + "number", + "null" + ] + }, + "cess_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "cess_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "cgst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "eligible_itc_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "gross_invoice_total": { + "type": [ + "string", + "number", + "null" + ] + }, + "gst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "igst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "invoice_payable_to_supplier": { + "type": [ + "string", + "number", + "null" + ] + }, + "is_rcm": { + "type": [ + "boolean", + "null" + ] + }, + "itc_eligible": { + "type": [ + "boolean", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "net_tax_cost": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "sgst_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_section": { + "type": [ + "string", + "number", + "null" + ] + }, + "supply_structure": { + "type": [ + "string", + "number", + "null" + ] + }, + "supply_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "tax_payable_direct_to_govt": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
home_loan_emi1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "actualMonths": { + "type": [ + "string", + "number", + "null" + ] + }, + "actual_tenure_months": { + "type": [ + "string", + "number", + "null" + ] + }, + "amortization_method": { + "type": [ + "string", + "number", + "null" + ] + }, + "annual_interest_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "has_prepayment": { + "type": [ + "boolean", + "null" + ] + }, + "interestSaved": { + "type": [ + "string", + "number", + "null" + ] + }, + "interest_saved": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "monthlyEMI": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_emi": { + "type": [ + "string", + "number", + "null" + ] + }, + "prepayment_total_principal": { + "type": [ + "string", + "number", + "null" + ] + }, + "principal": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "scheduled_months": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenureReducedYears": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_reduced_months": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_reduced_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalAmount": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalInterest": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_amount_payable": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearlySchedule": { + "type": [ + "array", + "null" + ] + }, + "yearly_schedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
land_units1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "converted_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "from_unit": { + "type": [ + "string", + "number", + "null" + ] + }, + "input_area": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "sqft_factor_from": { + "type": [ + "string", + "number", + "null" + ] + }, + "sqft_factor_to": { + "type": [ + "string", + "number", + "null" + ] + }, + "standard_breakdown": { + "type": [ + "object", + "null" + ] + }, + "state_applied": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "to_unit": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
mortgage_piti1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annual_hazard_insurance": { + "type": [ + "string", + "number", + "null" + ] + }, + "annual_interest_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "annual_property_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "assumptions": { + "type": [ + "array", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "down_payment": { + "type": [ + "string", + "number", + "null" + ] + }, + "down_payment_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "home_price": { + "type": [ + "string", + "number", + "null" + ] + }, + "initial_ltv_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "initial_monthly_piti": { + "type": [ + "string", + "number", + "null" + ] + }, + "isPmiRequired": { + "type": [ + "boolean", + "null" + ] + }, + "is_hazard_insurance_estimated": { + "type": [ + "boolean", + "null" + ] + }, + "is_pmi_required": { + "type": [ + "boolean", + "null" + ] + }, + "is_property_tax_estimated": { + "type": [ + "boolean", + "null" + ] + }, + "loan_term_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "monthlyHomeInsurance": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthlyPI": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthlyPmi": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthlyPropertyTax": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthlyTotalPITI": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_hazard_insurance": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_piti_after_pmi_cancellation": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_pmi": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_principal_and_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_property_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "principal_loan_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "property_tax_rate_applied": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalCostOfLoan": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalInsurancePaid": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalInterest": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalPmiPaid": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalTaxPaid": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_cost_of_home_and_loan": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_hazard_insurance_paid": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_interest_paid": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_lifetime_pmi": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_principal_and_interest": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_principal_paid": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_property_tax_paid": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearlySchedule": { + "type": [ + "array", + "null" + ] + }, + "yearly_schedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
npv_irr1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "discountRatePercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "discountedPaybackYears": { + "type": [ + "string", + "number", + "null" + ] + }, + "initialInvestment": { + "type": [ + "string", + "number", + "null" + ] + }, + "irrPercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "isViable": { + "type": [ + "boolean", + "null" + ] + }, + "netCashflow": { + "type": [ + "string", + "number", + "null" + ] + }, + "npv": { + "type": [ + "string", + "number", + "null" + ] + }, + "paybackYears": { + "type": [ + "string", + "number", + "null" + ] + }, + "profitabilityIndex": { + "type": [ + "string", + "number", + "null" + ] + }, + "schedule": { + "type": [ + "array", + "null" + ] + }, + "totalInflows": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
pack_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "class": { + "type": [ + "string", + "number", + "null" + ] + }, + "credits": { + "type": [ + "string", + "number", + "null" + ] + }, + "packs": { + "type": [ + "array", + "null" + ] + }, + "service": { + "type": [ + "string", + "number", + "null" + ] + }, + "timestamp": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_engines": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
ppf1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "deposit_day_of_month": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "fifth_day_rule_applied": { + "type": [ + "boolean", + "null" + ] + }, + "maturity_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "projection_from": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "start_financial_year": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_annual_limit": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_interest_earned": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_invested": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearly_schedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
scorp_optimizer1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effectiveTaxYear": { + "type": [ + "string", + "number", + "null" + ] + }, + "filing_status": { + "type": [ + "string", + "number", + "null" + ] + }, + "llc": { + "type": [ + "object", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "netProfit": { + "type": [ + "string", + "number", + "null" + ] + }, + "net_profit": { + "type": [ + "string", + "number", + "null" + ] + }, + "overhead": { + "type": [ + "object", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "savings": { + "type": [ + "object", + "null" + ] + }, + "scorp": { + "type": [ + "object", + "null" + ] + }, + "sole_prop_baseline": { + "type": [ + "object", + "null" + ] + }, + "statutoryWageBase": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "wage_base_cap": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
sip_investment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annualReturnRate": { + "type": [ + "string", + "number", + "null" + ] + }, + "annual_return_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "annual_step_up_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "compounding_convention": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "estimatedReturns": { + "type": [ + "string", + "number", + "null" + ] + }, + "estimated_returns": { + "type": [ + "string", + "number", + "null" + ] + }, + "maturityValue": { + "type": [ + "string", + "number", + "null" + ] + }, + "maturity_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "monthlyInvestment": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_investment": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "stepUpPercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenureYears": { + "type": [ + "string", + "number", + "null" + ] + }, + "tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "totalInvested": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_invested": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "wealth_multiplier": { + "type": [ + "string", + "number", + "null" + ] + }, + "yearly_breakdown": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
solo_401k_shield1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "annual_compensation_cap": { + "type": [ + "string", + "number", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "catch_up_eligible_limit": { + "type": [ + "string", + "number", + "null" + ] + }, + "catch_up_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "comparison": { + "type": [ + "object", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effectiveTaxYear": { + "type": [ + "string", + "number", + "null" + ] + }, + "entityType": { + "type": [ + "string", + "number", + "null" + ] + }, + "entity_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "isAge50Plus": { + "type": [ + "boolean", + "null" + ] + }, + "mandatory_roth_catchup": { + "type": [ + "boolean", + "null" + ] + }, + "marginalTaxRatePercent": { + "type": [ + "string", + "number", + "null" + ] + }, + "marginal_tax_rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "netEarnings": { + "type": [ + "string", + "number", + "null" + ] + }, + "net_earnings": { + "type": [ + "string", + "number", + "null" + ] + }, + "participant_age": { + "type": [ + "string", + "number", + "null" + ] + }, + "planCompensation": { + "type": [ + "string", + "number", + "null" + ] + }, + "plan_compensation": { + "type": [ + "string", + "number", + "null" + ] + }, + "rate_pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "sepIra": { + "type": [ + "object", + "null" + ] + }, + "sep_ira": { + "type": [ + "object", + "null" + ] + }, + "solo401k": { + "type": [ + "object", + "null" + ] + }, + "solo_401k": { + "type": [ + "object", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
startup_runway_dilution1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cap_table_dilution": { + "type": [ + "object", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "monthly_cash_schedule": { + "type": [ + "array", + "null" + ] + }, + "runway": { + "type": [ + "object", + "null" + ] + }, + "statutory_rate_pack": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" +}
- Changed
sukanya1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "contribution_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "deposit_day_of_month": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "fifth_day_rule_applied": { + "type": [ + "boolean", + "null" + ] + }, + "maturity_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "projection_from": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "start_financial_year": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_annual_limit": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_interest_earned": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_invested": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_tenure_years": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_withdrawn": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + }, + "yearly_schedule": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
tax_in1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "calculation_type": { + "type": [ + "string", + "number", + "null" + ] + }, + "comparison": { + "type": [ + "object", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "engine": { + "type": [ + "string", + "number", + "null" + ] + }, + "gross_income": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": {}, + "mode": { + "type": [ + "string", + "number", + "null" + ] + }, + "new_regime": { + "type": [ + "object", + "null" + ] + }, + "new_regime_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "old_regime": { + "type": [ + "object", + "null" + ] + }, + "old_regime_tax": { + "type": [ + "string", + "number", + "null" + ] + }, + "optimal_regime": { + "type": [ + "string", + "number", + "null" + ] + }, + "recommendation": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "tax_savings": { + "type": [ + "string", + "number", + "null" + ] + }, + "tax_savings_formatted": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
- Changed
tcs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "applicable": { + "type": [ + "boolean", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "base_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "liable_base": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "payment_nature": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "section": { + "type": [ + "string", + "number", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tcs_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "total_collectible": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
tds1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "act_2025_ref": { + "type": [ + "string", + "number", + "null" + ] + }, + "act_applied": { + "type": [ + "string", + "number", + "null" + ] + }, + "applicable": { + "type": [ + "boolean", + "null" + ] + }, + "as_of_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "certificate_form": { + "type": [ + "string", + "number", + "null" + ] + }, + "comparison": { + "type": [ + "string", + "number", + "null" + ] + }, + "consumed_input_fields": { + "type": [ + "array", + "null" + ] + }, + "crossing_basis": { + "type": [ + "string", + "number", + "null" + ] + }, + "currency": { + "type": [ + "string", + "number", + "null" + ] + }, + "deposit_due_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_rate": { + "type": [ + "string", + "number", + "null" + ] + }, + "engine_version": { + "type": [ + "string", + "number", + "null" + ] + }, + "escalations": { + "type": [ + "array", + "null" + ] + }, + "legacy_section": { + "type": [ + "string", + "number", + "null" + ] + }, + "liable_base": { + "type": [ + "string", + "number", + "null" + ] + }, + "minor_units": { + "type": [ + "object", + "null" + ] + }, + "net_payable": { + "type": [ + "string", + "number", + "null" + ] + }, + "on_crossing": { + "type": [ + "string", + "number", + "null" + ] + }, + "pack_id": { + "type": [ + "string", + "number", + "null" + ] + }, + "payment_code": { + "type": [ + "string", + "number", + "null" + ] + }, + "preimage_version": { + "type": [ + "string", + "number", + "null" + ] + }, + "reason": { + "type": [ + "string", + "number", + "null" + ] + }, + "return_form": { + "type": [ + "string", + "number", + "null" + ] + }, + "rule_ids_used": { + "type": [ + "array", + "null" + ] + }, + "status": { + "type": [ + "string", + "number", + "null" + ] + }, + "tds_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "threshold_value": { + "type": [ + "string", + "number", + "null" + ] + }, + "trace": { + "type": [ + "array", + "null" + ] + } + }, + "type": "object" +}
- Changed
vat_sales_tax1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "disclaimer": { + "type": [ + "string", + "number", + "null" + ] + }, + "effective_date": { + "type": [ + "string", + "number", + "null" + ] + }, + "gross_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "jurisdiction": { + "type": [ + "string", + "number", + "null" + ] + }, + "metadata": { + "type": [ + "object", + "null" + ] + }, + "mode": { + "type": [ + "string", + "number", + "null" + ] + }, + "net_amount": { + "type": [ + "string", + "number", + "null" + ] + }, + "rate_percent": { + "type": [ + "string", + "number", + "null" + ] + }, + "rate_tier": { + "type": [ + "string", + "number", + "null" + ] + }, + "statutory_authority": { + "type": [ + "string", + "number", + "null" + ] + }, + "vat_amount": { + "type": [ + "string", + "number", + "null" + ] + } + }, + "type": "object" +}
5 tool updates
- Removed
compute - Removed
context_sanitizer_get_dsi - Removed
context_sanitizer_verify_scope - Removed
indian_income_tax - Removed
tax_in_new
1 tool update
- Changed
advance_tax8 fields changed- added
Input schema / properties / advance_tax_paidAdded value: +{ + "description": "Advance tax payments made, each with its date. Omit if none were made.", + "items": { + "properties": { + "amount": { + "description": "Amount paid (₹).", + "pattern": "^\\d+\\.\\d{2}$", + "type": "string" + }, + "date": { + "description": "Payment date, YYYY-MM-DD.", + "format": "date", + "type": "string" + } + }, + "required": [ + "date", + "amount" + ], + "type": "object" + }, + "type": "array" +} - changed
Input schema / properties / assessed_tax / descriptionPrevious value: -"Estimated total annual net tax liability after TDS/TCS credits in INR (₹). Advance tax mandatory if >= ₹10,000."New value: +"Total tax on the year's income in INR (₹), before advance tax and before TDS/TCS credit. Advance tax applies when the balance after TDS/TCS is ₹10,000 or more." - added
Input schema / properties / capital_gains_taxAdded value: +{ + "description": "Part of assessed_tax that arises on capital gains (₹); excluded from instalments due before the gain arose.", + "pattern": "^\\d+\\.\\d{2}$", + "type": "string" +} - added
Input schema / properties / date_of_filing_or_paymentAdded value: +{ + "description": "Date the return was (or will be) filed, YYYY-MM-DD. Ends the Section 234B period and decides whether Section 234A applies. Default: the return due date for filing_category.", + "format": "date", + "type": "string" +} - added
Input schema / properties / filing_categoryAdded value: +{ + "default": "non_audit_individual", + "description": "Sets the return due date. non_audit_individual (ITR-1/ITR-2): 31 July. non_audit_business (business or profession, accounts not audited, and such firms' partners): 31 August from tax year 2026-27, 31 July before. audit_corporate_and_business: 31 October. transfer_pricing_international: 30 November.", + "enum": [ + "non_audit_individual", + "non_audit_business", + "audit_corporate_and_business", + "transfer_pricing_international" + ], + "type": "string" +} - added
Input schema / properties / is_presumptive_44ad_44adaAdded value: +{ + "description": "True if income is declared under presumptive taxation (44AD/44ADA): one instalment of 100% by 15 March.", + "type": "boolean" +} - added
Input schema / properties / is_senior_citizen_no_businessAdded value: +{ + "description": "True for a resident senior citizen (60+) with no business or professional income: exempt from advance tax.", + "type": "boolean" +} - added
Input schema / properties / tds_tcs_creditAdded value: +{ + "description": "Tax already deducted or collected at source for the year (₹). Default 0.", + "pattern": "^\\d+\\.\\d{2}$", + "type": "string" +}
24 tool updates
- Changed
advance_tax2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "assessed_tax" -]New value: +[ + "assessed_tax", + "as_of_date" +]
- Changed
ai_token_arbitrage1 field changed- changed
Input schema / requiredPrevious value: -[ - "prompt_tokens", - "completion_tokens" -]New value: +[ + "prompt_tokens", + "completion_tokens", + "as_of_date" +]
- Changed
billable_floor2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "targetNetCash" -]New value: +[ + "targetNetCash", + "as_of_date" +]
- Changed
cagr_inflation2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "initialValue", - "finalValue", - "periodsYears", - "mode" -]New value: +[ + "initialValue", + "finalValue", + "periodsYears", + "as_of_date" +]
- Changed
cloud_egress_finops1 field changed- added
Input schema / requiredAdded value: +[ + "as_of_date" +]
- Changed
contractor_parity6 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - removed
Input schema / properties / eligibleQBI / defaultRemoved value: -true - changed
Input schema / properties / eligibleQBI / descriptionPrevious value: -"Whether the 1099 contractor business qualifies for the Section 199A 20% Qualified Business Income deduction."New value: +"Whether the contractor income qualifies for the Section 199A qualified business income deduction. Required: it changes federal tax and is not assumed." - removed
Input schema / properties / selectedRailRemoved value: -{ - "default": "wise", - "description": "Payment rail provider for international contractor payout: 'wise', 'deel', 'payoneer', 'stripe', 'paypal', or 'wire'.", - "enum": [ - "wise", - "deel", - "payoneer", - "stripe", - "paypal", - "wire" - ], - "type": "string" -} - removed
Input schema / properties / targetCurrencyRemoved value: -{ - "default": "EUR", - "description": "Target fiat currency code for international cross-border conversion drag (e.g. EUR, GBP, CAD).", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "w2Salary", - "contractorHourlyRate" -]New value: +[ + "w2Salary", + "contractorHourlyRate", + "eligibleQBI", + "as_of_date" +]
- Changed
fd6 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / properties / tenure_months / descriptionPrevious value: -"Deposit tenure in months."New value: +"Deposit tenure in months (3 to 120, as the fixed deposit rule pack allows)." - added
Input schema / properties / tenure_months / exampleAdded value: +12 - added
Input schema / properties / tenure_months / maximumAdded value: +120 - added
Input schema / properties / tenure_months / minimumAdded value: +3 - changed
Input schema / requiredPrevious value: -[ - "principal", - "interest_rate", - "tenure_months" -]New value: +[ + "principal", + "interest_rate", + "tenure_months", + "as_of_date" +]
- Changed
feie_nomad_tracker2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "as_of_date" +]
- Changed
fx_invoicing2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "invoiceUsd" -]New value: +[ + "invoiceUsd", + "as_of_date" +]
- Changed
gold2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "weight_grams", - "rate_per_gram_24k", - "purity_karat" -]New value: +[ + "weight_grams", + "rate_per_gram_24k", + "purity_karat", + "as_of_date" +]
- Changed
gst_composition2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "quarter_turnover", - "preceding_fy_turnover" -]New value: +[ + "quarter_turnover", + "preceding_fy_turnover", + "as_of_date" +]
- Added
gst_regular - Changed
home_loan_emi2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "principal", - "interestRatePercent" -]New value: +[ + "principal", + "interestRatePercent", + "as_of_date" +]
- Changed
indian_income_tax2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "ctc" -]New value: +[ + "ctc", + "as_of_date" +]
- Changed
land_units1 field changed- changed
Input schema / requiredPrevious value: -[ - "area", - "from_unit" -]New value: +[ + "area", + "from_unit", + "as_of_date" +]
- Changed
mortgage_piti3 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - removed
Input schema / properties / tenureYearsRemoved value: -{ - "default": 30, - "description": "Loan duration in years (typically 15, 20, or 30).", - "type": "integer" -} - changed
Input schema / requiredPrevious value: -[ - "homePrice", - "interestRate" -]New value: +[ + "homePrice", + "interestRate", + "as_of_date" +]
- Changed
ppf2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "yearly_deposit" -]New value: +[ + "yearly_deposit", + "as_of_date" +]
- Changed
scorp_optimizer2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "netProfit" -]New value: +[ + "netProfit", + "as_of_date" +]
- Changed
sip_investment2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "monthlyInvestment" -]New value: +[ + "monthlyInvestment", + "as_of_date" +]
- Changed
solo_401k_shield2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "netEarnings", - "participant_age" -]New value: +[ + "netEarnings", + "participant_age", + "as_of_date" +]
- Changed
startup_runway_dilution2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "as_of_date" +]
- Changed
sukanya2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "yearly_deposit" -]New value: +[ + "yearly_deposit", + "as_of_date" +]
- Changed
tcs5 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - removed
Input schema / properties / is_interstateRemoved value: -{ - "default": false, - "description": "True for interstate supply (IGST), false for intrastate supply (CGST + SGST).", - "type": "boolean" -} - removed
Input schema / properties / is_reverse_chargeRemoved value: -{ - "default": false, - "description": "Whether transaction is subject to Reverse Charge Mechanism (RCM).", - "type": "boolean" -} - removed
Input schema / properties / rateRemoved value: -{ - "default": 18, - "description": "Statutory GST percentage slab.", - "enum": [ - 0, - 5, - 12, - 18, - 28 - ], - "type": "number" -} - changed
Input schema / requiredPrevious value: -[ - "amount" -]New value: +[ + "amount", + "as_of_date" +]
- Changed
vat_sales_tax2 fields changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD. Selects the rule pack in force on that date. Required: the engine will not assume a date.", + "example": "2026-09-26", + "pattern": "^\\d{4}-\\d{2}-\\d{2}$", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "amount", - "vatRatePercent" -]New value: +[ + "amount", + "vatRatePercent", + "as_of_date" +]
16 tool updates
- Changed
advance_tax3 fields changed- added
Input schema / properties / assessed_tax / exampleAdded value: +"150000.00" - added
Input schema / properties / assessed_tax / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / assessed_tax / typePrevious value: -"number"New value: +"string"
- Changed
cagr_inflation15 fields changed- added
Input schema / properties / expected_annual_return_rateAdded value: +{ + "description": "Expected annual return in percent, as a decimal string. Required for PROJECTION mode.", + "example": "12.00", + "pattern": "^\\d+(\\.\\d+)?$", + "type": "string" +} - changed
Input schema / properties / finalValue / descriptionPrevious value: -"Ending portfolio, asset, or revenue valuation in currency units. Must be positive."New value: +"Ending value (HISTORICAL_CAGR), as a string with exactly 2 decimal places." - added
Input schema / properties / finalValue / exampleAdded value: +"250000.00" - added
Input schema / properties / finalValue / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / finalValue / typePrevious value: -"number"New value: +"string" - changed
Input schema / properties / initialValue / descriptionPrevious value: -"Beginning portfolio, asset, or revenue valuation in currency units. Must be positive."New value: +"Starting value, as a string with exactly 2 decimal places." - added
Input schema / properties / initialValue / exampleAdded value: +"100000.00" - added
Input schema / properties / initialValue / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / initialValue / typePrevious value: -"number"New value: +"string" - added
Input schema / properties / modeAdded value: +{ + "description": "HISTORICAL_CAGR: growth from initialValue to finalValue. PROJECTION: grow initialValue at expected_annual_return_rate.", + "enum": [ + "HISTORICAL_CAGR", + "PROJECTION" + ], + "type": "string" +} - changed
Input schema / properties / periodsYears / descriptionPrevious value: -"Total elapsed duration in years (can be fractional, e.g. 2.5 or 5). Must be greater than 0."New value: +"Period in years, from 0.0833 (1 month) to 50." - added
Input schema / properties / periodsYears / exampleAdded value: +10 - added
Input schema / properties / periodsYears / maximumAdded value: +50 - added
Input schema / properties / periodsYears / minimumAdded value: +0.0833 - changed
Input schema / requiredPrevious value: -[ - "initialValue", - "finalValue", - "periodsYears" -]New value: +[ + "initialValue", + "finalValue", + "periodsYears", + "mode" +]
- Changed
cloud_egress_finops1 field changed- added
Input schema / properties / as_of_dateAdded value: +{ + "description": "Civil date YYYY-MM-DD selecting the monthly egress price pack. Required; only months with a published pack are answered (otherwise a structured refusal).", + "example": "2026-09-26", + "format": "date", + "type": "string" +}
- Changed
compute5 fields changed- changed
Input schema / properties / engine / descriptionPrevious value: -"Target engine name (e.g. 'tds', 'tcs', 'gst_regular', 'advance_tax', 'tax_in', 'contractor_parity', 'scorp_optimizer', 'cloud_egress_finops', 'compound_wealth')."New value: +"The engine to run, by tool name (e.g. tds, fd, gst_composition)." - added
Input schema / properties / engine / exampleAdded value: +"tds" - removed
Input schema / properties / inputs / additionalPropertiesRemoved value: -true - changed
Input schema / properties / inputs / descriptionPrevious value: -"Input parameters matching the target engine's schema."New value: +"The engine's own inputs, exactly as its tool schema defines them." - added
Input schema / properties / inputs / exampleAdded value: +{ + "amount": "50000.00", + "as_of_date": "2026-04-01", + "pan_available": true, + "pan_operative": true, + "payee_type": "individual_or_huf", + "payment_type": "contractor", + "resident": true +}
- Changed
fd7 fields changed- changed
Input schema / properties / interest_rate / descriptionPrevious value: -"Annual interest rate in percent (e.g. 7.25 for 7.25%)."New value: +"Annual interest rate in percent, as a decimal string (e.g. 7.00)." - added
Input schema / properties / interest_rate / exampleAdded value: +"7.00" - added
Input schema / properties / interest_rate / patternAdded value: +"^\\d+(\\.\\d+)?$" - changed
Input schema / properties / interest_rate / typePrevious value: -"number"New value: +"string" - changed
Input schema / properties / principal / descriptionPrevious value: -"Deposit principal amount in INR (₹)."New value: +"Deposit amount in INR. At least 1,000 (statutory minimum FD principal, RBI Master Direction 2016)." - added
Input schema / properties / principal / exampleAdded value: +250000 - added
Input schema / properties / principal / minimumAdded value: +1000
- Changed
feie_nomad_tracker14 fields changed- removed
Input schema / properties / daysOutsideUSInRollingPeriod / defaultRemoved value: -334 - changed
Input schema / properties / daysOutsideUSInRollingPeriod / descriptionPrevious value: -"Number of full 24-hour qualifying foreign days spent outside the US within any rolling 365-day period. Must be >= 330 to qualify."New value: +"Full 24-hour days outside the US within any 12 consecutive months (Physical Presence Test, 26 U.S.C. 911(d)(1)(B): 330 needed). Required - never assumed." - added
Input schema / properties / daysOutsideUSInRollingPeriod / exampleAdded value: +340 - added
Input schema / properties / daysOutsideUSInRollingPeriod / maximumAdded value: +366 - added
Input schema / properties / daysOutsideUSInRollingPeriod / minimumAdded value: +0 - changed
Input schema / properties / daysOutsideUSInRollingPeriod / typePrevious value: -"number"New value: +"integer" - removed
Input schema / properties / effectiveTaxBracketPercentRemoved value: -{ - "default": 24, - "description": "Estimated federal marginal tax rate percentage applied to income exceeding the statutory cap (e.g. 24 for 24%).", - "type": "number" -} - added
Input schema / properties / filingStatusAdded value: +{ + "description": "IRS filing status: 'single' or 'mfj' (married filing jointly).", + "enum": [ + "single", + "mfj" + ], + "type": "string" +} - removed
Input schema / properties / foreignEarnedIncome / defaultRemoved value: -160000 - changed
Input schema / properties / foreignEarnedIncome / descriptionPrevious value: -"Total annual compensation earned while working outside the US in USD ($). Must be positive."New value: +"Foreign earned income for the tax year, in USD." - added
Input schema / properties / foreignEarnedIncome / exampleAdded value: +120000 - added
Input schema / properties / foreignEarnedIncome / exclusiveMinimumAdded value: +0 - added
Input schema / properties / qualifyingDaysInTaxYearAdded value: +{ + "description": "Qualifying days that fall in the tax year; the exclusion is prorated by these (26 U.S.C. 911(b)(2)(A)). Required - never assumed.", + "example": 365, + "maximum": 366, + "minimum": 0, + "type": "integer" +} - removed
Input schema / properties / taxYearRemoved value: -{ - "default": 2025, - "description": "Applicable US federal tax filing year (2024, 2025, or 2026).", - "type": "number" -}
- Changed
gold7 fields changed- removed
Input schema / properties / purity_karat / defaultRemoved value: -22 - changed
Input schema / properties / purity_karat / descriptionPrevious value: -"Purity in Karats (24K pure, 22K standard jewellery 916, 18K 750, 14K 585)."New value: +"Purity in Karats (24K pure, 22K standard jewellery 916, 18K 750, 14K 585). Required - the engine never assumes a hallmark." - changed
Input schema / properties / rate_per_gram_24k / descriptionPrevious value: -"Current market price of 24K gold per gram in INR (₹)."New value: +"Current market price of 24K gold per gram in INR (₹), as a string with exactly 2 decimal places (money is never a float)." - added
Input schema / properties / rate_per_gram_24k / exampleAdded value: +"7500.00" - added
Input schema / properties / rate_per_gram_24k / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / rate_per_gram_24k / typePrevious value: -"number"New value: +"string" - changed
Input schema / requiredPrevious value: -[ - "weight_grams", - "rate_per_gram_24k" -]New value: +[ + "weight_grams", + "rate_per_gram_24k", + "purity_karat" +]
- Changed
gst_composition5 fields changed- added
Input schema / properties / preceding_fy_turnoverAdded value: +{ + "description": "Aggregate turnover of the preceding financial year in INR, as a string with exactly 2 decimal places. Required to check the Section 10 threshold.", + "example": "12000000.00", + "pattern": "^\\d+\\.\\d{2}$", + "type": "string" +} - added
Input schema / properties / quarter_turnover / exampleAdded value: +"250000.00" - added
Input schema / properties / quarter_turnover / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / quarter_turnover / typePrevious value: -"number"New value: +"string" - changed
Input schema / requiredPrevious value: -[ - "quarter_turnover" -]New value: +[ + "quarter_turnover", + "preceding_fy_turnover" +]
- Changed
home_loan_emi7 fields changed- changed
Input schema / properties / interestRatePercent / descriptionPrevious value: -"Annual interest rate percentage (e.g. 8.5 for 8.5%). Must be positive."New value: +"Annual interest rate in percent, as a decimal string (e.g. 8.50)." - added
Input schema / properties / interestRatePercent / exampleAdded value: +"8.50" - added
Input schema / properties / interestRatePercent / patternAdded value: +"^\\d+(\\.\\d+)?$" - changed
Input schema / properties / interestRatePercent / typePrevious value: -"number"New value: +"string" - added
Input schema / properties / principal / exampleAdded value: +"5000000.00" - added
Input schema / properties / principal / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / principal / typePrevious value: -"number"New value: +"string"
- Changed
land_units8 fields changed- changed
Input schema / properties / area / descriptionPrevious value: -"Numeric area string to convert (e.g. '1.0', '3.875', '100'). Must be positive."New value: +"Area to convert, in from_unit. Must be greater than 0." - added
Input schema / properties / area / exampleAdded value: +2.5 - added
Input schema / properties / area / exclusiveMinimumAdded value: +0 - changed
Input schema / properties / area / typePrevious value: -"string"New value: +"number" - changed
Input schema / properties / from_unit / descriptionPrevious value: -"Source land area unit (e.g. 'bigha', 'acre', 'sqft', 'sqm', 'guntha', 'katha', 'marla', 'kanal', 'cent')."New value: +"Unit of area. Regional units (bigha, biswa, katha ...) need state." - added
Input schema / properties / from_unit / enumAdded value: +[ + "sqft", + "sqm", + "gaj", + "sqyd", + "acre", + "hectare", + "guntha", + "cent", + "ground", + "ankanam", + "bigha", + "bigha_pucca", + "bigha_kaccha", + "biswa", + "katha" +] - changed
Input schema / properties / to_unit / descriptionPrevious value: -"Optional specific target unit (e.g. 'sqft', 'acre', 'guntha', 'sqm', 'biswa'). If omitted, returns full standard breakdown."New value: +"Unit to convert into." - added
Input schema / properties / to_unit / enumAdded value: +[ + "sqft", + "sqm", + "gaj", + "sqyd", + "acre", + "hectare", + "guntha", + "cent", + "ground", + "ankanam" +]
- Changed
mortgage_piti7 fields changed- added
Input schema / properties / homePrice / exampleAdded value: +"400000.00" - added
Input schema / properties / homePrice / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / homePrice / typePrevious value: -"number"New value: +"string" - changed
Input schema / properties / interestRate / descriptionPrevious value: -"Annual mortgage interest rate percentage (e.g. 6.8 for 6.8%). Must be positive."New value: +"Annual interest rate in percent, as a decimal string (e.g. 6.75)." - added
Input schema / properties / interestRate / exampleAdded value: +"6.75" - added
Input schema / properties / interestRate / patternAdded value: +"^\\d+(\\.\\d+)?$" - changed
Input schema / properties / interestRate / typePrevious value: -"number"New value: +"string"
- Changed
sip_investment4 fields changed- changed
Input schema / properties / monthlyInvestment / descriptionPrevious value: -"Initial monthly investment installment amount in currency units (e.g. 5000). Must be positive."New value: +"Monthly SIP amount in INR as a string with exactly 2 decimal places." - added
Input schema / properties / monthlyInvestment / exampleAdded value: +"5000.00" - added
Input schema / properties / monthlyInvestment / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / monthlyInvestment / typePrevious value: -"number"New value: +"string"
- Changed
solo_401k_shield2 fields changed- added
Input schema / properties / participant_ageAdded value: +{ + "description": "Participant age in years. Required: it decides catch-up eligibility (IRC s.414(v), SECURE 2.0 s.109).", + "example": 45, + "maximum": 100, + "minimum": 18, + "type": "integer" +} - changed
Input schema / requiredPrevious value: -[ - "netEarnings" -]New value: +[ + "netEarnings", + "participant_age" +]
- Changed
tcs3 fields changed- added
Input schema / properties / amount / exampleAdded value: +"100000.00" - added
Input schema / properties / amount / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / amount / typePrevious value: -"number"New value: +"string"
- Changed
tds6 fields changed- added
Input schema / properties / amount / exampleAdded value: +"50000.00" - added
Input schema / properties / amount / patternAdded value: +"^\\d+\\.\\d{2}$" - changed
Input schema / properties / amount / typePrevious value: -"number"New value: +"string" - changed
Input schema / properties / pan_available / descriptionPrevious value: -"Whether the payee has furnished a valid PAN. false triggers the s.206AA higher rate of 20%."New value: +"Whether the payee has furnished a PAN. Required: without a PAN, Section 206AA applies the higher rate, so it is never assumed." - added
Input schema / properties / pan_operativeAdded value: +{ + "description": "Whether the furnished PAN is operative (linked to Aadhaar). Required when pan_available is true: an inoperative PAN is treated as no PAN under Section 206AA.", + "type": "boolean" +} - changed
Input schema / requiredPrevious value: -[ - "amount", - "as_of_date", - "payment_type", - "payee_type", - "resident" -]New value: +[ + "amount", + "as_of_date", + "payment_type", + "payee_type", + "resident", + "pan_available", + "pan_operative" +]
- Changed
vat_sales_tax4 fields changed- changed
Input schema / properties / vatRatePercent / descriptionPrevious value: -"Tax rate in percent (e.g. 20 for UK/France, 19 for Germany, 21 for Spain, 8.25 for US state/local)."New value: +"VAT or sales tax rate in percent (0-100)." - added
Input schema / properties / vatRatePercent / exampleAdded value: +20 - added
Input schema / properties / vatRatePercent / maximumAdded value: +100 - added
Input schema / properties / vatRatePercent / minimumAdded value: +0
Related MCP Connectors
44 calculators for AI agents: US tax, finance, business + an MCP engineering & security suite.
Precision math engine for AI agents. 203 exact methods. Zero hallucination.
Current source-cited 2026 US tax constants and calculators for AI agents; every answer cites IRS.
AI-callable calculators and engineering models with real formulas. No hallucinated math.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to compute US take-home pay, self-employment taxes, and capital gains taxes for the 2026 tax year using the engine from statetakehome.com.349 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables models to query real US government data (BLS, BEA, Census, IRS 2026) to calculate 2026 take-home pay across all 50 states plus DC, compare cost-of-living-adjusted salaries between 50 US metros, retrieve tax bracket ladders, and look up occupation-level salary percentiles. Exposes five read-only tools over a free, keyless remote Streamable HTTP endpoint.MIT
- AlicenseBqualityBmaintenanceEnables AI agents to perform accurate local computations including arbitrary-precision math, date handling, unit conversion, subnet calculations, encoding, hashing, and text analysis, all without network calls or API keys.27128 npmMIT

OpenAccountantsofficial
AlicenseAqualityAmaintenanceOpen-source, accountant-verified tax computation skills for AI agents. 261+ skills across 172+ jurisdictions covering income tax, VAT/GST, payroll, corporate tax, crypto, and cross-border planning. Every skill is verified section-by-section by licensed CPAs and chartered accountants. 3 tools (list_skills, get_skill, get_skill_sections) and 1 prompt (skill-review).123446AGPL 3.0
Glama MCP Gateway
Add one secure layer between your agents and this server.