Expense Tracker MCP Server
Expense Tracker MCP Server
A Model Context Protocol (MCP) server for managing personal expenses. This server exposes a set of MCP tools that allow AI agents to add, list, edit, summarize, and delete expenses. All data is stored in MongoDB and scoped to authenticated users.
⨠Features
š User Authentication
Every request is authenticated using a Bearer Token (API Key).
API keys are securely stored as SHA-256 hashes.
š° Expense Management
Add new expenses
List expenses within a date range
Edit existing expenses
Delete expenses
š Expense Summarization
Aggregate expenses by category
Filter summaries by date range
Optional category filtering
š¤ MCP Native
Fully compatible with MCP-enabled AI agents.
ā” Asynchronous & Fast
Built using FastMCP and Motor for high-performance asynchronous MongoDB operations.
š§° Tech Stack
Technology | Purpose |
Python 3.11+ | Programming Language |
FastMCP | MCP Server Framework |
MongoDB | Database |
Motor | Async MongoDB Driver |
Uvicorn | ASGI Server |
python-dotenv | Environment Variable Management |
š Prerequisites
Before running the project, ensure you have:
Python 3.11+
MongoDB (Local or MongoDB Atlas)
Git
(Optional)
uvpackage manager
š Installation
1. Clone the Repository
git clone https://github.com/Vikkaasshh/ExpenseTracker_MCP_Server.git
cd ExpenseTracker_MCP_Server2. Create Virtual Environment
Linux / macOS
python -m venv venv
source venv/bin/activateWindows
python -m venv venv
venv\Scripts\activate3. Install Dependencies
Using uv (Recommended)
pip install uv
uv pip install -e .Using pip
pip install -e .4. Configure Environment Variables
Create a .env file in the project root.
MONGODB_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/Replace the connection string with your MongoDB URI.
Example:
MONGODB_URI=mongodb+srv://admin:password123@cluster0.mongodb.net/šļø Database Setup
Create a users collection.
Each authenticated user should have a document similar to:
{
"_id": ObjectId("64b5fdf82bc9d0f4b0f92b72"),
"api_key_hash": "f6c7cf74e35dca8d2b11f...",
"is_active": true
}The api_key_hash must contain the SHA-256 hash of the user's API key.
ā¶ļø Running the Server
Run locally:
python main.pyThe server starts at:
http://0.0.0.0:8000MCP endpoint:
http://localhost:8000/mcpš¤ Connecting an MCP Client
Any MCP-compatible client can connect to the server.
Examples:
Claude Desktop
MCP Inspector
Custom MCP Clients
Endpoint
http://localhost:8000/mcpAuthentication Header
Authorization: Bearer <your_api_key>š ļø Available MCP Tools
Tool | Description | Required Parameters |
add_expense | Add a new expense |
|
list_expenses | List expenses |
|
summarize_expense | Summarize expenses by category |
|
edit_expense | Update an expense |
|
delete_expense | Delete an expense |
|
add_expense
Creates a new expense.
Required Parameters
Parameter | Type |
date | YYYY-MM-DD |
amount | float |
category | string |
Optional Parameters
subcategory
note
Example:
{
"date": "2026-01-10",
"amount": 199.99,
"category": "Food",
"subcategory": "Restaurant",
"note": "Dinner"
}list_expenses
Lists expenses between two dates.
Required:
{
"start_date": "2026-01-01",
"end_date": "2026-01-31"
}summarize_expense
Returns grouped expense totals.
Required:
{
"start_date": "2026-01-01",
"end_date": "2026-01-31"
}Optional:
{
"category": "Food"
}edit_expense
Update any expense field.
Example:
{
"expense_id": "687ec8769ef34217",
"amount": 350,
"note": "Updated amount"
}delete_expense
Delete an expense permanently.
{
"expense_id": "687ec8769ef34217"
}š Project Structure
.
āāā main.py
āāā auth.py
āāā db.py
āāā prompt.py
āāā resources/
ā āāā categories.json
ā āāā operation.json
āāā pyproject.toml
āāā uv.lock
āāā README.mdDescription
File | Purpose |
main.py | FastMCP application |
auth.py | Authentication |
db.py | MongoDB connection |
prompt.py | AI system prompt |
resources | Static resources |
pyproject.toml | Project metadata |
uv.lock | Dependency lock |
README.md | Documentation |
š Acknowledgments
Special thanks to:
FastMCP for providing an excellent MCP framework.
MongoDB for scalable document storage.
Motor for asynchronous database operations.
Uvicorn for high-performance ASGI serving.
ā Support
If you found this project useful:
ā Star the repository
Happy Expense Tracking with AI! š
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/Vikkaasshh/ExpenseTracker_MCP_Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server