Expense Tracker MCP Server
Click on "Deploy 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 MCP ServerAdd a grocery expense of $50 for today."
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 Server
A Model Context Protocol (MCP) server for tracking personal expenses. This server provides tools to add, list, and summarize expenses, utilizing a local SQLite database for storage.
Features
Add Expenses: Log expenses with details including amount, category, subcategory, date, and notes.
List Expenses: Retrieve a list of expenses within a specified date range.
Summarize Expenses: Generate summaries of expenses (total amount) grouped by category.
Categories Resource: Access a comprehensive list of predefined expense categories.
Local Database: All data is stored in a local
expenses.dbfile.
Related MCP server: Expense Tracker MCP Server
Prerequisites
Installation
Clone the repository (if applicable) or navigate to the project directory:
cd "d:\Study\Expense Tracker MCP"Install dependencies:
Using
uv:uv syncOr using
pip:pip install -e .
Usage
Running Locally
You can run the MCP server locally for testing or development.
Development mode (with auto-reload):
uv run fastmcp dev main.pyProduction run:
uv run fastmcp run main.pyInspector
You can inspect and test the server tools using the MCP Inspector:
uv run fastmcp inspect main.pyIntegration with Claude Desktop
To use this Expense Tracker with Claude Desktop:
Open your Claude Desktop configuration file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Add the
expense-trackerserver to themcpServersobject. Make sure to use the absolute path to yourmain.pyfile.{ "mcpServers": { "expense-tracker": { "command": "uv", "args": [ "run", "fastmcp", "run", "d:/Study/Expense Tracker MCP/main.py" ] } } }Restart Claude Desktop.
Tools Available
add_expense
Adds a new expense entry.
Arguments:
amount(float): The cost of the expense.category(string): The category of the expense (seecategoriesresource).subcategory(string, optional): A more specific classification.note(string, optional): Additional details.date(string, optional): Date of expense inDD-MM-YYYYformat. Defaults to current date (IST) if omitted.
list_expenses
Lists expenses within a date range.
Arguments:
start_date(string): Start date inDD-MM-YYYYformat.end_date(string): End date inDD-MM-YYYYformat.
summarize
Summarizes expenses by category.
Arguments:
start_date(string): Start date inDD-MM-YYYYformat.end_date(string): End date inDD-MM-YYYYformat.category(string, optional): Filter by a specific category.
Resources
expense://categories
Returns the JSON content of the available expense categories.
Project Structure
main.py: The core MCP server implementation.expenses.db: SQLite database file (created automatically).categories.json: specific categories configuration.pyproject.toml: Project configuration and dependencies.
Notes
Date Format: The system uses
DD-MM-YYYYfor date storage and querying.Timezone: Default dates are calculated in Indian Standard Time (IST).
Available Tools
3 toolsadd_expenseA
Add a new expense entry to the database. If date is not provided, it defaults to current IST date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| note | No | ||
| amount | Yes | ||
| category | Yes | ||
| subcategory | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses a useful behavioral trait (date defaults to current IST date), but does not mention return values, validation rules, or any side effects. This adds some value but leaves notable gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no redundancy. The purpose is front-loaded, and the date default is stated efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with an output schema, the description covers the core purpose and one key default. However, it lacks usage guidance and parameter explanations, which could leave an agent uncertain about how to properly construct inputs or when this tool is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only explains the date parameter's default behavior, leaving amount, category, note, and subcategory unexplained. The names are somewhat self-explanatory, but the description adds minimal meaning beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Add' and the resource 'expense entry', making its purpose unambiguous. It is easily distinguished from sibling tools list_expenses and summarize, which involve reading and analyzing rather than creating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The description implies usage by describing the action, and the date default provides a usage nuance, but there is no mention of exclusions or comparison to list_expenses or summarize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_expensesA
List all expenses between start_date and end_date.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly implies a read-only operation ('List'), but does not disclose additional behavioral details such as pagination, ordering, date format, or whether all expense fields are returned. It is minimally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. It efficiently conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with an output schema present, the description provides the essential scope. It does not cover edge cases like timezone or pagination, but these are less critical given the existence of an output schema and the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description only adds that the two parameters define a range ('between start_date and end_date'). This reinforces the parameter names but does not specify date format, inclusivity, or other constraints. Minimal compensation for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('expenses'), and a specific scope ('between start_date and end_date'). It clearly distinguishes from sibling tools: add_expense (write operation) and summarize (aggregation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing expenses within a date range, but provides no explicit guidance on when to choose this over alternatives like summarize. It lacks any 'when not to use' or cross-reference to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarizeA
Summarize all expenses by category within an inclusive date range. If category is not provided, summarize all categories.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| end_date | Yes | ||
| start_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses inclusive date ranges and category fallback, but it does not specify whether 'summarize' means sum, count, average, or another aggregation. The output schema likely covers return format, but the aggregation metric is ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core action ('Summarize all expenses by category') and add a useful conditional without any superfluous words. This is an appropriate size for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple parameter set and an output schema, so the description need not detail return values. It covers the key aspects of category grouping and date inclusivity, but the unclear 'summarize' semantics leave a minor gap in the overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the category parameter (optional, default all categories) and the inclusiveness of the date range, but it does not provide date format expectations or further clarify the date parameters beyond their names and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool summarizes expenses by category within an inclusive date range, and the optional category behavior is explicit. This distinguishes it from sibling tools like add_expense and list_expenses by focusing on aggregation rather than modification or individual listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for aggregate views of expenses, but it does not explicitly state when to prefer this over list_expenses or provide alternative guidance. The context is clear but not the boundary between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
add_expense - First observed
list_expenses - First observed
summarize
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: adding, listing, and summarizing expenses. No overlap or ambiguity between them.
Two tools follow a verb_noun pattern (add_expense, list_expenses), but summarize is a bare verb, creating a minor inconsistency. Overall still readable and predictable.
Three tools is slightly minimal for an expense tracker, but it covers the core needs. Not excessively thin or bloated.
The set covers adding, listing, and summarizing expenses, but lacks update/delete operations. Users cannot correct or remove entries, a notable gap in lifecycle coverage.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA lightweight server built with FastMCP and SQLite for managing personal finances. It allows users to add, list, and summarize expenses by category through MCP-compatible clients.-
- FlicenseBqualityDmaintenanceA powerful SQLite-backed expense tracking server built with the Model Context Protocol (MCP). This server allows AI agents (like Claude) to manage your personal finances by adding, deleting, and listing expenses directly from your chat interface.3-
- FlicenseNot gradedqualityCmaintenanceMCP server for tracking expenses with local SQLite storage. Provides tools to add, list, and summarize expenses by category.-
- FlicenseNot gradedqualityCmaintenanceA lightweight local MCP server for tracking personal or small-team expenses. It lets you add expense entries, list transactions within a date range, and generate simple summaries by category — all backed by a local SQLite database.-