Skip to main content
Glama
justfsl50

expense-mcp

by justfsl50

💰 expense-mcp

Personal Expense Tracker as an MCP Server — works with Claude Desktop, Cursor, nanobot, Windsurf, and any MCP-compatible client.

Python MCP SDK License


Features

  • 📝 Track expenses & income with categories and descriptions

  • 📊 Spending summaries — today, week, month, year

  • 💳 Budget management — set limits per category, get alerts at 80%/100%

  • 🎯 Savings goals — create goals, track progress with visual bars

  • 📈 Spending insights — top categories, daily averages, biggest days

  • 🗑️ Safe deletion — Pydantic-based elicitation for confirmation

  • 🔄 Dual transport — stdio (local) + streamable HTTP (remote)


Related MCP server: expense-tracker-mcp-server

Install

# with uv (recommended)
uv pip install git+https://github.com/justfsl50/expense-mcp.git

# with pip
pip install git+https://github.com/justfsl50/expense-mcp.git

# from source
git clone https://github.com/justfsl50/expense-mcp.git
cd expense-mcp
pip install -e .

Quick Start

Claude Desktop

Add to %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (Mac):

{
  "mcpServers": {
    "expense-mcp": {
      "command": "uv",
      "args": ["run", "expense-mcp"],
      "env": {
        "DATABASE_URL": "sqlite:///expenses.db",
        "CURRENCY": "₹",
        "DEFAULT_USER": "me"
      }
    }
  }
}

Cursor / Windsurf

Same config — paste into MCP settings under the respective app.

nanobot

{
  "mcp": {
    "servers": [{
      "name": "expense-mcp",
      "command": "uv run expense-mcp"
    }]
  }
}

HTTP mode (remote / multi-client)

python server.py http
# Server runs at http://127.0.0.1:8000/mcp

Environment Variables

Variable

Default

Description

DATABASE_URL

sqlite:///expenses.db

SQLite or PostgreSQL URL

CURRENCY

Currency symbol

DEFAULT_USER

default

User ID for multi-user setups

PostgreSQL example:

DATABASE_URL=postgresql://user:pass@localhost:5432/expenses

Tools

Tool

Description

Read-only

expense_add

Save expense or income

expense_search

Filter by text, date, category, amount

expense_summary

today / week / month / year totals

expense_delete

Delete with Pydantic confirmation prompt

expense_insights

Spending patterns and top categories

budget_set

Set monthly category budget

budget_list

View budgets with usage %

goal_create

Create savings goal

goal_update

Add money toward goal

goal_list

View goals with progress bars

Resources

URI

Description

expense://summary/month

Current month summary

expense://budgets/current

This month's budgets

expense://goals/all

All savings goals

Prompts

Prompt

Title

Description

monthly_review

Monthly Review

Start a full month spending review

budget_setup

Budget Setup

Auto-suggest budgets from history

savings_plan

Savings Plan

Create a plan for a savings goal


Usage Examples

Just talk naturally in any MCP client:

"spent 500 on groceries"
"show food expenses this week"
"how much did I spend last month?"
"set food budget to 5000"
"am I within budget?"
"save 1000 toward my iPhone goal"
"give me spending insights"
"delete expense #12"

Architecture

  • MCP SDK v1.26.0 with FastMCP + json_response=True

  • Typed lifespan — DB engine managed via AppContext dataclass

  • SQLAlchemy 2.0DeclarativeBase, sessionmaker

  • Pydantic v2 — input validation, elicitation schemas

  • Tool annotationsreadOnlyHint, destructiveHint, idempotentHint

  • Context loggingctx.info(), ctx.warning() in tools

Database Schema

expenses  — id, user_id, amount, category, description, type, date, source, created_at
budgets   — id, user_id, category, amount, month
goals     — id, user_id, name, target, saved, deadline

License

MIT — free to use, modify, and distribute.

Available Tools

10 tools
budget_listA
Read-onlyIdempotent

Get all budgets and current spending for this month.

Returns: Formatted budget list with usage percentages and status indicators.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context by specifying the result format ('usage percentages and status indicators') and temporal scope ('this month'), going beyond what annotations provide.

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?

