Servidor MCP

Fi-Plan

io.github.ompurwar/fi-plan
Finanzas e inversión Público y accesible MCP 2025-11-25

Qué hace este MCP

Simulates Indian financial scenarios including asset growth, loans, refinancing, taxes, SIPs, and long-term financial plans.

asset_projection
Project a single asset month-by-month
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['principal', 'growth_rate'], 'properties': {'sip': {'type': 'object', 'required': ['amount', 'frequency', 'start_month'], 'properties': {'amount': {'type': 'number', 'description': 'Instalment amount in rupees.', 'exclusiveMinimum': 0}, 'step_pct': {'type': 'number', 'minimum': 0, 'description': 'Percent each instalment steps up by.'}, 'end_month': {'type': 'integer', 'minimum': 1, 'description': 'Last instalment month.'}, 'frequency': {'enum': ['m', 'q', 'y'], 'type': 'string', 'description': 'Instalment frequency.'}, 'start_month': {'type': 'integer', 'minimum': 1, 'description': 'First instalment month.'}}, 'description': 'Optional recurring SIP into the asset.', 'additionalProperties': False}, 'rent': {'type': 'object', 'required': ['monthly_rent'], 'properties': {'step_pct': {'type': 'number', 'minimum': 0, 'description': 'Annual rent escalation percent.'}, 'monthly_rent': {'type': 'number', 'description': 'Monthly rent in rupees.', 'exclusiveMinimum': 0}, 'expense_ratio': {'type': 'number', 'maximum': 100, 'minimum': 0, 'description': 'Share of rent consumed by expenses, percent.'}}, 'description': 'Real-estate rent settings.', 'additionalProperties': False}, 'title': {'type': 'string', 'description': "Display name for the asset (defaults to 'Asset')."}, 'category': {'enum': ['s', 'e', 'i'], 'type': 'string', 'description': "Bucket: s = savings, e = expenses, i = investments (default 'i')."}, 'duration': {'type': 'integer', 'minimum': 1, 'description': 'Projection length in months (default 120).'}, 'principal': {'type': 'number', 'minimum': 0, 'description': 'Starting value/principal in rupees.'}, 'sale_month': {'type': 'integer', 'minimum': 1, 'description': 'Month the asset is sold.'}, 'yield_rate': {'type': 'number', 'minimum': 0, 'description': 'Annual income/yield rate in percent (interest, dividend, rent).'}, 'asset_class': {'enum': ['fd', 'bond', 'savings', 'gold', 'ppf', 'equity', 'equity_foreign', 'mf', 'real_estate', 'vda'], 'type': 'string', 'description': "Asset type; affects default tax treatment (default 'fd')."}, 'compounding': {'enum': ['none', 'simple', 'monthly', 'quarterly', 'yearly'], 'type': 'string', 'description': 'Compounding mode for growth (default none).'}, 'growth_rate': {'type': 'number', 'minimum': 0, 'description': 'Annual capital growth rate in percent.'}, 'income_mode': {'enum': ['credit', 'reinvest'], 'type': 'string', 'description': 'Where income goes: credit (cash) or reinvest.'}, 'maturity_month': {'type': 'integer', 'minimum': 1, 'description': 'Month the asset matures; value is released then.'}, 'purchase_month': {'type': 'integer', 'minimum': 1, 'description': 'Month the asset is acquired (default 1).'}, 'assessment_year': {'type': 'string', 'description': "Assessment year for tax rules, e.g. '2025-26' (default: current)."}, 'income_frequency': {'enum': ['m', 'q', 'h', 'y'], 'type': 'string', 'description': 'Income payout frequency: m monthly, q quarterly, h half-yearly, y yearly.'}}, 'additionalProperties': False}
loan_amortization
Compute a loan amortization schedule
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'interest_rate', 'tenure'], 'properties': {'amount': {'type': 'number', 'description': 'Loan principal in rupees (e.g. 1500000 for ₹15,00,000).'}, 'tenure': {'type': 'number', 'description': 'Loan tenure in months (e.g. 240 for 20 years).'}, 'prepayments': {'type': 'array', 'items': {'type': 'object', 'required': ['start_month', 'amount'], 'properties': {'desc': {'type': 'string', 'description': 'Optional label for the prepayment.'}, 'amount': {'type': 'number', 'description': 'Prepayment amount in rupees.', 'exclusiveMinimum': 0}, 'step_pct': {'type': 'number', 'minimum': 0, 'description': 'Percent the prepayment amount grows by each recurrence (step-up).'}, 'frequency': {'anyOf': [{'enum': ['m', 'q', 'y'], 'type': 'string'}, {'type': 'null'}], 'description': 'Recurrence: m = monthly, q = quarterly, y = yearly; null = one-time lump.'}, 'start_month': {'type': 'integer', 'minimum': 1, 'description': "Loan-relative month of this payment (1 = the loan's first EMI month)."}, 'step_frequency': {'anyOf': [{'enum': ['m', 'q', 'y'], 'type': 'string'}, {'type': 'null'}], 'description': 'How often step_pct applies (defaults to frequency).'}}, 'additionalProperties': False}, 'description': 'Optional extra principal payments beyond the EMI: the EMI stays constant and the loan shortens.'}, 'interest_rate': {'type': 'number', 'description': 'Annual interest rate in percent (e.g. 8.6).'}}, 'additionalProperties': False}
loan_refinance
Analyze refinancing a loan at a new rate
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'interest_rate', 'tenure', 'refinance_month', 'new_rate', 'new_tenure'], 'properties': {'amount': {'type': 'number', 'description': 'Outstanding loan principal at refinance_month, in rupees.', 'exclusiveMinimum': 0}, 'tenure': {'type': 'integer', 'minimum': 1, 'description': 'Total tenure of the existing loan in months.'}, 'new_rate': {'type': 'number', 'minimum': 0, 'description': 'Annual interest rate of the new loan in percent.'}, 'new_tenure': {'type': 'integer', 'minimum': 1, 'description': 'Tenure of the new loan in months.'}, 'interest_rate': {'type': 'number', 'minimum': 0, 'description': 'Current annual interest rate in percent.'}, 'refinance_month': {'type': 'integer', 'minimum': 1, 'description': 'Loan-relative month the refinance happens (outstanding balance is settled).'}, 'foreclosure_charge': {'type': 'number', 'minimum': 0, 'description': 'Foreclosure/prepayment penalty in rupees (default 0).'}}, 'additionalProperties': False}
simulate_plan
Run a what-if scenario on a plan
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.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'patches': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'description': 'Ordered scenario patches (add_income, add_expense, add_cashflow_change, add_loan, update_loan, add_fdp, set_account_balance).'}, 'plan_id': {'type': 'string', 'description': 'Load a saved plan by id (authenticated tier only).'}, 'summary': {'type': 'boolean', 'description': 'Return the compact summary (monthly totals + balances) instead of the full snapshot.'}, 'duration': {'type': 'number', 'description': 'Projection length in months (public tier caps this).'}, 'plan_json': {'type': 'object', 'description': 'Inline plan object for anonymous use; bounded to 256 KB.', 'additionalProperties': {}}, 'milestones': {'type': 'boolean', 'description': 'With summary, return yearly points and totals instead of every month.'}}, 'additionalProperties': False}
Añadido
asset_projection
17 de September de 2026 a las 12:45
Añadido
loan_refinance
17 de September de 2026 a las 12:45
Añadido
loan_amortization
17 de September de 2026 a las 12:45
Añadido
simulate_plan
17 de September de 2026 a las 12:45