Skip to main content
Glama
arjunnavadiya8

Expense Tracker MCP Server

README.md
# Expense Tracker MCP Server

A Model Context Protocol (MCP) server built with Python and **FastMCP** that allows LLM assistants (like Claude Desktop) to track, query, summarize, and delete personal expenses using a local **SQLite** database.

---

## 📌 Project Summary

This project provides an intelligent financial tracker backend accessible via MCP tools. With this MCP server, an AI assistant can manage your personal expenses directly through conversational prompts.

### Available Resources:
- **`config://categories`**: Provides a predefined JSON mapping of categories and sub-categories for both income and expenses.

### Available Tools:
- **`add_expense`**: Add a new expense with amount, category, optional description, and optional date.
- **`get_expenses`**: List and filter expenses by category, month, or year.
- **`delete_expense`**: Remove an expense record by its unique ID.
- **`add_income`**: Add a new income record (e.g., Salary, Investments).
- **`get_incomes`**: List and filter income records.
- **`delete_income`**: Remove an income record by its unique ID.
- **`get_summary`**: Generate a monthly summary grouped by spending and income categories.

---

## 🚀 Step-by-Step Setup & Implementation Guide

### Prerequisites
- [Python 3.10+](https://www.python.org/)
- [`uv`](https://github.com/astral-sh/uv) (Fast Python package installer and runner)
- [Claude Desktop](https://claude.ai/download) (or any MCP-compliant client)

---

### Step 1: Set Up the Project

Navigate to the project root directory:
```powershell
cd C:\Users\arjun\Desktop\papi\expense-tracker-mcp
```

Install the required dependencies using `uv`:
```powershell
uv pip install fastmcp
```

---

### Step 2: Project Architecture (`main.py`)

The application defines an MCP server using `FastMCP` and initializes an SQLite database (`expenses.db`) automatically upon execution:

```python
import datetime
from fastmcp import FastMCP
import os
import sqlite3

DB_PATH = os.path.join(os.path.dirname(__file__), "expenses.db")
mcp = FastMCP(name="Expense Tracker")

# Database Initialization
def init_db():
    with sqlite3.connect(DB_PATH) as c:
        c.execute('''
            CREATE TABLE IF NOT EXISTS expenses (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                amount REAL NOT NULL,
                category TEXT NOT NULL,
                description TEXT,
                date DATE NOT NULL DEFAULT CURRENT_DATE
            )
        ''')

init_db()
```

---

### Step 3: Test Running the MCP Server

You can run the server locally to ensure there are no syntax errors:
```powershell
uv run python main.py
```

---

### Step 4: Integrate with Claude Desktop

#### Option A: Automatic Installation (Standard Claude Desktop)
If using standard Claude Desktop:
```powershell
uv run fastmcp install claude-desktop main.py
```

#### Option B: Manual Configuration (Windows Store Claude Desktop)
If using the Microsoft Store version of Claude Desktop, open your `claude_desktop_config.json`:
- **Path**: `%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json`

Add the server entry under `mcpServers`:
```json
{
  "mcpServers": {
    "expense-tracker": {
      "command": "uv",
      "args": [
        "run",
        "python",
        "C:\\Users\\arjun\\Desktop\\papi\\expense-tracker-mcp\\main.py"
      ]
    }
  }
}
```

---

### Step 5: Restart Claude Desktop

1. Close and fully quit Claude Desktop.
2. Relaunch Claude Desktop.
3. Look for the 🔌 icon to verify that the **Expense Tracker** tools are active.

---

## 💬 Example Conversational Prompts

Once configured in Claude Desktop, you can interact with your tracker using natural prompts:

- *"Add an expense of $15.50 for lunch under Food category today."*
- *"Show all my Food expenses for this month."*
- *"Give me a spending summary for August 2026."*
- *"Delete expense ID 3."*

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: adding, listing, summarizing, and deleting expenses. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (add_expense, get_expenses, get_summary, delete_expense). The naming is uniform and predictable.

Tool Count5/5

Four tools is a well-scoped count for an expense tracker. Each tool serves a core function without unnecessary bloat.

Completeness4/5

The set covers create, read, and delete operations, but lacks an update operation for expenses. This is a minor gap that can be worked around by deleting and re-adding.

Maintenance

ActivitySlowing
ResponsivenessNo issues