Two sentences with no wasted words. The first sentence declares the primary action and scope; the second describes the return format. It is front-loaded and efficient.

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

Completeness4/5

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

Given the simple zero-parameter tool and the presence of an output schema, the description covers the key aspects: what it does, the temporal scope, and the return format. It is mostly complete, though it could note if this includes all user-level budgets or workspace-level.

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

Parameters4/5

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

The input schema has zero parameters, so schema coverage is 100% (trivially). The description does not need to explain parameters; it instead clarifies the tool's output. This meets the baseline of 4 for zero-parameter tools.

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 clearly states 'Get all budgets and current spending for this month,' specifying the action ('Get'), resource ('budgets and spending'), and temporal scope. It distinguishes from sibling tools like 'budget_set' and 'expense_add' which are mutative or expense-specific.

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?

No explicit when-to-use or when-not-to-use guidance is given. While the name and description imply retrieval, there is no mention of alternatives or exclusions among siblings such as 'budget_set' (settings) or 'expense_summary'.

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

budget_setA
Idempotent

Set or update a monthly budget for a spending category.

Args: params: BudgetInput with category, amount, and optional month.

Returns: Confirmation of budget set.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate idempotent, non-destructive, read-write. Description adds 'Set or update' consistent with annotations but does not elaborate on side effects or error scenarios.

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?

Single sentence followed by docstring-style Args/Returns. Every word is necessary and well-structured.

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

Completeness4/5

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

With an output schema present, description adequately covers purpose and return type. Could mention border cases like update vs create, but sufficient for a simple set operation.

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 has descriptions for amount and month (but top-level params lacks description). Description lists the three fields but adds no new meaning beyond schema.

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?

Description clearly states verb (set/update) and resource (monthly budget for a spending category). Distinct from siblings like budget_list (list budgets) and expense tools.

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 on when to use this tool vs alternatives, such as when to set vs update a budget, or prerequisites like checking existing budgets with budget_list.

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

expense_addA

Save a new expense or income transaction.

Args: params: AddExpenseInput with amount, category, description, type, date.

Returns: Confirmation string with saved details and optional budget alert.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations indicate mutation (readOnlyHint=false) and non-destructiveness. The description adds that it returns a confirmation with details and an optional budget alert, but does not disclose other traits like duplicate handling or validation beyond the schema.

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 very concise: two sentences. The first sentence states the purpose, the second briefly describes Args and Returns. No wasted words.

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

Completeness4/5

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

For a simple creation tool, the description covers purpose, input shape, and return format. It lacks details like prerequisites (e.g., budget setup for alerts) but is otherwise adequate given schema richness.

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 has high internal coverage (descriptions for each property: amount, category, etc.). The description lists the parameters but adds no new semantics beyond summarizing them, so baseline 3 is appropriate.

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 'Save a new expense or income transaction' uses a specific verb 'Save' and clearly identifies the resource (expense/income transaction). It distinguishes this creation tool from sibling tools like expense_search, expense_delete, etc.

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 description does not provide explicit when-to-use or when-not-to-use guidance. It implies its role as a creation tool relative to siblings, but lacks direct alternatives or exclusions.

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

expense_deleteA
Destructive

Permanently delete an expense by ID. Asks for confirmation first.

Args: expense_id: The ID of the expense to delete (from expense_search results).

Returns: Confirmation or cancellation message.

ParametersJSON Schema
NameRequiredDescriptionDefault
expense_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds that deletion is permanent and requires confirmation, and notes the return type (confirmation or cancellation). No contradictions.

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 very concise: two sentences for the main purpose, followed by clearly labeled Args and Returns sections. No unnecessary words.

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

Completeness4/5

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

For a simple deletion tool with one parameter and an output schema (implied), the description covers the action, confirmation behavior, and return type. Could mention irreversibility, but the permanent nature is already stated.

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

Parameters4/5

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

The schema has 0% description coverage, but the description explains the one parameter (expense_id) by sourcing it from expense_search results. This adds meaningful guidance beyond the schema's type definition.

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 clearly states the action (Permanently delete), the resource (expense), and the unique behavior (asks for confirmation). It distinguishes from sibling tools like expense_add or expense_search.

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

Usage Guidelines4/5

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

Specifies that expense_id should come from expense_search results, providing clear sourcing context. However, it does not explicitly state when not to use this tool or mention alternatives for non-permanent actions.

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

expense_insightsA
Read-onlyIdempotent

Get spending patterns and insights for the current month.

Returns: Key spending metrics: top category, daily average, biggest day, anomalies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnly, non-destructive, idempotent), the description specifies that results are for the current month and includes return metrics like anomalies. This adds useful behavioral context, though it could detail anomaly detection criteria.

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 extremely concise (two sentences) and front-loaded with the main purpose, followed by a clear list of return values. No superfluous content.

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

Completeness4/5

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

Given there are no parameters and an output schema exists, the description sufficiently explains the return metrics. However, it lacks explanation of what constitutes an anomaly, which would be beneficial for complete understanding.

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

Parameters4/5

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

The tool has no parameters, and the input schema provides complete coverage. The description does not need to add parameter information, so it meets the baseline expectation for parameter semantics.

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 clearly states the tool's purpose: retrieving spending patterns and insights for the current month. It distinguishes itself from sibling tools like expense_summary by focusing on insights such as top category, daily average, biggest day, and anomalies.

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 description implies usage for obtaining monthly spending insights but does not explicitly guide when to use this tool over alternatives like expense_summary. No when-not-to-use or exclusion criteria are provided.

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

expense_summaryA
Read-onlyIdempotent

Get spending summary for a time period.

Args: period: 'today', 'week', 'month', or 'year'.

Returns: Summary with totals, balance, and category breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNomonth

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate read-only, idempotent behavior. The description adds that it returns a summary with totals, balance, and category breakdown, which is useful. However, it does not disclose any edge cases, data recency, or limitations beyond the basic output shape.

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 extremely concise: two sentences plus a brief Args/Returns section. The purpose is front-loaded, and every word adds value. No unnecessary text.

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

Completeness4/5

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

For a simple tool with one parameter and an output schema, the description covers the essential: what it does, the parameter options, and the return structure. The missing default and lack of usage guidance are minor gaps given the tool's simplicity and the presence of annotations and output schema.

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

Parameters4/5

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

The description explicitly lists the allowed values for the period parameter ('today', 'week', 'month', 'year'), which is not described in the input schema (coverage 0%). This adds meaning beyond the enum definition. However, it does not mention the default value 'month', which is present in the schema, missing an opportunity to fully inform the agent.

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 'Get spending summary for a time period', identifying the action and resource. It mentions the return includes totals, balance, and category breakdown. However, it does not differentiate from sibling tool 'expense_insights', which might also provide summary data, slightly reducing clarity.

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 on when to use this tool versus alternatives like expense_insights or expense_search. No context on when not to use it or prerequisites is given, leaving the agent to infer usage from the name alone.

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

goal_createA

Create a new savings goal.

Args: params: GoalInput with name, target amount, and deadline.

Returns: Confirmation of goal creation.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations indicate it's not read-only (write operation) and not destructive, which aligns with 'create'. The description adds minimal behavioral context beyond the annotation signals.

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?

Two concise sentences with a clear front-loaded purpose. No redundant information.

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

Completeness4/5

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

For a simple create tool, it covers the basic aspects. An output schema exists but return is vaguely described as 'confirmation'. Could mention uniqueness constraints or future dates.

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 description lists the three fields (name, target, deadline) but adds no extra detail beyond what the schema already provides. Despite schema coverage being 0% (discrepancy), the schema itself contains detailed descriptions.

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 clearly states 'Create a new savings goal', specifying the action (create) and resource (savings goal). It distinguishes from siblings like goal_list and goal_update.

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?

Usage is implied as creating a goal, but there is no explicit guidance on when to use this tool vs alternatives like goal_update or goal_list.

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

goal_listA
Read-onlyIdempotent

Get all savings goals with progress bars.

Returns: Formatted list of goals with progress and deadline.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior5/5

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

