Skip to main content
Glama
ayush-patel-29

Expense Tracker MCP

Expense Tracker MCP

A simple Model Context Protocol (MCP) server for tracking expenses in a local SQLite database. It exposes tools for adding, reading, updating, deleting, and summarizing expenses, plus a JSON resource containing supported categories and subcategories.

Features

  • Add expenses with amount, date, category, subcategory, and note fields

  • List all saved expenses

  • Query expenses by start and end date

  • Update existing expenses by ID

  • Delete expenses by ID

  • Summarize spending by category over a date range

  • Read predefined expense categories from categories.json

  • Store data locally in expenses.db

Related MCP server: Personal Finance Tracker

Requirements

  • Python 3.13 or newer

  • uv for dependency management, or another Python package manager

Installation

Clone the project and install dependencies:

uv sync

The main dependency is fastmcp, defined in pyproject.toml.

Running The Server

Start the MCP server:

uv run python main.py

By default, the server runs over HTTP on:

http://0.0.0.0:8000

The SQLite database is initialized automatically when the server starts. If expenses.db does not already contain the required table, it will be created.

MCP Tools

add_expense

Adds a new expense.

Parameters:

  • amount (float): Expense amount

  • date (str): Expense date, preferably in YYYY-MM-DD format

  • category (str): Main expense category

  • subcategory (str, optional): More specific category

  • note (str, optional): Additional details

Example:

{
  "amount": 250.75,
  "date": "2026-07-08",
  "category": "food",
  "subcategory": "groceries",
  "note": "Weekly grocery run"
}

get_expenses

Returns all expenses stored in the database.

get_expense_by_start_end_date

Returns expenses between two dates.

Parameters:

  • start_date (str): Start date

  • end_date (str): End date

Example:

{
  "start_date": "2026-07-01",
  "end_date": "2026-07-31"
}

update_expense

Updates an existing expense by ID. Only fields provided in the request are updated.

Parameters:

  • expense_id (int): Expense ID

  • amount (float, optional): Updated amount

  • date (str, optional): Updated date

  • category (str, optional): Updated category

  • subcategory (str, optional): Updated subcategory

  • note (str, optional): Updated note

Example:

{
  "expense_id": 1,
  "amount": 300,
  "note": "Updated grocery total"
}

delete_expense

Deletes an expense by ID.

Parameters:

  • expense_id (int): Expense ID to delete

summarize

Summarizes expenses by category for a date range.

Parameters:

  • start_date (str): Start date

  • end_date (str): End date

  • category (str, optional): Filter summary to one category

Example:

{
  "start_date": "2026-07-01",
  "end_date": "2026-07-31",
  "category": "food"
}

MCP Resources

expenses://categories

Returns the contents of categories.json, which maps supported categories to their subcategories.

Example categories include:

  • food

  • transport

  • housing

  • utilities

  • health

  • education

  • business

  • travel

  • investments

  • misc

Data Model

Expenses are stored in the expenses SQLite table:

Column

Type

Description

id

INTEGER

Auto-incrementing primary key

amount

REAL

Expense amount

date

TEXT

Expense date

category

TEXT

Main category

subcategory

TEXT

Optional subcategory

note

TEXT

Optional note

Project Structure

.
├── main.py           # FastMCP server and tool definitions
├── categories.json   # Category and subcategory definitions
├── expenses.db       # Local SQLite database
├── pyproject.toml    # Project metadata and dependencies
├── uv.lock           # Locked dependency versions
└── README.md

Notes

  • Date values are stored as text. Use a consistent format such as YYYY-MM-DD so date-range queries work correctly.

  • The database file is local to this project directory.

  • The current implementation does not validate category names against categories.json; clients should use the categories resource to choose valid values.

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

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/ayush-patel-29/expense-tracker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server