Skip to main content
Glama
sarveshtalele

Personal Finance MCP

README.md
# ๐Ÿ’ฐ Personal Finance MCP

> Deterministic personal-finance toolkit exposed over the **Model Context Protocol** โ€” 77 calculators, a meta-advisor, and live market data, with a polished web UI. Grounded in established financial mathematics.

<!-- mcp-name: io.github.sarveshtalele/personal-finance -->

[![Python 3.10+](https://img.shields.io/badge/python-3.10+-3776AB?logo=python&logoColor=white)](https://python.org)
[![MCP](https://img.shields.io/badge/MCP-streamable--http-blueviolet)](https://modelcontextprotocol.io/)
[![Tests](https://img.shields.io/badge/tests-137_passing-brightgreen)](tests/)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Live on Hugging Face](https://img.shields.io/badge/demo-Hugging%20Face-yellow?logo=huggingface&logoColor=white)](https://huggingface.co/spaces/sarveshtalele/personal-finance-mcp)

**Live demo:** https://sarveshtalele-personal-finance-mcp.hf.space
**Connector URL:** `https://sarveshtalele-personal-finance-mcp.hf.space/mcp`

## Demo

[![Watch the demo](https://img.youtube.com/vi/G27KlYvo6SE/maxresdefault.jpg)](https://youtu.be/G27KlYvo6SE)

โ–ถ๏ธ **[Watch the 2-minute demo](https://youtu.be/G27KlYvo6SE)** โ€” plain-language question โ†’ chained tools โ†’ a prioritized plan.

> **Public demo note:** the hosted Space is a shared, best-effort instance (rate-limited,
> may cold-start after idle). For heavy or private use, run it locally or self-host
> (see [docs/HOW_IT_WORKS.md](docs/HOW_IT_WORKS.md)).

---

## Overview

Most finance "assistants" guess at numbers. This one doesn't. It ships **77 deterministic
calculators** โ€” same inputs, same answer, every time โ€” and lets an LLM route a plain-language
question to the right tools. Describe your situation ("I'm 30, earn โ‚น1L/month, want to retire
at 60") and the `create_financial_plan` orchestrator chains the relevant calculators into a
single prioritised plan.

It runs three ways from one codebase:

- **As an MCP server** โ€” connect it to Claude Desktop, Claude Code, Cursor, or any MCP client.
- **As a website** โ€” a Next.js UI with a live calculator, a market dashboard, and a tool catalog.
- **As a hosted connector** โ€” deployed to a Hugging Face Docker Space; one URL does all three.

### Highlights

- ๐Ÿ”ข **Deterministic** โ€” pure math, no model inference for the numbers.
- ๐Ÿค– **Story โ†’ tools** โ€” the model maps intent to tools; users never name them.
- ๐Ÿ‡ฎ๐Ÿ‡ณ **Theory-grounded** โ€” TVM, debt, PPF/SSY/NSC/EPF, bonds, derivatives, MPT, and more.
- ๐Ÿ›ฐ๏ธ **Live market data** โ€” mutual-fund NAVs (AMFI), FX (ECB), equity quotes (Yahoo) โ€” no API keys.
- ๐Ÿ”’ **Hardened** โ€” stateless, rate-limited, input-bounded APIs with security headers/CSP.

---

## Tool catalog โ€” 77 tools, 13 categories

| Category | Tools | Examples |
|----------|:----:|----------|
| Time Value of Money | 10 | future/present value, annuity, perpetuity, EAR, real return |
| Portfolio Analytics | 11 | CAPM, Sharpe, Sortino, Treynor, alpha, allocation, rebalancing |
| Financial Planning | 9 | net worth, ratios, emergency fund, retirement, education, insurance |
| Small Savings (India) | 9 | PPF, SSY, NSC, KVP, SCSS, RD, FD, EPF |
| Mutual Funds | 7 | SIP, SWP, lumpsum-vs-SIP, CAGR, NAV, expense-ratio impact |
| Debt & Loans | 6 | EMI, amortization, prepayment, consolidation, invest-vs-prepay |
| Fixed Income | 6 | bond price, YTM, current yield, duration, convexity, zero-coupon |
| Derivatives | 5 | futures fair value, option payoff, put-call parity, Black-Scholes, beta hedge |
| Equity Valuation | 5 | DDM, two-stage DDM, P/E, DCF, dividend yield |
| Live Market Data | 4 | MF search, live NAV, FX rate, stock/index quote |
| Cash Flow & Budgeting | 3 | household cash flow, debt-to-income, contingency fund |
| Risk Profiling | 1 | suitability score โ†’ suggested equity/debt split |
| Advisor | 1 | `create_financial_plan` โ€” the story โ†’ plan orchestrator |

Browse them all (with live descriptions) at [`/tools`](https://sarveshtalele-personal-finance-mcp.hf.space/tools).

---

## Quick start

### Use the hosted connector (no install)

**Claude Desktop** โ€” Settings โ†’ Connectors โ†’ Add custom connector โ†’ paste:

```
https://sarveshtalele-personal-finance-mcp.hf.space/mcp
```

**Claude Code**

```bash
claude mcp add --transport http personal-finance https://sarveshtalele-personal-finance-mcp.hf.space/mcp
```

**Cursor / VS Code** โ€” add to `mcp.json`:

```json
{
  "mcpServers": {
    "personal-finance": {
      "url": "https://sarveshtalele-personal-finance-mcp.hf.space/mcp",
      "transport": "http"
    }
  }
}
```

### Install from PyPI (stdio server)

```bash
pip install personal-finance-mcp     # or: uvx personal-finance-mcp
```

Then point Claude Desktop at it:

```json
{
  "mcpServers": {
    "personal-finance": { "command": "uvx", "args": ["personal-finance-mcp"] }
  }
}
```

### Run locally from source

```bash
git clone https://github.com/sarveshtalele/personal-finance-mcp.git
cd personal-finance-mcp
pip install -e .

# Option A โ€” classic stdio MCP server (offline, no web)
python -m src

# Option B โ€” unified server: website + /mcp connector + /api  (http://localhost:7860)
cd web && npm install && npm run build && cd ..
python -m src.web
```

For stdio, point Claude Desktop at the local process:

```json
{
  "mcpServers": {
    "personal-finance": { "command": "python", "args": ["-m", "src"] }
  }
}
```

---

## The website

`python -m src.web` serves everything on one port:

| Path | What |
|------|------|
| `/` | Next.js site โ€” home, tool catalog, live calculator, market dashboard, setup guide |
| `/mcp` | MCP server over **streamable-HTTP** โ€” the connector URL |
| `/api/*` | JSON endpoints (tool catalog, calculators, live market data) |

---

## Architecture

```
src/
โ”œโ”€โ”€ server.py            # FastMCP server โ€” registers all tool modules
โ”œโ”€โ”€ __main__.py          # `python -m src`  (stdio transport)
โ”œโ”€โ”€ tools/               # pure math fns + per-module register(mcp)
โ”‚   โ”œโ”€โ”€ tvm.py  debt.py  planning.py  bonds.py  stocks.py  mutual_funds.py
โ”‚   โ”œโ”€โ”€ portfolio.py  derivatives.py  india_savings.py  cashflow.py
โ”‚   โ”œโ”€โ”€ risk_profile.py  advisor.py   # advisor = story โ†’ plan orchestrator
โ”‚   โ””โ”€โ”€ marketdata.py    # live AMFI / Frankfurter / Yahoo (keyless)
โ”œโ”€โ”€ models/              # Pydantic schemas + enums
โ”œโ”€โ”€ utils/               # output formatters
โ””โ”€โ”€ web/                 # unified Starlette server (MCP + /api + static site)
    โ”œโ”€โ”€ server.py        # routes, security middleware, calculator registry
    โ””โ”€โ”€ __main__.py      # `python -m src.web`  (uvicorn, port 7860)

web/                     # Next.js front-end (static export โ†’ web/out)
โ””โ”€โ”€ app/                 # home, tools, calculator, dashboard, connect
```

Each tool file keeps deterministic pure functions separate from the thin `@mcp.tool`
wrappers, so the same functions power the MCP server, the web calculators, and the tests.

---

## Security

- **Stateless** โ€” no database, no sessions; every call is independent and reproducible.
- **Hardened API** โ€” per-IP rate limiting, request-body cap, and input validation that
  bounds loop-driving parameters (years/months/age) to prevent denial-of-service.
- **Security headers** โ€” CSP (with `frame-ancestors` for the Hugging Face embed),
  `X-Content-Type-Options`, `Referrer-Policy`, `Permissions-Policy`; CORS limited to
  GET/POST without credentials. The header middleware is implemented at the ASGI layer so
  it never buffers the streaming `/mcp` (SSE) responses.
- **No secrets in the app** โ€” live-data sources are public and keyless.

See [SECURITY.md](SECURITY.md) to report a vulnerability.

---

## Development

```bash
pip install -e ".[dev]"
pytest -q                       # 119 tests
ruff check .                    # lint
python -m src.web               # run the full stack locally
```

---

## Deployment

Deployed as a **Hugging Face Docker Space**, auto-synced from GitHub on every push to `main`
(see [`.github/workflows/hf-sync.yml`](.github/workflows/hf-sync.yml)). Full instructions โ€”
local, Docker, and Hugging Face โ€” are in [docs/deployment.md](docs/deployment.md).

---

## Documentation

- **[docs/HOW_IT_WORKS.md](docs/HOW_IT_WORKS.md)** โ€” concepts (MCP, transports, semantic
  routing), full architecture with diagrams, end-to-end request flows, the security
  model, **hosting it yourself / on a portfolio site**, and a production-grade roadmap.
- [docs/deployment.md](docs/deployment.md) โ€” local, Docker, and Hugging Face deployment.
- [docs/Architecture.md](docs/Architecture.md) ยท [docs/testing.md](docs/testing.md) ยท [docs/setup.md](docs/setup.md)

## Contributing

Contributions are welcome โ€” see [CONTRIBUTING.md](CONTRIBUTING.md) and the
[Code of Conduct](CODE_OF_CONDUCT.md). Good first issues: add a calculator (a pure function +
a `register` wrapper + a test), improve descriptions for better tool routing, or extend the
web UI.

---

## Disclaimer

Educational tool for illustrating standard financial formulas. **Not investment advice.** Figures
are illustrative; verify before making financial decisions.

## License

[MIT](LICENSE) โ€” free to use, modify, and distribute.

TDQS

B3.3/5.0

Scored across 77 tools

Disambiguation3/5

Many tools cover similar financial concepts (e.g., calculate_emergency_fund and calculate_contingency_fund, assess_risk_profile and suggest_asset_allocation), causing potential confusion. However, most tools have distinct descriptions that clarify their specific use case.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., calculate_future_value, plan_retirement). Verbs are descriptive and the pattern is maintained across all 77 tools.

Tool Count3/5

77 tools is high for a single MCP server, covering a vast range of personal finance calculators and metrics. While thorough, the count borders on overwhelming, and some tools are redundant (e.g., duplicate emergency fund tools).

Completeness4/5

The tool set covers an extensive range of personal finance domains: time value of money, loans, insurance, retirement, education, mutual funds, stocks, derivatives, and financial health. Minor gaps exist (e.g., tax planning), but the surface is remarkably comprehensive.

Maintenance

ActivityInactive
ResponsivenessResponsive