Personal Finance MCP
# ๐ฐ 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 -->
[](https://python.org)
[](https://modelcontextprotocol.io/)
[](tests/)
[](LICENSE)
[](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
[](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
Scored across 77 tools
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.
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.
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).
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.