Skip to main content
Glama
GVR2007

Artha

by GVR2007
README.md
# Artha โ€” Personal Finance & Tax Copilot ๐Ÿช™

> **Your money, planned on live data โ€” not guesses.**
> An MCP server (NitroStack TypeScript SDK) that turns any MCP host โ€” Claude, ChatGPT,
> NitroChat, NitroStudio โ€” into a finance & tax copilot for Indian taxpayers.

![NitroStack](https://img.shields.io/badge/built%20with-NitroStack-2563eb)
![MCP](https://img.shields.io/badge/MCP-16%20tools%20ยท%208%20resources%20ยท%203%20prompts-10b981)
![Data](https://img.shields.io/badge/data-live%20%26%20keyless-f59e0b)
![Tests](https://img.shields.io/badge/tests-node%20--test%20passing-16a34a)

*Artha (เค…เคฐเฅเคฅ) โ€” the Sanskrit word for wealth & prosperity.*

---

## The problem
Indians routinely **overpay tax** (wrong regime, wasted deduction caps) and can't see the **real
return** on their investments โ€” because the tools are either paywalled advisory products or demo
apps running on **mocked numbers**. A straight, trustworthy answer to *"what's my tax, what are my
real returns, and should I invest or prepay my loan?"* is genuinely hard to get.

## What it is
Ask in plain English โ€” *"I earn โ‚น30L, have an HDFC fund and a home loan โ€” plan my taxes and should
I invest or prepay?"* โ€” and Artha orchestrates **16 tools over live, keyless, non-mocked data**:
real mutual-fund NAVs & XIRR from AMFI, real bank verification from Razorpay, and the actual
**Finance Act 2025** tax law โ€” returning one coherent, cited answer.

## Why it stands out
- **๐Ÿ”ด Real data, provably.** Two genuinely live keyless sources (AMFI NAV via MFAPI.in, Razorpay
  IFSC) + a `get_data_freshness` tool that timestamps every source on screen. Most demos mock this;
  Artha doesn't.
- **โš–๏ธ A deterministic advisory council.** *"Invest or prepay?"* is answered by three pure-logic
  lenses (tax / growth / safety) reconciled by a weighted vote โ€” the multi-agent debate UX with
  **zero extra LLM calls and zero hallucinated numbers** (same input โ†’ byte-identical output, proven
  by tests).
- **๐Ÿงฉ All three MCP primitives, done right** โ€” 16 tools ยท 8 resources (incl. a *live* market
  snapshot) ยท 3 prompts โ€” plus rate-limiting, input hardening, a global exception filter, and a
  `node --test` suite.

---

## Architecture

```
src/
โ”œโ”€โ”€ index.ts                 # bootstrap + process-level crash guards
โ”œโ”€โ”€ app.module.ts            # @McpApp root โ€” imports every module
โ”œโ”€โ”€ common/                  # framework-agnostic utilities
โ”‚   โ”œโ”€โ”€ http.ts              #   keyless fetch (timeout, typed errors)
โ”‚   โ”œโ”€โ”€ xirr.ts              #   XIRR (Newtonโ€“Raphson + bisection) & CAGR
โ”‚   โ”œโ”€โ”€ validate.ts          #   input coercion (numbers, enums, dates)
โ”‚   โ”œโ”€โ”€ format.ts            #   โ‚น / % formatting
โ”‚   โ”œโ”€โ”€ disclaimer.ts        #   advice disclaimer
โ”‚   โ”œโ”€โ”€ exception.filter.ts  #   global @ExceptionFilter
โ”‚   โ””โ”€โ”€ apikey.guard.ts      #   optional env-gated @Guard
โ”œโ”€โ”€ data/                    # provided market-news dataset (CSV)
โ””โ”€โ”€ modules/
    โ”œโ”€โ”€ tax/         # old vs new regime + deduction optimizer (Finance Act 2025)
    โ”œโ”€โ”€ funds/       # NAV / returns / XIRR + live scheme universe   (api.mfapi.in)
    โ”œโ”€โ”€ bank/        # IFSC / branch verification                    (ifsc.razorpay.com)
    โ”œโ”€โ”€ compliance/  # statutory tax due-date calendar
    โ”œโ”€โ”€ gains/       # capital-gains estimator (equity vs debt rules)
    โ”œโ”€โ”€ rates/       # RBI/FD benchmarks ยท EMI-vs-invest ยท data freshness
    โ”œโ”€โ”€ news/        # market news & sentiment (dataset-backed)
    โ”œโ”€โ”€ council/     # โš–๏ธ deterministic advisory council
    โ”œโ”€โ”€ resources/   # ๐Ÿ“š read-only @Resource endpoints
    โ””โ”€โ”€ copilot/     # ๐Ÿง  orchestrator (plan_my_finances) + prompts
```

Each domain module follows the NitroStack pattern: `*.data.ts` โ†’ `*.service.ts` (`@Injectable`) โ†’
`*.tools.ts` (`@Tool` controller) โ†’ `*.module.ts` (wiring, `exports` its service).

---

## MCP surface

### ๐Ÿ”ง Tools (16)
| Tool | What it does | Live source |
|------|--------------|-------------|
| `calculate_income_tax` | Old vs new regime, 87A rebate, surcharge, cess; recommends cheaper | Finance Act 2025 |
| `optimize_deductions` | Flags 80C over-cap waste & unused 80D/NPS/24(b) headroom | โ€” |
| `search_mutual_funds` | Find AMFI scheme codes (curated + relevance-ranked) | api.mfapi.in |
| `get_fund_nav` | Latest NAV for a scheme | api.mfapi.in |
| `calculate_fund_returns` | Real absolute return + **CAGR + XIRR** | api.mfapi.in |
| `verify_bank_ifsc` | Bank/branch/address + NEFT/RTGS/IMPS/UPI | ifsc.razorpay.com |
| `get_upcoming_deadlines` | Next statutory dates + days remaining | โ€” |
| `get_compliance_calendar` | Full calendar, filterable | โ€” |
| `estimate_capital_gains` | LTCG/STCG (equity) or slab (debt) tax before selling | api.mfapi.in |
| `get_benchmark_rates` | RBI repo + representative FD rates | RBI (dated) |
| `compare_emi_vs_investment` | Prepay-loan vs invest, projected over a horizon | โ€” |
| `get_data_freshness` | Timestamps every data source (live AMFI ping) | api.mfapi.in |
| `get_market_news` | Filter market news/events by sector/sentiment/date | dataset |
| `get_market_sentiment` | Aggregate sentiment/impact summary | dataset |
| **`convene_council`** | **Deterministic advisory council โ†’ weighted recommendation** | โ€” |
| **`plan_my_finances`** | **Orchestrates the whole plan** (MCP Task, streams progress) | all of the above |

### ๐Ÿ“š Resources (8)
`finance://tax/slabs/2025-26` ยท `finance://compliance/calendar` ยท `finance://funds/popular` *(live)* ยท
`finance://market/snapshot` *(live Nifty-50 NAVs)* ยท `finance://market/events` ยท `finance://data-sources` ยท
`finance://methodology` ยท `finance://security`

### ๐Ÿ’ฌ Prompts (3)
`finance_copilot` ยท `tax_optimization` ยท `invest_or_prepay`

---

## The agentic demo flow
> *"I'm 40, โ‚น30L salary, โ‚น3L in 80C, HDFC Top 100 fund, home loan at 9% with โ‚น2L spare โ€” plan everything."*

`plan_my_finances` runs the workflow (streaming progress when called as a task):
**๐Ÿงฎ tax โ†’ ๐Ÿ“ˆ live fund returns โ†’ ๐Ÿงพ deduction audit โ†’ โš–๏ธ invest-vs-prepay โ†’ ๐Ÿ“… deadlines โ†’ ๐Ÿง  one plan.**
Every number is derived from a tool call โ€” nothing is fabricated. For the invest-vs-prepay call it
convenes the deterministic council (three lenses that can genuinely disagree, then reconcile).

*Verified example:* โ‚น18L with โ‚น2L ELSS โ†’ old **โ‚น2,96,400** vs new **โ‚น1,50,800** โ†’ **new saves โ‚น1,45,600**
(80C auto-capped at โ‚น1.5L); XIRR/CAGR from live NAV history; council reproducible (byte-identical).

---

## Quick start
```bash
npm install          # backend deps
npm run widget install   # widget (Next.js) deps
npm run dev          # start the MCP server (stdio + http)
```
No API keys required โ€” both external APIs are free and public. Then connect **NitroStudio**, or embed
the **NitroChat** widget on any page.

```bash
npm test             # build + node --test suite
```

## Deployment (NitroStack Cloud)
Deploy the repo, then in the project **Environment variables** set:
```
NITROSTACK_APP_MODE=universal
```
Optional: `RBI_REPO_RATE`, `RATES_ASOF`, `API_KEY` (enables the auth guard). The market-news dataset
in `src/data/` ships automatically.

## Security
Surfaced at runtime via the `finance://security` resource:
- **Auth** โ€” optional API-key `Guard` (off unless `API_KEY` is set; keyless demo).
- **Input validation** โ€” Zod + defensive coercion (numbers, enums, dates) in every service.
- **Rate limiting** โ€” `@RateLimit(30/min)` on all outbound-API tools and orchestrators.
- **Error handling** โ€” global `ExceptionFilter` + process-level guards; no stack traces leak.
- **Privacy** โ€” no PII persisted, nothing written to disk, HTTPS + timeouts, no secrets.

## Data & freshness
| Source | Kind | Use |
|--------|------|-----|
| AMFI / MFAPI.in | ๐ŸŸข live (per request) | NAV, history, XIRR, scheme master |
| Razorpay IFSC | ๐ŸŸข live (per request) | Bank / branch verification |
| RBI repo / FD | ๐ŸŸก reference (dated, env-overridable) | Benchmark "safe" rates |

Run `get_data_freshness` to see the live NAV date + fetch timestamp on screen.

## Disclaimer
Informational & educational only โ€” **not** investment, tax, or financial advice. Figures are
estimates; verify with a **SEBI-registered adviser** or a qualified **CA** before acting. Tax slabs
are FY 2025-26 per the **Finance Act 2025** (incometax.gov.in).

## Links
- NitroStack docs: <https://docs.nitrostack.ai>
- Demo script: [DEMO.md](DEMO.md) ยท Community posts: [COMMUNITY.md](COMMUNITY.md)

_Built for the NitroStack ร— Amrita University Coimbatore MCP Hackathon._

TDQS

A4.1/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but compare_emi_vs_investment and convene_council both address the same 'invest or prepay' decision from different angles, which could cause misselection. Additionally, get_upcoming_deadlines and get_compliance_calendar overlap somewhat, though the descriptions distinguish them.

Naming Consistency5/5

All 16 tools follow a consistent snake_case verb_noun pattern (e.g., search_mutual_funds, calculate_income_tax, verify_bank_ifsc, plan_my_finances). The verbs are diverse but clearly map to actions, and no mixed conventions like camelCase are present.

Tool Count4/5

At 16 tools, the count is slightly above the typical 3-15 range, but the broad scope of Indian personal finance, mutual funds, tax, compliance, and planning justifies each tool. It feels on the heavier side but remains well-scoped and manageable.

Completeness5/5

The tool set provides comprehensive coverage of the domain: mutual fund search, NAV, returns, capital gains estimation, tax calculation and optimization, deadlines, compliance calendar, market news/sentiment, and a full financial planner. No significant gaps are apparent for the stated purpose.

Maintenance

ActivityStale
ResponsivenessNo issues