Personal Expense Tracker MCP Server — expenses, income, budgets & savings goals
Personal Expense Tracker as an MCP Server — works with Claude Desktop, Cursor, nanobot, Windsurf, and any MCP-compatible client.
# with uv (recommended)
uv pip install git+https://github.com/justfsl50/expense-mcp.git
# with pip
pip install git+https://github.com/justfsl50/expense-mcp.git
# from source
git clone https://github.com/justfsl50/expense-mcp.git
cd expense-mcp
pip install -e .
Add to %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (Mac):
{
"mcpServers": {
"expense-mcp": {
"command": "uv",
"args": ["run", "expense-mcp"],
"env": {
"DATABASE_URL": "sqlite:///expenses.db",
"CURRENCY": "₹",
"DEFAULT_USER": "me"
}
}
}
}
Same config — paste into MCP settings under the respective app.
{
"mcp": {
"servers": [{
"name": "expense-mcp",
"command": "uv run expense-mcp"
}]
}
}
python server.py http
# Server runs at http://127.0.0.1:8000/mcp
| Variable | Default | Description |
|---|---|---|
DATABASE_URL | sqlite:///expenses.db | SQLite or PostgreSQL URL |
CURRENCY | ₹ | Currency symbol |
DEFAULT_USER | default | User ID for multi-user setups |
PostgreSQL example:
DATABASE_URL=postgresql://user:pass@localhost:5432/expenses
| Tool | Description | Read-only |
|---|---|---|
expense_add | Save expense or income | ❌ |
expense_search | Filter by text, date, category, amount | ✅ |
expense_summary | today / week / month / year totals | ✅ |
expense_delete | Delete with Pydantic confirmation prompt | ❌ |
expense_insights | Spending patterns and top categories | ✅ |
budget_set | Set monthly category budget | ❌ |
budget_list | View budgets with usage % | ✅ |
goal_create | Create savings goal | ❌ |
goal_update | Add money toward goal | ❌ |
goal_list | View goals with progress bars | ✅ |
| URI | Description |
|---|---|
expense://summary/month | Current month summary |
expense://budgets/current | This month's budgets |
expense://goals/all | All savings goals |
| Prompt | Title | Description |
|---|---|---|
monthly_review | Monthly Review | Start a full month spending review |
budget_setup | Budget Setup | Auto-suggest budgets from history |
savings_plan | Savings Plan | Create a plan for a savings goal |
Just talk naturally in any MCP client:
"spent 500 on groceries"
"show food expenses this week"
"how much did I spend last month?"
"set food budget to 5000"
"am I within budget?"
"save 1000 toward my iPhone goal"
"give me spending insights"
"delete expense #12"
FastMCP + json_response=TrueAppContext dataclassDeclarativeBase, sessionmakerreadOnlyHint, destructiveHint, idempotentHintctx.info(), ctx.warning() in toolsexpenses — id, user_id, amount, category, description, type, date, source, created_at
budgets — id, user_id, category, amount, month
goals — id, user_id, name, target, saved, deadline
MIT — free to use, modify, and distribute.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx expense-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-justfsl50-expense-mcp": {
"command": "uvx",
"args": [
"expense-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceexpense-mcppypiio.github.justfsl50/expense-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.