Expense Manager MCP Server
# Expense Manager MCP Server
An **MCP server for managing personal expenses** using Python, FastMCP, and SQLite.
Connect it to **Claude Desktop** and manage your expenses using natural language.
## Features
* Add, update, and delete expenses
* Search expenses
* List expenses by date range
* Summarize spending by category
* Store data locally using SQLite
* Expose expense categories through an MCP resource
## Tech Stack
* Python 3.11+
* FastMCP
* Model Context Protocol (MCP)
* SQLite
* uv
## Setup
```bash
git clone https://github.com/sonali1103/expense-manager-mcp-server.git
cd expense-manager-mcp-server
uv sync
```
## Connect to Claude Desktop
### 1. Find your project path
From the project directory, run:
```bash
pwd
```
Copy the path returned. You'll need it in the Claude configuration.
### 2. Open Claude Desktop configuration
In **Claude Desktop**:
**Settings → Developer → Edit Config**
This opens `claude_desktop_config.json`.
On macOS, the file is located at:
```text
~/Library/Application Support/Claude/claude_desktop_config.json
```
### 3. Add the MCP server
Add the following inside `mcpServers`:
```json
{
"mcpServers": {
"expense-manager": {
"command": "uv",
"args": [
"--directory",
"/YOUR/PATH/expense-manager-mcp-server",
"run",
"main.py"
]
}
}
}
```
Replace:
```text
/YOUR/PATH/expense-manager-mcp-server
```
with the path you copied from `pwd`.
### 4. Restart Claude Desktop
Completely quit and reopen Claude Desktop.
Then click the **Connectors** icon near the chat box and verify that `expense-manager` is connected. Claude Desktop will show the MCP tools provided by the server.
## Try It
Once connected, ask Claude:
> "Add a $45 grocery expense for today."
> "Show me my expenses for this month."
> "How much did I spend on food this month?"
> "Find my travel expenses."
> "Delete expense 12."
## MCP Tools
| Tool | Description |
| ----------------- | --------------------------- |
| `add_expense` | Add an expense |
| `list_expenses` | List expenses by date range |
| `summarize` | Summarize spending |
| `update_expense` | Update an expense |
| `delete_expense` | Delete an expense |
| `search_expenses` | Search expenses |
## Database
Expenses are stored locally in:
```text
expenses.db
```
The database and `expenses` table are created automatically when the server starts.
## Project Structure
```text
expense-manager-mcp-server/
├── main.py
├── categories.json
├── pyproject.toml
├── uv.lock
└── .gitignore
```
This project demonstrates how **Model Context Protocol connects an AI assistant to real application functionality and data through standardized tools**.
TDQS
Scored across 6 tools
Each tool targets a distinct action: create, list, summarize, update, delete, and search. There is minimal overlap because list_expenses is date-based while search_expenses is field-based, and summarize provides aggregation rather than raw entries.
Most tools follow a clear verb_noun pattern: add_expense, list_expenses, update_expense, delete_expense, search_expenses. The only minor deviation is 'summarize' lacking an explicit object, though it is still readable and clearly related to expenses.
Six tools is a well-scoped size for an expense manager. Each tool serves a distinct purpose without unnecessary bloat or missing core functionality.
The tool set covers the full expense lifecycle: add, list, search, summarize, update, and delete. There are no major dead ends; users can create, retrieve, modify, and remove expenses, with search and summary features for analysis.