Expense Tracker MCP Server
by mhd-faraz
README.md
# ๐ฐ Expense Tracker MCP Server
A powerful, AI-ready expense tracking system built with **FastMCP** (Model Context Protocol) that integrates seamlessly with Claude AI and other LLM applications.
**๐ฏ Status:** Production-Ready | **๐ Database:** SQLite | **๐ Framework:** FastMCP 3.4.2
---
## โจ Features
### ๐ฏ **Core Expense Management**
- โ
**Add Expenses** - Track daily spending with category, subcategory, and notes
- โ
**List Expenses** - Query expenses by date range
- โ
**Summarize** - Category-wise expense breakdown with totals
### ๐ฐ **Budget Management**
- โ
**Set Budget** - Define monthly budgets per category
- โ
**Check Budget Status** - Real-time budget vs actual spending with ๐ด๐ก๐ข status indicators
- โ
**Budget Alerts** - Automatic warnings at 80% budget usage
### ๐ **Analytics & Insights**
- โ
**Spending Trends** - Weekly trend analysis (last 30 days)
- โ
**Advanced Analytics** - Highest/lowest expenses, median, averages per category
- โ
**Smart Insights** - AI-generated spending patterns and recommendations
- โ
**Monthly Reports** - Comprehensive month-end summaries
### ๐ **Recurring Expenses**
- โ
**Add Recurring Expenses** - Subscriptions, rent, bills (daily/weekly/monthly/yearly)
- โ
**List Recurring** - View all active subscriptions with estimated monthly cost
### ๐ฏ **Savings Goals**
- โ
**Create Savings Goals** - Vacation, emergency fund, new gadgets, etc.
- โ
**Track Progress** - Update and monitor goal achievements
- โ
**View All Goals** - Dashboard with progress percentages and deadlines
### ๐ฎ **Forecasting**
- โ
**Expense Forecast** - Predict next month expenses (70% historical + 30% recurring)
- โ
**Spending Prediction** - AI-powered forecasting based on patterns
---
## ๐ ๏ธ Installation
### **Prerequisites**
- Python 3.8+
- pip or uv (recommended)
### **Step 1: Clone Repository**
```bash
git clone https://github.com/mhd-faraz/Expense-Tracker-MCP.git
cd Expense-Tracker-MCP
```
### **Step 2: Create Virtual Environment**
```bash
# Using uv (faster)
uv venv
source .venv/bin/activate
# Or using Python venv
python3 -m venv .venv
source .venv/bin/activate
```
### **Step 3: Install Dependencies**
```bash
uv add fastmcp aiosqlite
```
### **Step 4: Run Server**
```bash
python3 main.py
```
**Expected Output:**
```
โ
Database initialized with all tables - write access confirmed
INFO: Uvicorn running on http://0.0.0.0:8321/mcp (Press CTRL+C to quit)
```
---
## ๐ Usage
### **Option 1: MCP Inspector (Testing)**
1. Open browser: `http://localhost:8321/mcp/inspector`
2. Select tool from dropdown
3. Fill parameters
4. Click "Run Tool"
**Example:**
```json
{
"date": "2026-06-19",
"amount": 450,
"category": "Food & Dining",
"subcategory": "Restaurant",
"note": "Lunch with team"
}
```
### **Option 2: Claude Desktop (Production)**
1. Connect to this MCP server in Claude Desktop
2. Use natural language:
```
"Add an expense of โน3000 for groceries today"
"Show my spending trends for the last 30 days"
"What's my budget status for this month?"
"Create a savings goal of โน50000 for vacation by December"
"Forecast my next month expenses"
```
Claude will automatically call the appropriate tools and update your database!
### **Option 3: Python Script**
```python
import aiosqlite
import asyncio
async def add_expense():
async with aiosqlite.connect("/tmp/expenses.db") as db:
await db.execute(
"INSERT INTO expenses(date, amount, category, note) VALUES (?,?,?,?)",
("2026-06-19", 450, "Food & Dining", "Lunch")
)
await db.commit()
asyncio.run(add_expense())
```
---
## ๐๏ธ Database Schema
### **expenses**
```sql
CREATE TABLE expenses(
id INTEGER PRIMARY KEY AUTOINCREMENT,
date TEXT NOT NULL,
amount REAL NOT NULL,
category TEXT NOT NULL,
subcategory TEXT DEFAULT '',
note TEXT DEFAULT '',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
```
### **budgets**
```sql
CREATE TABLE budgets(
id INTEGER PRIMARY KEY AUTOINCREMENT,
category TEXT NOT NULL,
amount REAL NOT NULL,
month TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(category, month)
)
```
### **recurring_expenses**
```sql
CREATE TABLE recurring_expenses(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
amount REAL NOT NULL,
category TEXT NOT NULL,
frequency TEXT NOT NULL,
start_date TEXT NOT NULL,
end_date TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
```
### **savings_goals**
```sql
CREATE TABLE savings_goals(
id INTEGER PRIMARY KEY AUTOINCREMENT,
goal_name TEXT NOT NULL,
target_amount REAL NOT NULL,
current_amount REAL DEFAULT 0,
deadline TEXT NOT NULL,
category TEXT DEFAULT 'Savings',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
```
**Database Location:** `/tmp/expenses.db` (macOS/Linux)
---
## ๐ง Available Tools (13 Total)
| # | Tool | Purpose | Parameters |
|---|------|---------|------------|
| 1 | `add_expense()` | Add new expense | date, amount, category, subcategory, note |
| 2 | `list_expenses()` | Query expenses | start_date, end_date |
| 3 | `summarize()` | Category summary | start_date, end_date, category |
| 4 | `set_budget()` | Set monthly budget | category, amount, month |
| 5 | `check_budget_status()` | Budget tracking | month |
| 6 | `add_recurring_expense()` | Add subscription | name, amount, category, frequency, start_date |
| 7 | `list_recurring_expenses()` | View subscriptions | (no params) |
| 8 | `create_savings_goal()` | New savings target | goal_name, target_amount, deadline, category |
| 9 | `update_savings_goal_progress()` | Track progress | goal_id, amount_saved |
| 10 | `get_savings_goals()` | View all goals | (no params) |
| 11 | `get_spending_trends()` | Weekly trends | days |
| 12 | `get_expense_analytics()` | Detailed stats | start_date, end_date |
| 13 | `forecast_expenses()` | Next month prediction | months_ahead |
| 14 | `get_smart_insights()` | AI recommendations | (no params) |
| 15 | `generate_monthly_report()` | Monthly summary | month |
---
## ๐ Example Outputs
### **Budget Status:**
```
Category Budget Spent Remaining Usage% Status
Food & Dining โน5000 โน2300 โน2700 46.0% ๐ข OK
Transportation โน3000 โน1200 โน1800 40.0% ๐ข OK
Bills & Utilities โน4000 โน2500 โน1500 62.5% ๐ข OK
```
### **Smart Insights:**
```
๐ฏ TOP SPENDING
Food & Dining is your biggest expense (โน2300) - 35.2% of budget
๐ FREQUENCY
Transportation has most transactions (4 times). Small amounts add up!
๐ DAILY PACE
You're spending โน473 per day on average
๐ก OPTIMIZATION
You have 3 categories eating >20% of budget. Consider consolidating!
```
### **Forecast:**
```
Category Predicted vs Last Month
Bills & Utilities โน6429.70 โ +157.2%
Groceries โน2450.00 โ -30.0%
Food & Dining โน2060.00 โ -10.4%
```
---
## ๐ Connect to Claude Desktop
### **Step 1: Get Server URL**
```
http://0.0.0.0:8321/mcp
```
### **Step 2: Add to Claude Settings**
In Claude Desktop, go to Settings โ Connected Servers:
```json
{
"mcpServers": {
"expense-tracker": {
"command": "python3",
"args": ["/path/to/main.py"],
"type": "stdio"
}
}
}
```
### **Step 3: Start Using!**
Now tell Claude:
```
"I spent โน3000 on groceries today"
"Show my monthly budget status"
"Create a savings goal for my vacation"
"What are my spending trends?"
```
---
## ๐ Project Structure
```
Expense-Tracker-MCP/
โโโ main.py # Main MCP server (13 tools)
โโโ test_expense_tracker.py # Complete test suite
โโโ categories.json # Category definitions
โโโ .gitignore # Git ignore rules
โโโ README.md # This file
โโโ .venv/ # Virtual environment
```
---
## ๐งช Testing
Run the complete test suite:
```bash
python3 test_expense_tracker.py
```
**Output includes:**
- โ
10 sample expenses
- โ
5 budget configurations
- โ
5 recurring expenses
- โ
4 savings goals
- โ
All 15 tools tested
- โ
Formatted analytics and reports
---
## ๐ Security & Best Practices
- โ
Database uses WAL mode for concurrent access
- โ
Async/await for non-blocking operations
- โ
Input validation on all parameters
- โ
Proper error handling with meaningful messages
- โ
Database transactions for data integrity
---
## ๐ Tech Stack
- **Framework:** FastMCP 3.4.2
- **Database:** SQLite 3
- **Async Runtime:** asyncio + aiosqlite
- **Server:** Uvicorn
- **Language:** Python 3.12+
---
## ๐ฏ Use Cases
1. **Personal Finance Tracking** - Daily expense logging
2. **Budget Planning** - Monthly budget management
3. **Goal Tracking** - Savings and financial targets
4. **Spending Analysis** - Trend analysis and forecasting
5. **AI Integration** - Natural language expense tracking via Claude
---
## ๐ Categories Supported
```
Food & Dining Bills & Utilities Healthcare
Transportation Entertainment Travel
Shopping Education Business
Subscriptions Groceries Personal Care
Other
```
---
## ๐ค Contributing
This is a portfolio project. Feel free to fork and extend!
**Ideas for enhancement:**
- Export to CSV/PDF
- Multi-user support
- Cloud sync
- Mobile app integration
- Advanced ML predictions
---
## ๐ License
MIT License - Feel free to use and modify!
---
## ๐จโ๐ป Author
**Faraz** - CS Engineering Graduate (2025)
Portfolio: [faraz-portfolio-ivvo-xi.vercel.app](https://faraz-portfolio-ivvo-xi.vercel.app)
GitHub: [@mhd-faraz](https://github.com/mhd-faraz)
---
## ๐ FAQ
**Q: Database file empty?**
A: Database files are binary. Use `list_expenses()` tool to verify data exists.
**Q: Can I use this without Claude Desktop?**
A: Yes! Use MCP Inspector or call tools directly via Python.
**Q: How do I reset all data?**
A: Delete `/tmp/expenses.db` and restart server.
**Q: Can I host this online?**
A: Yes! Deploy to MCPCloud, Vercel, or Railway.
---
## ๐ Next Steps
1. โ
Clone this repo
2. โ
Run `python3 main.py`
3. โ
Open `http://localhost:8321/mcp/inspector`
4. โ
Test a tool
5. โ
Connect to Claude Desktop
6. โ
Start tracking expenses with AI!
---
**Happy Expense Tracking! ๐ฐโจ**
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues