budget-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@budget-mcpAdd a $35 expense for lunch under Dining"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ฐ Personal Budget MCP Server
Track personal finances by talking to an LLM. An MCP server that gives any MCP-compatible client typed tools to log transactions, manage a category library, and analyse spending โ plus interactive dashboards rendered directly in the chat client.
Built with Python, FastMCP, SQLAlchemy, SQLite and PostgreSQL.
Why this exists
Chat is a good interface for expense logging. "Spent ยฃ42 at Tesco and ยฃ8 on coffee" is faster than opening an app and filling in two forms, and an LLM can categorise it for you.
The problem is that an LLM with no tools will happily tell you it logged your transaction. Getting this to work means the model must be unable to confuse "I recorded this" with "I described recording this" โ so the tools have to return unambiguous success or failure, reject bad input rather than coercing it, and expose enough query surface that the agent reads real state instead of reconstructing it from conversation history.
That design problem is the actual point of this repo. The budgeting is the excuse.
Related MCP server: Personal Finance Tracker
๐ธ Screenshots
Budget dashboard | Spending trends |
|
|
๐ง Design notes: making agent calls trustworthy
Explicit failure over silent coercion. Tools validate input and return a structured error naming what was wrong, rather than guessing at intent. An invalid type, a malformed date, or a category_id that doesn't exist fails loudly, so the agent can correct itself and report accurately to the user instead of inventing a confirmation.
Batch-first write tools. add_transaction, update_transaction, delete_transaction and add_category all accept either a single item or an items list. Agents naturally handle several things at once ("log these five expenses"), and forcing them into one call per record multiplies both latency and the number of places a partial failure can hide.
Referential integrity at the tool boundary. delete_category takes an optional reassign_to_category_id, so removing a category can't silently orphan its transactions. The integrity decision is surfaced as a parameter the agent must reason about rather than a side effect it discovers later.
Read surface sized for multi-turn use. get_summary, get_transactions and get_uncategorized_transactions cover aggregate, detail and triage reads with consistent filter arguments across all three. get_uncategorized_transactions returns results sorted by description specifically so an agent can categorise bulk imports in coherent groups instead of one row at a time.
Idempotent schema bootstrap. Tables and 15 default categories are created on first startup, so a fresh clone or a new cloud deployment is immediately usable and there's no partially-initialised state for a tool call to land in.
โจ Features
Local or cloud storage โ zero-setup SQLite (in-memory or
data/budget.db), or PostgreSQL via any provider such as Neon.Interactive dashboards in-client โ category pie charts and searchable transaction tables rendered via
prefab-ui, returned as MCP UI apps rather than plain text.Spending trends โ continuous category line chart with month/week/day granularity toggle, date-range slider and searchable table.
Batch operations โ single-item or bulk write across transactions and categories.
Reproducible environment โ
uvfor fast, locked dependency resolution.Broad client support โ Claude Desktop, Claude Code, Cursor, Goose, Open WebUI, and any other MCP host.
๐ Quickstart
git clone https://github.com/PedroLiu1999/budget-mcp.git
cd budget-mcp
uv sync
uv run pytest # confirm the install works
uv run server.py # start the server (in-memory SQLite by default)Then register it with your client โ Claude Code is the one-liner:
claude mcp add budget -- uv run --directory "/absolute/path/to/budget-mcp" server.pyTo persist data, set DATABASE_URL in a .env file first (see Database configuration).
๐ Available tools
Tool | Description | Arguments |
| Interactive UI app: category breakdown chart and searchable transaction table. |
|
| Interactive UI app: spending over time with category line chart, granularity toggle, date-range slider and searchable table. |
|
| Logs one or many income/expense transactions. |
|
| Aggregated summary: income, expense, net balance, optional category breakdown. |
|
| Detailed transaction records by filter. |
|
| Uncategorised transactions sorted by description, for bulk categorisation. |
|
| Updates one or many transactions. |
|
| Removes one or many transactions by ID. |
|
| Lists active categories. |
|
| Adds one or many categories. |
|
| Updates a category's properties. |
|
| Removes one or many categories, optionally reassigning their transactions. |
|
โ๏ธ Database configuration
Set via the DATABASE_URL environment variable in a .env file. Keep .env out of version control.
Local SQLite โ in-memory (default if DATABASE_URL is unset):
DATABASE_URL=sqlite:///:memory:Local SQLite file โ persists between restarts:
DATABASE_URL=sqlite:///data/budget.dbPostgreSQL / Neon:
DATABASE_URL=postgresql://<user>:<password>@<hostname>/<dbname>?sslmode=requireTables and 15 default category seeds are created automatically on first startup.
๐ Client setup
Claude Code (CLI)
claude mcp add budget -- uv run --directory "/absolute/path/to/budget-mcp" server.pyClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"personal-budget": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/budget-mcp", "server.py"]
}
}
}Cursor IDE
Settings โ Features โ MCP โ Add New MCP Server
Type:
commandName:
budget-mcpCommand:
uv run --directory "/absolute/path/to/budget-mcp" server.py
Open WebUI
Bridge the stdio server over HTTP with mcpo:
uvx mcpo --port 8000 -- uv run server.pyThen in Admin Panel โ Settings โ External Tools, add the OpenAPI connection URL http://localhost:8000 (or http://host.docker.internal:8000 from Docker).
โ๏ธ Cloud deployment
For remote hosts, Docker, or platforms such as Horizon:
Set
DATABASE_URLto a cloud PostgreSQL connection string in the deployment environment โ in-memory SQLite will not persist across restarts.Point the runner at the ASGI app:
fastmcp run server.py:mcp
Schema tables and default categories initialise on import, so no migration step is needed on first boot.
๐งช Testing
uv run pytestInspect tools interactively with the FastMCP Inspector:
uv run fastmcp dev inspector server.py:mcpOr preview interactive UI applications directly in the browser:
uv run fastmcp dev apps server.py:mcp๐ License
MIT โ see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceA lightweight server built with FastMCP and SQLite for managing personal finances. It allows users to add, list, and summarize expenses by category through MCP-compatible clients.
- Flicense-qualityDmaintenanceA lightweight MCP server for tracking personal expenses, income, and budget summaries using SQLite.4
- Flicense-qualityBmaintenanceA lightweight MCP server that lets LLM clients track, query, and summarize personal expenses using a local SQLite database.
- FlicenseBqualityCmaintenanceA lightweight local MCP server that enables users to add, list, edit, and delete expenses via SQLite database through natural language in MCP-compatible clients.41
Related MCP Connectors
Hosted MCP server for personal tools: budgets, savings goals, spaced repetition, tips, countdowns.
MCP server for Gainium โ manage trading bots, deals, and balances via AI assistants
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoโฆ
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PedroLiu1999/budget-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server

