Local MCP Server Expense Tracker
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., "@Local MCP Server Expense TrackerAdd an expense of $30 for dinner on 2024-03-21"
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.
Local MCP Server Expense Tracker
A lightweight, local Model Context Protocol (MCP) server built with FastMCP and SQLite to manage expenses. This server enables MCP-compatible clients (like Claude Desktop) to add, list, edit, and delete expenses directly from chat using a local database.
Features
SQLite Database: Self-contained database (
Expense.db) created dynamically in the same directory.Full CRUD operations:
add_expense: Add a new expense (amount, category, date, description).list_expenses: Fetch all expenses stored in the database.edit_expense: Modify an existing expense record by ID.delete_expense: Permanently delete an expense record by ID.
Related MCP server: local-expense-tracker
Prerequisites
Python 3.10+
uv (recommended Python package installer/runner)
Installation & Running
1. Run in Development Mode (Inspector)
To run the server and inspect/test the tools using the FastMCP web inspector:
uv run fastmcp dev inspector expense_tracker.py2. Run the MCP Server
To start the server directly:
uv run fastmcp run expense_tracker.py3. Install in Claude Desktop
To automatically register the server with your local Claude Desktop configuration:
uv run fastmcp install claude-desktop expense_tracker.py4. Windows Auto-Sync & Path Fix (Optional)
If you are using the Microsoft Store version of Claude Desktop on Windows, the app is sandboxed and might fail to find uv in its PATH or fail to load the standard configuration.
You can run the included PowerShell script to fix the paths and sync configuration:
.\sync_mcp.ps1This script:
Resolves the absolute path of
uv.exe.Syncs the configurations to Claude's sandboxed local packages directories.
Restarts Claude Desktop automatically.
Database Schema
The SQLite database contains a table named expenses with the following schema:
id: INTEGER (Primary Key, Auto-increment)amount: REAL (Not Null)category: TEXT (Not Null)date: DATE (Not Null)description: TEXT (Optional)
License
MIT License
Available Tools
4 toolsadd_expenseC
Add expense to database
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| amount | Yes | ||
| category | Yes | ||
| description | 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 should disclose behavioral traits like idempotency, return value, or side effects. It only states the basic action, leaving the agent uninformed about potential issues like duplicate handling or required permissions.
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 extremely concise, consisting of a single sentence. While front-loaded, it sacrifices necessary detail for brevity.
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?
Given the tool has four required parameters, no schema descriptions, and no annotations, the description is too minimal to be considered contextually complete. It does not mention the output schema or provide any usage context.
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%, yet the description adds no explanation for any of the four required parameters (date, amount, category, description). The agent gets no help with format, constraints, or expected values beyond the plain schema.
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', which matches the tool name and distinguishes it from sibling tools (delete, edit, list). However, it adds no additional specificity about what adding an expense entails.
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 guidance is provided on when to use this tool versus alternatives, nor any prerequisites or caveats. The description simply repeats the tool's function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_expenseC
Delete expense from database
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states deletion without disclosing irreversibility, permissions, or side effects. Lacks essential behavioral traits for a destructive operation.
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?
Five words, zero waste. Every word is functional and directly conveys the core action.
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?
With no parameter descriptions and no behavioral context, the description is insufficient for a tool with one required parameter and an output schema. Does not explain return values or effects.
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%, and the description adds no meaning to the 'id' parameter. Does not explain what the ID represents or constraints.
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 'delete' and the resource 'expense', distinguishing it from sibling tools (add, edit, list). No ambiguity.
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 guidance on when to use this tool versus alternatives. Implicit from operation but no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_expenseC
Edit expense in database
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| date | Yes | ||
| amount | Yes | ||
| category | Yes | ||
| description | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only says 'edit' implying mutation, but lacks details on idempotency, error states, or whether partial updates are allowed.
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?
Single sentence is excessively brief, providing minimal information. While the tool name implies edit, the description does not earn its place by adding value beyond the name.
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?
With five required parameters, no parameter descriptions, no behavioral details, and an unprovided output schema, the description is grossly incomplete for an edit operation. Missing critical information on what fields can be changed and response behavior.
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 has 0% description coverage and no parameter descriptions in the schema. The tool description does not add any meaning to the five required parameters (id, date, amount, category, description), leaving their semantics entirely to the parameter names.
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?
Description states 'Edit expense in database', clearly indicating a modification operation on an expense resource. It distinguishes from sibling tools add_expense, delete_expense, and list_expenses, though it doesn't specify that it updates an existing expense by ID.
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 guidance on when to use this tool vs alternatives. Missing context on prerequisites, required authorization, or edge cases like non-existent IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_expensesA
Get all expenses from database
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation, which is consistent with its purpose. Without annotations, it doesn't add much beyond the name, but given zero parameters, the behavior is simple. It doesn't disclose any potential performance or data volume issues.
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 extremely concise—one short sentence that accurately describes the function. No unnecessary words.
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 straightforward list operation with zero parameters and an output schema, the description covers the core functionality. It could mention that it returns a list, but 'get all expenses' implies that.
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 input schema has no parameters, and the description does not add any parameter-specific information, which is acceptable since none exist.
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 uses a specific verb ('Get') and resource ('expenses'), and the sibling tools (add, delete, edit) make it clear this is a read-only 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 provides no context for when to use this tool versus its siblings, like filtering or searching. Implicitly it's for listing all, but no explicit guidelines.
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.
4 tool updates
v0.1.0- First observed
add_expense - First observed
delete_expense - First observed
edit_expense - First observed
list_expenses
TDQS
Each tool has a distinct operation (add, delete, edit, list) with no overlap, making it easy for an agent to select the correct one.
All tool names follow a consistent verb_noun pattern using snake_case, which is predictable and readable.
Four tools cover the core CRUD operations for an expense tracker; the count is appropriate and not excessive.
The set provides essential create, read (list), update, and delete operations, but lacks a single-expense retrieval tool, which is a minor gap.
Maintenance
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
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA lightweight MCP server for tracking personal expenses, income, and budget summaries using SQLite.4-
- FlicenseNot gradedqualityDmaintenanceA local MCP server for tracking personal expenses using SQLite, enabling users to add, list, and summarize expenses via natural language.-
- FlicenseNot gradedqualityBmaintenanceA simple MCP server for tracking expenses in a local SQLite database, enabling add, read, update, delete, and summarization of expenses with predefined categories.-
- 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.-
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/MOKSH0077/Local-MCP-Server-Expense-Tracker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server