The description aligns with annotations (readOnlyHint, idempotentHint) and adds context about the return format ('progress and deadline'), beyond what annotations provide. It clearly states the tool returns a formatted list of goals, indicating no side effects, consistent with the annotations.

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 very concise with two sentences, front-loading the purpose and adding return details. No unnecessary words or fluff; every sentence adds value.

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

Completeness4/5

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

Given the tool has no parameters and an output schema exists, the description adequately explains the return format. It could optionally mention that the list contains all goals without filters, but it is sufficiently complete for a simple list tool. The mention of 'progress bars' adds useful context.

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?

There are no parameters, and the schema has 100% coverage. The description adds no parameter-level info because none are needed. Baseline 3 is appropriate as the description does not add meaning beyond the schema, but also does not miss anything.

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 explicitly states 'Get all savings goals with progress bars', which clearly identifies the action (get all) and resource (savings goals), with a specific detail (progress bars). It distinguishes from sibling tools like goal_create and goal_update, which involve mutation.

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 description does not provide explicit guidance on when to use this tool versus alternatives. However, the name and the simple act of listing goals imply it should be used when a user wants to view all goals, without filtering or modification. No explicit exclusions or comparisons to siblings are given.

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

goal_updateB

Add money toward a savings goal.

Args: params: UpdateGoalInput with goal name and amount to add.

Returns: Updated goal progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations are all false (non-readOnly, non-destructive, non-idempotent), which the description complements by stating it 'adds money' (a mutation) and 'returns updated goal progress.' However, it does not disclose potential side effects or error conditions, leaving some behavioral gaps.

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 very concise: one sentence plus Args/Returns sections. No unnecessary words. Could be slightly more structured (e.g., bullet points), but it is efficient and front-loaded with the action.

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?

Output schema exists, so the return description is sufficient. However, the tool lacks context on when to use it (e.g., only for existing goals) and does not mention error handling. Given sibling tools and simple interface, it is moderately complete but not thorough.

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% for the top-level parameter, but the nested schema has descriptions for 'name' and 'amount'. The description restates that the input is an 'UpdateGoalInput with goal name and amount,' adding minimal value beyond the schema. Adequate but not compensating fully for the coverage gap.

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 clearly states 'Add money toward a savings goal,' specifying a concrete action (add) and resource (goal). It distinguishes from sibling tools like goal_create (create new) and goal_list (list), making the purpose unambiguous.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., goal must exist), nor does it clarify that this tool is only for adding funds (not updating other fields). Implicitly clear but lacking explicit context.

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.

  1. 10 tool updatesv1.0.1
    • First observedbudget_list
    • First observedbudget_set
    • First observedexpense_add
    • First observedexpense_delete
    • First observedexpense_insights
    • First observedexpense_search
    • First observedexpense_summary
    • First observedgoal_create
    • First observedgoal_list
    • First observedgoal_update

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a distinct purpose: budgeting, expenses, and goals are clearly separated. Even similar tools like expense_summary and expense_insights provide different outputs (summary vs. patterns), so no confusion.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern using snake_case, e.g., expense_add, goal_list, budget_set. The naming conventions are uniform across the entire set.

Tool Count5/5

10 tools cover the three main domains (budgets, expenses, goals) without being excessive. Each tool contributes a necessary operation, making the set well-scoped for an expense management server.

Completeness4/5

The tool surface covers core CRUD operations for expenses (add, delete, search) and goals (create, list, update), but misses an expense update tool. Budgets have list and set, which covers creation and reading, but no delete. Minor gaps exist.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables users to track personal expenses through natural language interactions with comprehensive category support and financial summaries. Provides both local and remote MCP server options with SQLite storage for fast expense management operations.
    -
  • F
    license
    B
    quality
    D
    maintenance
    MCP server for tracking personal expenses using FastMCP and SQLite, enabling adding, listing, updating, deleting expenses and summarizing by category via natural language tools.
    5
    1
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for personal finance management. Enables natural language expense logging, budgeting, recurring charge detection, and statement import with deterministic local calculations.
    -
  • F
    license
    A
    quality
    C
    maintenance
    A personal expense tracker exposed over MCP, enabling users to log and query expenses in natural language sentences. It features category inference, recurring expenses, soft deletes, and SQLite storage with no external database.
    16
    -