Expense Tracker 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., "@Expense Tracker MCPwhat's my spending from March 1 to March 31?"
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.
Expense Tracker MCP
A Model Context Protocol (MCP) server for tracking and managing personal expenses. Built with Python and FastMCP, this server provides tools for adding, viewing, filtering, and summarizing expenses stored in a SQLite database.
Features
Add Expenses - Record expenses with name, price, category, sub-category, and date
View All Expenses - Retrieve complete expense history
Filter by Category - Get expenses for a specific category
Summarize by Date Range - Calculate total spending between two dates
SQLite Storage - Persistent, efficient data storage
Related MCP server: Expense Tracker MCP Server
Requirements
Python 3.10 or higher
uv package manager (recommended)
Installation
Clone or navigate to the project directory:
cd expense-tracker-mcpInstall dependencies using uv:
uv sync
Usage
Running the Server
The server uses stdio transport for MCP communication:
uv run python server.pyAvailable Tools
1. add_expense
Add a new expense to the tracker.
Parameters:
Name | Type | Required | Default | Description |
| string | Yes | - | Name/description of the expense |
| integer | Yes | - | Price amount (in smallest currency unit) |
| string | Yes | - | Main category (e.g., "Food", "Clothing") |
| string | No |
| Sub-category (e.g., "Beverages", "Men's Wear") |
| string | No | auto | ISO format date (e.g., "2026-03-14T19:30:00") |
Example:
add_expense("Grocery Shopping", 5000, "Food", "Groceries")
add_expense("Movie Ticket", 1200, "Entertainment", "Movies", "2026-03-10T18:00:00")2. read_expenses
Retrieve all recorded expenses.
Parameters: None
Returns: List of expense objects
Example Response:
[
{
"Name": "Grocery Shopping",
"Price": 5000,
"Category": "Food",
"SubCategory": "Groceries",
"DateAdded": "2026-03-14T19:30:00"
},
{
"Name": "Movie Ticket",
"Price": 1200,
"Category": "Entertainment",
"SubCategory": "Movies",
"DateAdded": "2026-03-10T18:00:00"
}
]3. filter_by_category
Get all expenses belonging to a specific category.
Parameters:
Name | Type | Description |
| string | Category name to filter by |
Example:
filter_by_category("Food")Example Response:
[
{
"Name": "Grocery Shopping",
"Price": 5000,
"Category": "Food",
"SubCategory": "Groceries",
"DateAdded": "2026-03-14T19:30:00"
}
]4. summarize_expenses
Calculate total expenses within a date range.
Parameters:
Name | Type | Description |
| string | Start date in ISO format (e.g., "2026-03-01") |
| string | End date in ISO format (e.g., "2026-03-31") |
Example:
summarize_expenses("2026-03-01", "2026-03-31")Example Response:
{
"StartDate": "2026-03-01",
"EndDate": "2026-03-31",
"TotalExpenses": 6200,
"ExpenseCount": 2
}Database Schema
Expenses are stored in a SQLite database (expense_data.db) with the following schema:
CREATE TABLE expenses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price INTEGER NOT NULL,
category TEXT NOT NULL,
sub_category TEXT,
date_added TEXT NOT NULL
);Project Structure
expense-tracker-mcp/
├── server.py # Main MCP server implementation
├── expense_data.db # SQLite database (auto-created)
├── expense_data.json # Legacy JSON file (not used)
├── pyproject.toml # Project configuration
├── uv.lock # Dependency lock file
├── .python-version # Python version (3.10)
└── README.md # This fileConfiguration
pyproject.toml
[project]
name = "expense-tracker-mcp"
version = "0.1.0"
requires-python = ">=3.10"
dependencies = [
"fastmcp>=3.1.0",
]MCP Integration
This server is designed to work with MCP-compatible clients. Configure your MCP client to connect to this server:
Example Claude Desktop Config:
{
"mcpServers": {
"expense-tracker": {
"command": "uv",
"args": ["run", "python", "server.py"],
"cwd": "/path/to/expense-tracker-mcp"
}
}
}Development
Running Tests
Manual testing can be done using Python:
uv run python -c "
from server import add_expense, read_expenses, filter_by_category, summarize_expenses
# Test adding expenses
add_expense('Test Item', 100, 'Test Category')
# View all expenses
print(read_expenses())
# Filter by category
print(filter_by_category('Test Category'))
# Summarize expenses
print(summarize_expenses('2026-01-01', '2026-12-31'))
"Adding New Tools
To add new tools to the server:
Define a new function with the
@server.tooldecoratorInclude type hints for all parameters
Add a descriptive docstring
Use parameterized SQL queries to prevent injection
Example:
@server.tool
def my_new_tool(param1: str, param2: int) -> dict:
"""Description of what this tool does"""
conn = get_connection()
# ... implementation ...
conn.close()
return resultLicense
MIT
Contributing
Fork the repository
Create a feature branch
Make your changes
Submit a pull request
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/AKSHAYBITLINGU/expense-tracker-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server