Skip to main content
Glama
NeelContractor

Expense Tracker MCP Server

Expense Tracker MCP Server

A simple Expense Tracker MCP server built with FastMCP and SQLite.

Features

  • Add expenses

  • List expenses by date range

  • Summarize expenses by category

  • Expose expense categories as an MCP resource

  • Compatible with Claude Desktop and MCP Inspector

Related MCP server: expense-tracker-mcp-server

Tech Stack

  • Python 3.14+

  • FastMCP 3.4.0

  • SQLite

Installation

Clone the repository and install dependencies:

uv sync

or

uv add fastmcp

Project Structure

.
├── main.py
├── expenses.db
├── categories.json
├── pyproject.toml
├── uv.lock
└── README.md

Available Tools

add_expense

Add a new expense record.

Parameters:

  • date

  • amount

  • category

  • subcategory (optional)

  • note (optional)

Example:

{
  "date": "2026-06-01",
  "amount": 600,
  "category": "transport",
  "subcategory": "cab_ride_hailing",
  "note": "Cab ride to Delhi"
}

list_expenses

List expenses within a date range.

Parameters:

  • start_date

  • end_date

summarize

Summarize expenses by category.

Parameters:

  • start_date

  • end_date

  • category (optional)

Available Resources

expense://categories

Returns the contents of categories.json.

Example categories:

  • food

  • transport

  • housing

  • utilities

  • health

  • education

  • entertainment

  • shopping

  • travel

  • investments

  • and more

Running the MCP Server

Start the server:

uv run fastmcp run main.py

MCP Inspector

Launch the MCP Inspector for local testing:

uv run fastmcp dev inspector main.py

Claude Desktop Integration

Install the server into Claude Desktop:

uv run fastmcp install claude-desktop main.py

Restart Claude Desktop after installation.

Example Prompts

Add an expense:

Add an expense of ₹600 for a cab ride to Delhi last Sunday.

List expenses:

Show all expenses between 2026-06-01 and 2026-06-30.

Summarize expenses:

Summarize my expenses for June 2026.

Available Tools

3 tools
add_expenseC

Add a new expense entry to the database.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
amountYes
categoryYes
subcategoryNo
noteNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states that an entry is added, but does not disclose validation behavior, duplicate handling, side effects, required-field enforcement, or what happens after a successful add.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with virtually no filler. It could be considered slightly under-specified, but as far as conciseness and structure go, it is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter create operation with no annotations, no output schema, and no schema descriptions, this is not a complete definition. The description misses parameter details, input formats, result/error behavior, and any explicit differentiation from sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate by explaining any of the parameters. The agent must rely entirely on parameter names like date, amount, category, subcategory, and note, with no type, format, or semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: 'Add a new expense entry to the database.' It uses a specific verb and resource, and the action is distinct from the sibling tools list_expenses and summarize, though it does not explicitly name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided about when to use this tool versus list_expenses or summarize outside of the obvious 'add' intent. There are no prerequisite conditions, exclusions, or alternative routing hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_expensesA

List expense entries within an inclusive date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It clearly identifies a read operation and the inclusive date-range boundary, but does not mention pagination, ordering, or the returned fields. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence front-loads the verb, resource, and main constraint. There is no filler or redundant restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter list tool, the description covers the core action and range semantics. However, the lack of an output schema and absence of return-shape or date-format guidance leaves some ambiguity for an agent invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 adds the key semantic that the range is inclusive, but it does not specify the expected date format or confirm how each parameter maps beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('expense entries'), and adds a clear scope (inclusive date range). This distinguishes it from siblings 'add_expense' (create) and 'summarize' (aggregate).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the name and siblings, but there is no explicit statement about when to choose this over 'summarize' or how it relates to 'add_expense'. No exclusions or alternative routing are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarizeA

Summarize expenses by category within an inclusive date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes
categoryNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses that the date range is inclusive, which is useful, but it does not mention whether the operation is read-only, what metrics are returned, or how categories with no expenses are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no redundancy or filler. Every word contributes to the tool's core behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter summarization tool, the description gives the essential operation but leaves gaps. With no annotations and no output schema, it should say more about the return shape, optional category behavior, and what 'summarize' actually computes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions for any parameter (0% coverage), so the description must compensate. It adds meaning by connecting category to grouping and start_date/end_date to an inclusive range, but it does not clarify whether category is a filter or required grouping key, nor the expected date format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('summarize') and resource ('expenses'), and adds the grouping dimension (by category) and date range scope. This clearly distinguishes it from the sibling tools add_expense and list_expenses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: summarize rather than add or list expenses. However, there is no explicit guidance about when to prefer this tool over list_expenses or what scenarios it is not suited for, leaving some inference to the agent.

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. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedadd_expense
    • First observedlist_expenses
    • First observedsummarize

TDQS

B3.1/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: adding, listing, or summarizing expenses. No overlap or ambiguity.

Naming Consistency4/5

Mostly consistent verb_noun pattern (add_expense, list_expenses), though 'summarize' lacks a direct object, which is a minor deviation.

Tool Count4/5

Three tools is a reasonable scope for a basic expense tracker, covering core operations without being excessive.

Completeness3/5

Coverage is adequate for adding, listing, and summarizing expenses, but lacks update and delete functionality, leaving notable gaps in lifecycle management.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables users to track expenses by adding, listing, and summarizing them with category support through natural language.
    -
  • A
    license
    C
    quality
    C
    maintenance
    Enables tracking, categorizing, and summarizing personal and business expenses with support for date range queries and category grouping.
    3
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Stores and manages expenses in SQLite. Enables adding, removing, and listing expenses with filtering, and exposes expense categories via a resource.
    3
    -

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/NeelContractor/expense-tracker-mcp-server'

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