Finance MCP Server
Finance MCP Server
A Model Context Protocol server exposing personal-finance tools — accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals — so any MCP client (Claude Desktop, Claude Code, custom agents) can query financial data through a standard interface.
The tool layer is shared with finance-copilot: same deterministic sample dataset, same eight tools, different transport — there they're wired into a bespoke agentic loop; here they're served over MCP.
Tools
Tool | Purpose |
| Balances across checking/savings/credit/brokerage/401(k) + net worth |
| Individual transactions, filterable by month and category |
| Per-category monthly totals, trends, top merchants |
| Budget vs. actual for the current month with over/under status |
| Recurring bills with next due dates and due-soon flags |
| Create a reminder N days before a bill is due |
| Holdings, gains/losses, asset allocation |
| Savings goals with progress + income/risk profile |
Setup
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python test_client.py # smoke test: lists tools, calls threeIf
piptries to compilecryptographyfrom source (Anaconda x86_64 Python without a matching wheel), create the venv withpython3 -m venv .venv --system-site-packagesto reuse the system copy.
Connect a client
Claude Code:
claude mcp add finance -- /path/to/finance-mcp-server/.venv/bin/python /path/to/finance-mcp-server/server.pyClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"finance": {
"command": "/path/to/finance-mcp-server/.venv/bin/python",
"args": ["/path/to/finance-mcp-server/server.py"]
}
}
}Then ask: "How am I tracking against my budget this month?" — the client discovers the tools automatically and the model calls them as needed.
Design notes
FastMCP generates tool schemas from Python type hints and docstrings — the schemas stay in sync with the code by construction.
stdio transport — the client spawns the server as a subprocess; no ports, no network exposure.
Demo data —
finance_data.pygenerates a deterministic fake bank (fixed seed). Swap it for a real aggregator (e.g. Plaid) to serve live data; the MCP surface doesn't change.test_client.pydoubles as a minimal example of driving an MCP server programmatically with the Python SDK.