Fi-Plan
Server Details
Financial simulator for Indian salaries: loans, taxes, SIPs and 50-year FIRE plans.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- ompurwar/fi-plan-mcp
- GitHub Stars
- 0
TDQS
Scored across 4 tools
Each tool targets a distinct calculation: asset projection, loan amortization, refinance simulation, and plan patching. The only potential confusion is between loan_amortization and loan_refinance, but descriptions clarify that one models the full schedule while the other is a what-if for rate/tenure changes.
Names are mostly consistent with a noun_noun or verb_noun pattern (asset_projection, loan_amortization, loan_refinance, simulate_plan). The mix of noun and verb starts is a minor deviation, but all are snake_case and readable.
Four tools is somewhat thin for a financial planning server that likely needs create/update/delete operations for plans, assets, and loans. However, each tool covers a meaningful calculation domain, so it is not severely under-scoped.
The surface is purely analytical: it lacks any CRUD operations to create or modify plans, assets, or loans. simulate_plan patches a copy but never persists changes, and there is no tool to retrieve a plan or manage stored entities, creating significant gaps for an agent that needs to manage financial plans.
Available Tools
4 toolsasset_projectionProject a single asset month-by-monthARead-onlyIdempotentInspect
Pure calculator for one asset (no plan needed): monthly value, invested, growth, income and TDS over duration months. Pass asset parameters (principal, growth_rate, yield_rate, income_frequency, income_mode, maturity_month, sale_month, sip) — class presets are NOT applied automatically, so pass explicit rates. TDS on FD interest follows the stored rules for the assessment_year. Returns rows plus closing value and totals.
| Name | Required | Description | Default |
|---|---|---|---|
| sip | No | Optional recurring SIP into the asset. | |
| rent | No | Real-estate rent settings. | |
| title | No | Display name for the asset (defaults to 'Asset'). | |
| category | No | Bucket: s = savings, e = expenses, i = investments (default 'i'). | |
| duration | No | Projection length in months (default 120). | |
| principal | Yes | Starting value/principal in rupees. | |
| sale_month | No | Month the asset is sold. | |
| yield_rate | No | Annual income/yield rate in percent (interest, dividend, rent). | |
| asset_class | No | Asset type; affects default tax treatment (default 'fd'). | |
| compounding | No | Compounding mode for growth (default none). | |
| growth_rate | Yes | Annual capital growth rate in percent. | |
| income_mode | No | Where income goes: credit (cash) or reinvest. | |
| maturity_month | No | Month the asset matures; value is released then. | |
| purchase_month | No | Month the asset is acquired (default 1). | |
| assessment_year | No | Assessment year for tax rules, e.g. '2025-26' (default: current). | |
| income_frequency | No | Income payout frequency: m monthly, q quarterly, h half-yearly, y yearly. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only/idempotent profile, so the bar is lower, and the description still adds real behavioral context: presets are not auto-applied, TDS on FD interest follows stored rules keyed to assessment_year, and the return shape is rows plus closing value and totals. It does not mention performance or limits, but for a pure calculator that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool computes and the no-plan scoping, then the caveat, then the return shape. The parenthetical parameter list is dense but each item earns its place by flagging which inputs drive the projection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter tool with nested SIP/rent objects and no output schema, the description covers the calculation model, the preset caveat, the tax rule dependency, and the return shape. Remaining gaps (defaults, interaction between maturity/sale months) are largely covered by the 100%-covered schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds genuine semantics by naming the key inputs and warning that asset_class presets do not supply rates automatically — a behavior no per-field schema description conveys. It does not clarify interactions such as maturity_month vs sale_month or income_mode vs income_frequency.
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 ('Pure calculator for one asset'), enumerates the computed outputs (monthly value, invested, growth, income, TDS), and explicitly carves out scope with 'no plan needed', which separates it from simulate_plan. An agent can distinguish it from the loan_* 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?
The phrase 'no plan needed' implicitly routes plan-based work to simulate_plan, and 'class presets are NOT applied automatically, so pass explicit rates' is an actionable prerequisite that prevents a common misuse. It stops short of naming the sibling alternatives explicitly or stating when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loan_amortizationCompute a loan amortization scheduleARead-onlyIdempotentInspect
Pure calculation of EMI and a month-by-month amortization schedule for a loan of amount at annual interest_rate over tenure months. Returns opening/closing balance, interest, principal and running totals per month. Pass optional prepayments to model extra principal payments beyond the EMI (each {start_month, amount, frequency: 'm'|'q'|'y'|null, step_pct?} — null frequency = one-time lump, step_pct = % the amount grows by each recurrence): the EMI stays constant, the loan shortens, and the result becomes { schedule, payoff_month, total_interest_paid, total_prepaid, interest_saved } instead of a plain array. NOTE: here start_month is loan-relative (1 = the loan's first EMI month); on a persisted loan the same fields are plan-absolute months.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Loan principal in rupees (e.g. 1500000 for ₹15,00,000). | |
| tenure | Yes | Loan tenure in months (e.g. 240 for 20 years). | |
| prepayments | No | Optional extra principal payments beyond the EMI: the EMI stays constant and the loan shortens. | |
| interest_rate | Yes | Annual interest rate in percent (e.g. 8.6). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so safety and idempotency are covered. The description goes further, adding valuable behavioral disclosure: the EMI stays constant, the loan shortens, and the return shape switches to { schedule, payoff_month, total_interest_paid, total_prepaid, interest_saved } when prepayments are supplied. It also warns that start_month is loan-relative here versus plan-absolute on persisted loans, which prevents a real off-by-basis error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and return behavior are front-loaded, which is good, but the prepayment parenthetical crams ambiguity resolution for frequency, start_month, and step_pct into one long sentence. The comment about loan-relative vs plan-absolute months is useful but reads as a footnote bolted onto the end, making the paragraph denser than it needs to be.
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?
There is no output schema, so the description must explain return values, and it does: a plain array normally, or a richer object with payoff_month, total_interest_paid, total_prepaid, and interest_saved when prepayments are given. It also discloses the loan-relative month basis. What is missing is any statement about required inputs or error behavior, but for a pure deterministic calculator with no annotations gap, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every field, including start_month, frequency, and step_pct. The description re-explains the prepayment shape and clarifies that null frequency means a one-time lump and step_pct is a growth percentage per recurrence, which adds meaning beyond the schema but does not add much that the schema lacks. Baseline 3 applies when the schema carries the load.
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 ('Pure calculation of EMI and a month-by-month amortization schedule for a loan') and distinguishes itself from the siblings, which are projections, refinancing, and plan simulation rather than a deterministic EMI calculation. An agent can classify this as a pure calculation vs a stateful planning operation 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?
Implies usage via 'Pure calculation' and the contrast with persisted loans, but it never states when to choose this tool over siblings such as loan_refinance or simulate_plan, nor when prepayment modeling should be used instead of the plain schedule. Adequate context with a clear gap in call routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loan_refinanceAnalyze refinancing a loan at a new rateARead-onlyIdempotentInspect
Pure what-if: closes the loan at refinance_month (outstanding balance settled) and restarts it at new_rate over new_tenure months. Returns outstanding balance, old vs new EMI, remaining interest vs new total interest, interest_saved, net_savings (after optional foreclosure_charge) and breakeven_months (null when the new EMI is not lower). Read-only — to persist, update the old loan's end_month and add the new loan.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Outstanding loan principal at refinance_month, in rupees. | |
| tenure | Yes | Total tenure of the existing loan in months. | |
| new_rate | Yes | Annual interest rate of the new loan in percent. | |
| new_tenure | Yes | Tenure of the new loan in months. | |
| interest_rate | Yes | Current annual interest rate in percent. | |
| refinance_month | Yes | Loan-relative month the refinance happens (outstanding balance is settled). | |
| foreclosure_charge | No | Foreclosure/prepayment penalty in rupees (default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint, idempotentHint), and the description reinforces it ('Read-only') while adding genuine behavioral context: the existing loan is closed/settled at refinance_month, foreclosure_charge is optional, and breakeven_months is null when the new EMI is not lower. These are non-obvious semantics not derivable from annotations, though it does not discuss precision or rounding.
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 with the simulation model front-loaded and the output list and read-only caveat following; every clause carries information. Slightly packed, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned fields (outstanding balance, old vs new EMI, interest_saved, net_savings, breakeven_months) including the null edge case, plus the persistence path and read-only nature. An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds interpretive meaning on top: refinance_month settles the outstanding balance, and foreclosure_charge is optional in the net_savings computation. It does not clarify how amount relates to the amortization schedule at refinance_month, so it stays just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource framing ('Pure what-if: closes the loan at refinance_month ... and restarts it at new_rate') and distinguishes itself from siblings like loan_amortization and simulate_plan by being an analytical refinance simulation with no persistence. An agent can tell exactly what this computes 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 explicitly states the read-only condition and the alternative path when mutation is wanted ('to persist, update the old loan's end_month and add the new loan'), which is clear when-to-use guidance. It does not name a sibling tool as the alternative, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_planRun a what-if scenario on a planARead-onlyIdempotentInspect
Applies an ordered list of scenario patches to a DEEP COPY of the plan (never persisted) and returns the resulting snapshot plus applied_patches. Pass plan_id to load the plan server-side (preferred — never paste plan_json); plan_json is accepted for portability. Pass summary=true for the compact view; add milestones=true for long durations to get yearly points + totals instead of every month. Patches support add_income, add_expense, add_cashflow_change, add_loan, update_loan (loan_id plus any of title, principal_amount, interest_rate, start_month, end_month, deposit_to_bank, type, ref_id, prepayments), add_fdp (fdp: { start_month, end_month, s, e, i } with s + e + i = 100 — or the legacy { amount, interest_rate, tenure } fixed-deposit shape) and set_account_balance — nested ({"op":"add_cashflow_change","change":{...}}) and flat ({cashflow_id,value,start_month,...}) forms are both accepted; the op is inferred from the fields.
| Name | Required | Description | Default |
|---|---|---|---|
| patches | No | Ordered scenario patches (add_income, add_expense, add_cashflow_change, add_loan, update_loan, add_fdp, set_account_balance). | |
| plan_id | No | Load a saved plan by id (authenticated tier only). | |
| summary | No | Return the compact summary (monthly totals + balances) instead of the full snapshot. | |
| duration | No | Projection length in months (public tier caps this). | |
| plan_json | No | Inline plan object for anonymous use; bounded to 256 KB. | |
| milestones | No | With summary, return yearly points and totals instead of every month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe, idempotent, non-destructive read, and the description adds meaningful context beyond them: the plan is a DEEP COPY that is never persisted, plan_id is an authenticated-tier feature, duration is capped on the public tier, and the response shape varies with summary/milestones. These are real behavioral traits, not restatements of the hints.
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?
It is front-loaded with purpose first, then loading strategy, then output-shaping flags, then the patch catalogue. Dense but nearly every clause carries operational information; the patch enumeration is long though justified given the generic patch schema, and could be slightly tightened.
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 no output schema and a generic nested patch object, the description does the necessary work of describing the return value (snapshot vs summary vs yearly milestones) and the patch grammar. Gaps remain around partial-failure/validation behavior and patch ordering side effects, but nothing critical to invoking 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%, yet the description still adds substantial meaning the schema cannot: it enumerates the supported patch operations, documents update_loan's accepted fields, specifies the add_fdp constraint s + e + i = 100 plus the legacy fixed-deposit shape, and explains that nested and flat patch forms are both accepted with the op inferred from fields.
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 precise verb+resource+mechanism: it applies an ordered list of scenario patches to a deep copy of a plan and returns the resulting snapshot plus applied_patches. This scope is unambiguous and clearly separable from siblings like loan_amortization or loan_refinance, which compute rather than simulate patched scenarios.
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 conditional parameter guidance (plan_id preferred over plan_json; summary=true for compact output; milestones=true for long durations) but never states when to choose this tool over the sibling projection/amortization tools. Usage is implied by the purpose rather than explicitly contrasted with alternatives.
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.
4 tool updates
- Changed
asset_projection24 fields changed- added
Input schema / properties / assessment_year / descriptionAdded value: +"Assessment year for tax rules, e.g. '2025-26' (default: current)." - added
Input schema / properties / asset_class / descriptionAdded value: +"Asset type; affects default tax treatment (default 'fd')." - added
Input schema / properties / category / descriptionAdded value: +"Bucket: s = savings, e = expenses, i = investments (default 'i')." - added
Input schema / properties / compounding / descriptionAdded value: +"Compounding mode for growth (default none)." - added
Input schema / properties / duration / descriptionAdded value: +"Projection length in months (default 120)." - added
Input schema / properties / growth_rate / descriptionAdded value: +"Annual capital growth rate in percent." - added
Input schema / properties / income_frequency / descriptionAdded value: +"Income payout frequency: m monthly, q quarterly, h half-yearly, y yearly." - added
Input schema / properties / income_mode / descriptionAdded value: +"Where income goes: credit (cash) or reinvest." - added
Input schema / properties / maturity_month / descriptionAdded value: +"Month the asset matures; value is released then." - added
Input schema / properties / principal / descriptionAdded value: +"Starting value/principal in rupees." - added
Input schema / properties / purchase_month / descriptionAdded value: +"Month the asset is acquired (default 1)." - added
Input schema / properties / rent / descriptionAdded value: +"Real-estate rent settings." - added
Input schema / properties / rent / properties / expense_ratio / descriptionAdded value: +"Share of rent consumed by expenses, percent." - added
Input schema / properties / rent / properties / monthly_rent / descriptionAdded value: +"Monthly rent in rupees." - added
Input schema / properties / rent / properties / step_pct / descriptionAdded value: +"Annual rent escalation percent." - added
Input schema / properties / sale_month / descriptionAdded value: +"Month the asset is sold." - added
Input schema / properties / sip / descriptionAdded value: +"Optional recurring SIP into the asset." - added
Input schema / properties / sip / properties / amount / descriptionAdded value: +"Instalment amount in rupees." - added
Input schema / properties / sip / properties / end_month / descriptionAdded value: +"Last instalment month." - added
Input schema / properties / sip / properties / frequency / descriptionAdded value: +"Instalment frequency." - added
Input schema / properties / sip / properties / start_month / descriptionAdded value: +"First instalment month." - added
Input schema / properties / sip / properties / step_pct / descriptionAdded value: +"Percent each instalment steps up by." - added
Input schema / properties / title / descriptionAdded value: +"Display name for the asset (defaults to 'Asset')." - added
Input schema / properties / yield_rate / descriptionAdded value: +"Annual income/yield rate in percent (interest, dividend, rent)."
- Changed
loan_amortization10 fields changed- added
Input schema / properties / amount / descriptionAdded value: +"Loan principal in rupees (e.g. 1500000 for ₹15,00,000)." - added
Input schema / properties / interest_rate / descriptionAdded value: +"Annual interest rate in percent (e.g. 8.6)." - added
Input schema / properties / prepayments / descriptionAdded value: +"Optional extra principal payments beyond the EMI: the EMI stays constant and the loan shortens." - added
Input schema / properties / prepayments / items / properties / amount / descriptionAdded value: +"Prepayment amount in rupees." - added
Input schema / properties / prepayments / items / properties / desc / descriptionAdded value: +"Optional label for the prepayment." - added
Input schema / properties / prepayments / items / properties / frequency / descriptionAdded value: +"Recurrence: m = monthly, q = quarterly, y = yearly; null = one-time lump." - added
Input schema / properties / prepayments / items / properties / start_month / descriptionAdded value: +"Loan-relative month of this payment (1 = the loan's first EMI month)." - added
Input schema / properties / prepayments / items / properties / step_frequency / descriptionAdded value: +"How often step_pct applies (defaults to frequency)." - added
Input schema / properties / prepayments / items / properties / step_pct / descriptionAdded value: +"Percent the prepayment amount grows by each recurrence (step-up)." - added
Input schema / properties / tenure / descriptionAdded value: +"Loan tenure in months (e.g. 240 for 20 years)."
- Changed
loan_refinance7 fields changed- added
Input schema / properties / amount / descriptionAdded value: +"Outstanding loan principal at refinance_month, in rupees." - added
Input schema / properties / foreclosure_charge / descriptionAdded value: +"Foreclosure/prepayment penalty in rupees (default 0)." - added
Input schema / properties / interest_rate / descriptionAdded value: +"Current annual interest rate in percent." - added
Input schema / properties / new_rate / descriptionAdded value: +"Annual interest rate of the new loan in percent." - added
Input schema / properties / new_tenure / descriptionAdded value: +"Tenure of the new loan in months." - added
Input schema / properties / refinance_month / descriptionAdded value: +"Loan-relative month the refinance happens (outstanding balance is settled)." - added
Input schema / properties / tenure / descriptionAdded value: +"Total tenure of the existing loan in months."
- Changed
simulate_plan6 fields changed- added
Input schema / properties / duration / descriptionAdded value: +"Projection length in months (public tier caps this)." - added
Input schema / properties / milestones / descriptionAdded value: +"With summary, return yearly points and totals instead of every month." - added
Input schema / properties / patches / descriptionAdded value: +"Ordered scenario patches (add_income, add_expense, add_cashflow_change, add_loan, update_loan, add_fdp, set_account_balance)." - added
Input schema / properties / plan_id / descriptionAdded value: +"Load a saved plan by id (authenticated tier only)." - added
Input schema / properties / plan_json / descriptionAdded value: +"Inline plan object for anonymous use; bounded to 256 KB." - added
Input schema / properties / summary / descriptionAdded value: +"Return the compact summary (monthly totals + balances) instead of the full snapshot."
4 tool updates
- First observed
asset_projection - First observed
loan_amortization - First observed
loan_refinance - First observed
simulate_plan
Related MCP Connectors
FIRE & retirement calculators + a multi-currency portfolio rebalancer (exact buy/sell trades).
India's financial MCP — cards, loans, FDs, insurance, MFs; EMI/SIP/tax calcs; NAV lookup; RAG.
90+ pure finance calculators: loans, investing, bonds, options, tax. Stateless, stores nothing.
Deterministic US financial planning: retirement Monte Carlo, Roth conversion, RMD, tax, IRMAA, SS
Related MCP Servers
- AlicenseAqualityBmaintenanceLocal-first MCP server for Indian income tax computation, enabling users to compute taxes, compare regimes, plan advance tax, and parse Form 26AS without sending data to the cloud.1298MIT

cinderfi-mcpofficial
FlicenseNot gradedqualityCmaintenanceTax-aware retirement planning for Canada and the US. CPP/OAS and Social Security timing, RRSP/TFSA/401k/IRA projections, Monte Carlo simulation, withdrawal order optimization, and historical backtesting against 150 years of market data.2-- AlicenseBqualityAmaintenance39 tax tools for US individual taxpayers — federal/state tax calculations, credits, deductions, retirement strategies, audit risk, and tax planning. All calculations run locally, no data leaves the machine. Supports TY2024 and TY2025 (One Big Beautiful Bill Act).4453712MIT
- AlicenseNot gradedqualityBmaintenanceA simulation engine for retirement planning, accessible via an MCP server that allows AI agents to create financial plans, manage income, expenses, loans, taxes, and portfolios, and run Monte Carlo simulations.MIT