expense-tracker-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TZ | No | Timezone for date calculations | Asia/Karachi |
| EXPENSE_TRACKER_DB | No | Path to the SQLite database file | /data/expenses.db |
| EXPENSE_TRACKER_HOST | No | Host address to bind to | 0.0.0.0 |
| EXPENSE_TRACKER_PORT | No | Port number for HTTP server | 8000 |
| EXPENSE_TRACKER_JOURNAL | No | SQLite journal mode (WAL or DELETE) | WAL |
| EXPENSE_TRACKER_TRANSPORT | No | Transport mode: http or stdio | http |
| EXPENSE_TRACKER_BACKUP_DIR | No | Directory for daily backups | /backups |
| EXPENSE_TRACKER_ALLOWED_HOSTS | No | Comma-separated allowed Host header values | localhost:8000,127.0.0.1:8000 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| add_expenseA | Log an expense in PKR. Only
|
| add_expensesA | Log several expenses at once. Each item takes the same fields as add_expense. Items are validated individually: a bad entry is reported in |
| update_expenseB | Edit an expense. Omitted fields are left alone; pass "" to clear a text field. |
| update_lastA | Correct the most recently logged expense without needing its id. |
| delete_expenseA | Delete an expense. Soft delete — undo_last() restores it. |
| undo_lastB | Restore the most recently deleted expense. |
| list_categoriesA | The valid category names. Expenses must use one of these. |
| query_expensesA | List individual expenses. Defaults to the current month. For totals use summarize() instead — it is far cheaper than adding up rows here. |
| summarizeA | Spending totals, pre-computed. Never sum expenses by hand — call this.
|
| search_expensesA | Free-text search across merchant and note, over all time. |
| set_budgetB | Set a monthly spending limit in PKR for a category. |
| budget_statusA | Budget vs. actual for a month ('YYYY-MM', default current), with burn pace. |
| add_recurringA | Add a monthly recurring expense (rent, internet, subscriptions). It posts itself on |
| list_recurringB | All active recurring expenses. |
| delete_recurringA | Stop a recurring expense. Already-posted expenses are left in place. |
| backup_nowA | Write a consistent snapshot of the database to the backups directory. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 16 tools
Most tools have clearly distinct roles: adding, editing, deleting, querying, summarizing, budgeting, and recurring expenses. Some pairs like add_expense/add_expenses and query_expenses/search_expenses could be confused, but the descriptions clarify the intended use.
The majority of tools follow a consistent snake_case verb_noun pattern like add_expense, list_recurring, and delete_expense. A few outliers such as summarize, budget_status, undo_last, and update_last break the pattern slightly, but the overall style is predictable.
At 16 tools, the set is slightly above the ideal 3-15 range but still well-scoped for an expense tracker. Each tool covers a meaningful part of the domain without obvious redundancy.
The tool surface covers the full expense lifecycle: single and bulk creation, updates, deletion, undo, querying, searching, summarizing, budgets, recurring expenses, and backup. Supporting workflows like recurring and budget management have matching setup, status, and teardown tools.