Skip to main content
Glama
s-stefanov

actual-mcp

Actual Budget MCP Server

MCP server for integrating Actual Budget with Claude and other LLM assistants.

Overview

The Actual Budget MCP Server allows you to interact with your personal financial data from Actual Budget using natural language through LLMs. It exposes your accounts, transactions, and financial metrics through the Model Context Protocol (MCP).

Related MCP server: monarch-mcp

Features

Resources

  • Account Listings - Browse all your accounts with their balances

  • Account Details - View detailed information about specific accounts

  • Transaction History - Access transaction data with complete details

Tools

Transaction & Account Management

  • get-transactions - Retrieve and filter transactions by account, date, amount, category, or payee

  • create-transaction - Create a new transaction in an account with optional category, payee, and notes

  • update-transaction - Update an existing transaction with new category, payee, notes, or amount

  • get-accounts - Retrieve a list of all accounts with their current balance and ID

  • balance-history - View account balance changes over time

Reporting & Analytics

  • spending-by-category - Generate spending breakdowns categorized by type

  • monthly-summary - Get monthly income, expenses, and savings metrics

  • budget-vs-actual - Compare budgeted amounts against actual spending per category

  • net-worth - Track assets, liabilities, and net worth across all accounts over time

  • category-trends - See how spending in each category moves month over month, with trend direction

  • spending-by-payee - Rank payees by how much was spent with (or received from) each one

  • cash-flow - Report income, expenses, and net cash flow per month or week

The five tools above return JSON rather than markdown, so amounts stay machine-readable. Every amount is an integer number of cents, and each response carries an amountsIn field describing the sign conventions it uses.

Custom Reports & Dashboards

  • get-custom-reports - Retrieve every saved custom report from the Reports section

  • create-custom-report - Create a saved custom report

  • update-custom-report - Update fields on a saved custom report, leaving the rest unchanged

  • delete-custom-report - Delete a saved custom report

  • get-dashboards - Retrieve every dashboard page and the widgets laid out on it

  • add-dashboard-widget - Add a widget to a dashboard page

  • update-dashboard-widget - Update a widget's configuration, position, or size

  • remove-dashboard-widget - Remove a widget from its page

  • organize-dashboard - Reposition and resize several widgets at once

  • create-dashboard-page / rename-dashboard-page / delete-dashboard-page - Manage dashboard pages

Categories

  • get-grouped-categories - Retrieve a list of all category groups with their categories

  • create-category - Create a new category within a category group

  • update-category - Update an existing category's name or group

  • delete-category - Delete a category

  • create-category-group - Create a new category group

  • update-category-group - Update a category group's name

  • delete-category-group - Delete a category group

Payees

  • get-payees - Retrieve a list of all payees with their details

  • create-payee - Create a new payee

  • update-payee - Update an existing payee's details

  • delete-payee - Delete a payee

Rules

  • get-rules - Retrieve a list of all transaction rules

  • create-rule - Create a new transaction rule with conditions and actions

  • update-rule - Update an existing transaction rule

  • delete-rule - Delete a transaction rule

Prompts

  • financial-insights - Generate insights and recommendations based on your financial data

  • budget-review - Analyze your budget compliance and suggest adjustments

Installation

Prerequisites

Remote access

Pull the latest docker image:

docker pull sstefanov/actual-mcp:latest

Local setup

  1. Clone the repository:

git clone https://github.com/s-stefanov/actual-mcp.git
cd actual-mcp
  1. Install dependencies:

npm install
  1. Build the server:

npm run build
  1. Build the local docker image (optional):

docker build -t <local-image-name> .
  1. Configure environment variables (optional):

# Path to your Actual Budget data directory (default: ~/.actual)
export ACTUAL_DATA_DIR="/path/to/your/actual/data"

# If using a remote Actual server
export ACTUAL_SERVER_URL="https://your-actual-server.com"
export ACTUAL_PASSWORD="your-password"

# Specific budget to use (optional)
export ACTUAL_BUDGET_SYNC_ID="your-budget-id"

# How long downloaded data stays fresh before the server re-syncs, in ms
# (default: 60000). Use 0 to sync before every call, or -1 to never sync.
export ACTUAL_SYNC_TTL_MS="60000"

Optional: separate encryption budget password

If your Actual setup requires a different password to unlock the local/encrypted budget data than the server authentication password, you can set ACTUAL_BUDGET_ENCRYPTION_PASSWORD in addition to ACTUAL_PASSWORD.

# If server auth and encryption/unlock use different passwords
export ACTUAL_BUDGET_ENCRYPTION_PASSWORD="your-encryption-password"

Connection lifecycle

The server keeps one shared Actual connection for its entire lifetime and serializes budget operations through it. Downloaded data is re-synced when it exceeds the ACTUAL_SYNC_TTL_MS freshness window. In both stdio and HTTP modes, SIGINT and SIGTERM drain in-flight work before the server shuts down. Actual is no longer initialized and shut down for each tool call.

Report semantics

  • Balances and balance histories are capped as of today; future-dated transactions are excluded, and the current-month balance-history row is partial.

  • Closed on-budget accounts remain included in historical reports; closed off-budget accounts stay excluded by default.

  • Monthly income follows Actual's income-group metadata. Refunds net against expenses, zero-activity months count in averages, and uncategorized transfer pairs are skipped.

  • The former Investments bucket is removed from monthly summaries.

Usage with Claude Desktop

To use this server with Claude Desktop, add it to your Claude configuration:

On MacOS:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json

On Windows:

code %APPDATA%\Claude\claude_desktop_config.json

Add the following to your configuration...

a. Using Node.js (npx version):

{
  "mcpServers": {
    "actualBudget": {
      "command": "npx",
      "args": ["-y", "actual-mcp", "--enable-write"],
      "env": {
        "ACTUAL_DATA_DIR": "path/to/your/data",
        "ACTUAL_PASSWORD": "your-password",
        "ACTUAL_SERVER_URL": "http://your-actual-server.com",
        "ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
      }
    }
  }
}

### a. Using Node.js (local only):

```json
{
  "mcpServers": {
    "actualBudget": {
      "command": "node",
      "args": ["/path/to/your/clone/build/index.js", "--enable-write"],
      "env": {
        "ACTUAL_DATA_DIR": "path/to/your/data",
        "ACTUAL_PASSWORD": "your-password",
        "ACTUAL_SERVER_URL": "http://your-actual-server.com",
        "ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
      }
    }
  }
}

b. Using Docker (local or remote images):

{
  "mcpServers": {
    "actualBudget": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-v",
        "/path/to/your/data:/data",
        "-e",
        "ACTUAL_PASSWORD=your-password",
        "-e",
        "ACTUAL_SERVER_URL=https://your-actual-server.com",
        "-e",
        "ACTUAL_BUDGET_SYNC_ID=your-budget-id",
        "sstefanov/actual-mcp:latest",
        "--enable-write"
      ]
    }
  }
}

After saving the configuration, restart Claude Desktop.

💡 ACTUAL_DATA_DIR is optional if you're using ACTUAL_SERVER_URL.

💡 Use --enable-write to enable write-access tools.

Running an SSE Server

To expose the server over a port using Docker:

docker run -i --rm \
  -p 3000:3000 \
  -v "/path/to/your/data:/data" \
  -e ACTUAL_PASSWORD="your-password" \
  -e ACTUAL_SERVER_URL="http://your-actual-server.com" \
  -e ACTUAL_BUDGET_SYNC_ID="your-budget-id" \
  -e BEARER_TOKEN="your-bearer-token" \
  sstefanov/actual-mcp:latest \
  --sse --enable-write --enable-bearer

⚠️ Important: When using --enable-bearer, the BEARER_TOKEN environment variable must be set.
🔒 This is highly recommended if you're exposing your server via a public URL.

Example Queries

Once connected, you can ask Claude questions like:

  • "What's my current account balance?"

  • "Show me my spending by category last month"

  • "How much did I spend on groceries in January?"

  • "What's my savings rate over the past 3 months?"

  • "Which categories am I overspending on this month?"

  • "How has my net worth changed over the past year?"

  • "Which payees do I spend the most with?"

  • "Is my grocery spending trending up or down?"

  • "Analyze my budget and suggest areas to improve"

  • "What custom reports do I have?"

  • "Add a net worth widget to my Spending Plan dashboard"

  • "Rearrange my dashboard so the cash flow card is full width at the top"

Usage with Codex CLI

Example Codex configuration:

In ~/.codex/config.toml:

[mcp_servers.actual-budget]
url = "http://localhost:3000"

Point Codex at the same port you pass to npm start -- --sse --port <PORT>.

Development

For development with auto-rebuild:

npm run watch

Testing the connection to Actual

To verify the server can connect to your Actual Budget data:

node build/index.js --test-resources

Debugging

Since MCP servers communicate over stdio, debugging can be challenging. You can use the MCP Inspector:

npx @modelcontextprotocol/inspector node build/index.js

E2E validation gate

The end-to-end test suite (vitest.e2e.config.ts) spins up a real Actual Budget server in a Docker container (via Testcontainers), seeds a budget, and drives it through a real MCP client over stdio to verify accounts, transactions, categories, payees, rules, and imports actually persist. It requires Docker to be running locally.

In CI, the e2e-test job in .github/workflows/pr-validation.yml only runs on release-please PRs (branch prefix release-please--) or when a PR is given the run-e2e label — it does not run on every PR by default, since it needs Docker and takes longer than the standard checks.

To run it locally:

npm run build && npm run test:e2e

Docker must be installed and running; the test suite pulls and starts the Actual server image automatically.

Project Structure

  • index.ts - Main server implementation

  • types.ts - Type definitions for API responses and parameters

  • prompts.ts - Prompt templates for LLM interactions

  • utils.ts - Helper functions for date formatting and more

Registry & Discovery

actual-mcp is published to the official MCP Registry as io.github.s-stefanov/actual-mcp. Registry metadata lives in server.json and is published automatically on each release (see .github/workflows/release-please.yml).

It advertises two transports on the npm package — stdio (default) and streamable-http (via the --sse flag). (A Docker image is also published, but is not yet listed as a registry package.)

Post-release directory listings are tracked in docs/mcp-registry-checklist.md.

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Available Tools

17 tools
balance-historyC

Get account balance history over time

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNo
accountIdNo
includeOffBudgetNo

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, but it only says 'Get', implying a read operation without detailing behavior. It does not explain how time range is handled, what includeOffBudget does, or what the response format is.

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, efficient sentence with no filler or redundancy. It is concise but lacks essential information, which prevents it from being an exemplary 5.

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 3-parameter tool with no output schema and no annotations, this description is too thin to support correct invocation. The meaning of 'over time', the optionality of accountId, and the effect of includeOffBudget are all unexplained, leaving significant ambiguity.

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 mention any of the three parameters (months, accountId, includeOffBudget). The agent receives no guidance on how these parameters affect the query or why they are optional.

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 states a specific verb and resource ('Get account balance history over time') that clearly conveys the tool's core function. However, it does not explicitly differentiate it from siblings like get-accounts or net-worth, which could also involve balance data, so it stops short of a 5.

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?

There is no guidance on when to use this tool versus alternatives such as get-accounts or net-worth. No context, exclusions, or prerequisites are provided, leaving the agent to guess the appropriate use case.

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

budget-vs-actualB

Compare budgeted amounts against actual spending per category, for recent months. Returns JSON; amounts are integer cents.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsYesNumber of most recent months to report on
includeHiddenYesInclude categories and groups marked hidden
categoryGroupNameNoRestrict the report to a single category group, by name

TDQS

B3.3/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 full burden. It discloses the return format (JSON) and the unit of amounts (integer cents), which is genuinely useful behavioral context. However, it says nothing about permissions, performance, pagination, or whether hidden categories are included by default beyond what the schema implies.

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, front-loaded with the core action and scope, then the return format and unit. No waste, every sentence earns its place.

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 read-only report tool with no annotations and no output schema, the description covers purpose, scope, mismatched unit, and return format. But it omits usage guidance and any behavioral caveats, leaving real gaps for an agent deciding between this and the budget-month siblings.

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 100%, so the schema already documents all three parameters. The description adds the comparison semantics and amount unit but no additional per-parameter meaning. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb ('Compare') and resources (budgeted amounts vs actual spending per category), clearly distinct from siblings like spending-by-category or monthly-summary. It's clear but doesn't explicitly differentiate itself from the budget-month siblings.

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 explicit when-to-use or when-not-to-use guidance. The agent must infer context from the purpose statement alone. No alternatives or conditions are named.

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

cash-flowB

Report income, expenses, and net cash flow per month or week. Returns JSON; amounts are integer cents.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsYesNumber of most recent months to report on
intervalYesBucket size for each row of the reportmonthly
accountIdNoRestrict the report to a single account

TDQS

B3.4/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 full load. It discloses the return format (JSON) and the unit convention (amounts are integer cents), which is genuinely useful behavioral detail, but says nothing about read-only nature, auth requirements, or volume/pagination behavior for multi-month or weekly reports.

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 short sentences with zero filler; the reporting scope is front-loaded and the output-format caveat follows. Nothing here could be trimmed without losing 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?

Given no annotations and no output schema, the description usefully covers the return format and unit convention, and the schema fully documents all three parameters. The missing piece is usage context versus the many sibling report tools, which an agent would have to infer.

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 100%, so months, interval, and accountId are already explained in the schema. The description's 'per month or week' and 'integer cents' loosely reinforce interval and output units but add no syntax or constraint detail beyond what the schema provides, making the 3 baseline appropriate.

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?

States a specific verb (Report) plus the exact resource (income, expenses, net cash flow) and the bucketing granularity (per month or week). This is clear enough for an agent to distinguish it from aggregation siblings like monthly-summary or spending-by-category, but it never names or contrasts those siblings explicitly.

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?

There is no guidance on when to choose this report over monthly-summary, budget-vs-actual, or category-trends, nor any stated prerequisites. The description only indicates what the tool produces, leaving the selection decision entirely to inference from the sibling list.

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

get-accountsA

Retrieve a list of all accounts with their current balance and ID.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It clearly communicates a read-only retrieval operation and the returned content. It doesn't mention pagination, ordering, or exact response shape, but for a zero-parameter list tool the core behavior is transparent.

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 concise sentence that front-loads the verb and resource, names the returned fields, and contains no filler. Every word earns its place.

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, parameterless retrieval tool, the description covers the essential information: what is returned and its scope ('all accounts'). The lack of output schema is partially compensated by naming balance and ID as the returned fields, though details like response envelope or ordering are not 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 tool has zero parameters, so the schema provides no parameter documentation to rely on. The baseline for zero-parameter tools is 4, and the description appropriately focuses on what is returned rather than on parameter meaning.

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 ('Retrieve') and a precise resource ('a list of all accounts') with clear return fields ('current balance and ID'). This makes it immediately distinguishable from sibling tools that deal with transactions, categories, budgets, and payees.

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?

The description gives clear context for when to use the tool: when all accounts with their current balance and ID are needed. It does not explicitly mention alternatives or exclusions, but the domain (accounts) is distinct enough from the siblings that routing is straightforward.

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

get-budget-monthA

Retrieve budget data for a specific month, including budgeted amounts, spending, and balances per category.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYesMonth in YYYY-MM format (e.g. "2025-01")

TDQS

A3.6/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 burden. It uses 'Retrieve' to indicate a read operation and lists the data included. It does not mention response format, pagination, or authentication, but these are less critical for a simple month-scoped lookup.

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?

One sentence, front-loaded with the verb and resource, and every word adds value. 'Budgeted amounts, spending, and balances per category' is precise and free of filler.

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 tool with one parameter, full schema coverage, and no output schema, the description adequately explains what is returned. It misses only a note on how this differs from overlapping siblings, which is covered by the usage dimension.

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 100%: the only parameter 'month' is already described with format and example. The description adds no extra parameter semantics beyond confirming the month scope.

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 tool retrieves budget data for a specific month with category-level budgeted amounts, spending, and balances. It is specific about the resource and scope, though it does not explicitly differentiate from siblings like monthly-summary or get-budget-months.

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 by the description: to get monthly budget data per category. However, there is no guidance on when to choose this over similar siblings such as monthly-summary, spending-by-category, or get-budget-months.

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

get-budget-monthsA

Retrieve a list of all available budget months in YYYY-MM format.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 behavioral burden. It conveys that the operation is a read-only retrieval and discloses the output format, but does not mention ordering, empty results, or how this differs from the singular get-budget-month tool. Adequate for a simple getter, 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, front-loaded sentence that directly states the action and the output format with no filler. Every word earns its place.

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 zero-parameter list retrieval tool, the description fully specifies what is returned and in what format. It could note the relationship to get-budget-month or clarify edge cases like empty lists, but the basic contract is complete.

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 zero parameters and the input schema is empty with 100% coverage. The description's mention of YYYY-MM is output format rather than parameter semantics, which is appropriate. Baseline 4 applies for a no-parameter tool.

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 verb ('Retrieve') and resource ('all available budget months'), and specifies the output format (YYYY-MM). It does not explicitly differentiate from the sibling get-budget-month, though the plural 'months' and 'list of all' imply a distinction.

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 this tool should be used when a caller needs to enumerate available budget months, but it does not explicitly state when to use it versus alternatives like get-budget-month or monthly-summary. No exclusions or alternative routing are mentioned.

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

get-custom-reportsA

Retrieve every saved custom report from the budget's Reports section

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. 'Retrieve' implies a read-only operation, but the description does not confirm safety, permissions, rate limits, pagination, or whether archived reports are included; it adds little beyond the tool name.

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, front-loaded sentence with no redundant or filler text. It communicates the core action and scope immediately.

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 zero-parameter read tool, the purpose is clear, but with no output schema or annotations the description does not explain the return shape or whether results are paginated or filtered. It is minimally adequate but leaves some ambiguity about what 'every saved custom report' includes.

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 takes zero parameters and the schema explicitly states no arguments are accepted. With no parameters to document, the baseline for parameter semantics is 4, and the description appropriately does not invent parameter details.

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?

States a specific verb ('Retrieve') and resource ('every saved custom report'), and scopes it to the budget's Reports section. The resource is distinct from all sibling tools, which cover accounts, transactions, budgets, and other report types, so an agent can select it without opening the schema.

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 only states what the tool returns. It gives no when-to-use guidance, no prerequisites, and no alternatives among the many sibling reporting tools (e.g., get-dashboards, category-trends), leaving the agent to infer that it is for saved custom reports.

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

get-dashboardsA

Retrieve every dashboard page and the widgets laid out on it. These are the dashboards under the Reports section of the sidebar.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 burden, but it does signal read-only behaviour via 'Retrieve' and discloses scope by saying 'every' dashboard (i.e. no filtering or argument-based narrowing). It says nothing about pagination, ordering, or permissions, which are the traits an agent would otherwise need.

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?

Two short sentences, front-loaded with the action and result, with no filler. The second sentence is mildly redundant on the word 'dashboards' but earns its place by disambiguating which dashboards are meant.

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 no-argument, no-output-schema read tool, the description covers what is returned (dashboard pages plus their widgets) and where they come from. The only remaining gap is pagination/scope limits, which is minor at this complexity.

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 takes zero arguments, so per the baseline the schema fully carries parameter semantics and there is nothing for the description to add. The description correctly avoids inventing parameters.

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?

Names a specific verb (Retrieve) and resource (every dashboard page and its widgets), and the second sentence locates them in the Reports section of the sidebar. It is clear what the tool returns, but it never distinguishes itself from report-oriented siblings like get-custom-reports or net-worth.

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 by the resource named rather than stated: an agent can infer this is the tool for dashboard layouts. There is no explicit when-to-use guidance, no exclusion of cases where get-custom-reports would be preferred, and no mention of prerequisites or sidebar/UI state.

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

get-grouped-categoriesA

Retrieve a list of all category groups with their id, name, type and category list.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/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 burden. 'Retrieve a list' clearly indicates a read-only operation, which is useful. However, it does not disclose ordering, filtering, pagination, permissions, or any potential limitations, leaving some behavioral gaps for a tool without annotation support.

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 entire description is a single focused sentence that immediately states the action, target resource, and output contents. There is no redundant wording or filler, making it easy to parse and act on.

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 no-argument retrieval tool, the description covers the main need: what data will be returned. It names id, name, type, and category list. However, without an output schema, it does not clarify the structure of the 'category list' or whether results are sorted, so it falls just short of fully complete.

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 zero parameters and the schema fully documents this with 'This tool does not accept any arguments.' The description adds no parameter-specific detail, but none is needed; the baseline for a zero-parameter tool is appropriately high.

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 ('Retrieve') and identifies the exact resource ('all category groups') plus the returned fields. This clearly differentiates the tool from siblings like get-payees, get-accounts, and get-budget-months, leaving no ambiguity about what it does.

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 use when the caller needs category group metadata, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusion criteria. The resource name and contents make the intended use reasonably clear, but no direct guidance is provided.

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

get-payeesA

Retrieve a list of all payees with their id, name, categoryId and transferAccountId.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

The verb 'Retrieve' clearly indicates a read-only operation and 'all payees' clarifies that results are unfiltered. However, because no annotations are provided, the description carries the full behavioral burden; it does not disclose result ordering, pagination, nullability of fields, or how errors 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?

A single sentence states the action, resource, scope, and returned fields with no filler. The key information is front-loaded and every word contributes.

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 zero-parameter, read-only listing tool with no output schema, the description is largely complete: it identifies the resource, scope, and exact return fields. Minor omissions such as sort order and response format prevent a perfect score, but they are unlikely to block correct invocation.

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 accepts zero parameters and the input schema explicitly states 'This tool does not accept any arguments.' With 100% schema coverage, the description does not need to add parameter detail; the baseline of 4 applies.

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 ('Retrieve') with a concrete resource ('all payees') and enumerates the returned fields (id, name, categoryId, transferAccountId). The resource is unique among the sibling tools, so there is no ambiguity about what this tool returns.

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 when a complete payee list is needed, and no sibling tool is payee-specific, but it does not explicitly state when to prefer this over alternatives or any exclusion criteria. Usage context must be inferred from the tool name and resource rather than stated.

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

get-rulesA

Retrieve a list of all rules. PS amount comes in cents: positive for deposit, negative for payment

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description must carry the behavioral disclosure burden. It does this by stating the operation is a retrieval and by documenting a non-obvious output detail: amounts are in cents and signed as positive for deposits and negative for payments. It does not cover pagination, ordering, or output structure, but for a parameterless list tool these are acceptable gaps.

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 two sentences with no filler. The primary purpose is front-loaded, and the second sentence adds essential unit and sign semantics that are directly relevant to interpreting the result.

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 no-argument tool with no output schema, the description provides the essential purpose and one important output convention, but it leaves some ambiguity about what fields a rule contains and how the list is ordered. Still, an agent can confidently select and invoke the tool based on this description.

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 declares zero parameters and explicitly states the tool accepts no arguments, so parameter-level documentation is unnecessary. With schema description coverage at 100% and no parameters to explain, the baseline of 4 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 uses a specific verb and resource: 'Retrieve a list of all rules.' This clearly identifies what the tool does and distinguishes it from siblings like get-transactions or get-payees by naming a unique resource. The additional amount convention reinforces that the tool has a defined output.

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 this tool should be used when an agent needs all rules, but it does not explicitly state when to choose it over alternatives or mention any exclusions. The wording gives a clear purpose, but no direct comparison to sibling tools or conditions for use.

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

get-transactionsC

Get transactions for an account with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
endDateNo
accountIdYes
maxAmountNo
minAmountNo
payeeNameNo
startDateNo
categoryNameNo

TDQS

C2.7/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 disclosing behavior. 'Get' implies a read operation, but the description omits pagination, sorting, date formats, amount semantics, and any caveats about response behavior.

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 concise sentence with no filler, and the core operation is front-loaded. However, it is slightly under-specified for a tool with 8 parameters.

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?

Given the lack of annotations, output schema, and parameter descriptions, this one-liner is insufficient for an agent to use the tool reliably. An agent could make a basic call with accountId, but the filtering parameters and their formats remain unexplained.

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

Parameters2/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 for the 8 parameters. It only maps 'account' to accountId and broadly signals that other parameters are optional filters; it does not explain limit, date ranges, amount bounds, payeeName, or categoryName.

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 uses a specific verb ('Get') and resource ('transactions for an account'), making the core purpose clear. It is distinct from sibling tools like monthly-summary or spending-by-category, though it does not explicitly name alternatives.

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?

There is no guidance on when to choose this tool over the sibling aggregation tools, nor any mention of prerequisites, exclusions, or typical use cases. 'Optional filtering' gives a hint but not enough to route an agent confidently.

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

monthly-summaryC

Get monthly income, expenses, and savings

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsYes
accountIdNo

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read-only operation, and the description lists output categories, but it does not explain how the monthly window is calculated, what 'savings' includes, or whether accountId scopes the data.

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 short sentence with no filler or redundancy. The key output areas are front-loaded and every word contributes meaning.

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?

With no annotations, no output schema, and 0% parameter description coverage, the overall context is too thin. An agent cannot tell from the description how the optional accountId interacts with the summary, what time range is covered, or what the response structure looks like.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to compensate, but it never mentions the 'months' parameter or the optional 'accountId' parameter. 'Monthly' weakly hints at the time dimension, but the default value and account scoping behavior are left unexplained.

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 names a specific verb ('Get'), resource ('monthly summary'), and the key data areas ('income, expenses, and savings'), making the tool's core function clear. It does not explicitly contrast with siblings like spending-by-category or balance-history, but the summary-style output is reasonably distinguishable.

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?

There is no guidance on when to prefer this tool over alternatives such as get-transactions, spending-by-category, or balance-history. Usage is only weakly implied by the phrase 'monthly income, expenses, and savings' rather than explicitly stated.

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

net-worthB

Track assets, liabilities, and net worth across all accounts over time. Returns JSON; amounts are integer cents.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsYesNumber of most recent months to report on
includeClosedYesInclude closed accounts
includeOffBudgetYesInclude off-budget accounts. Defaults to true, since net worth normally covers every account.

TDQS

B3.4/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 burden, and it does add real value by disclosing the return format (JSON) and the unit convention (integer cents). However, it says nothing about permissions, pagination, or whether the tool is purely read-only, so the safety/behavioral profile is only partially covered.

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 short sentences, front-loaded with the purpose and followed by the return/unit caveat. No wasted words or filler.

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 read-only aggregation tool with only three well-documented parameters, the description plus schema cover what an agent needs, and the explicit JSON/cents note compensates for the absent output schema. It could still say more about the shape of the returned series, but nothing essential is missing.

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 100% and all three parameters are documented in the schema, so the baseline of 3 applies. The description adds no parameter-level meaning beyond what the schema already provides.

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?

States a specific verb-like scope (track assets, liabilities, net worth) and a clear boundary ('across all accounts over time'), which distinguishes it reasonably well from point-in-time siblings like balance-history or monthly-summary. It stops short of explicitly naming which sibling to prefer for adjacent tasks.

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?

There is no when-to-use or when-not-to-use guidance and no named alternative, even though siblings such as balance-history, cash-flow, and monthly-summary overlap in the account-over-time space. The agent must infer the selection criteria itself.

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

spending-by-categoryC

Get spending breakdown by category for a specified date range

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNo
accountIdNo
startDateNo
includeIncomeNo

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. The word 'Get' implies a read-only operation, and 'breakdown by category' communicates aggregation behavior. However, it does not disclose date inclusivity, whether income is treated differently, category rollup behavior, or what the response contains.

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 front-loaded sentence with no redundant wording. It is concise, though the conciseness comes at the cost of omitting important usage and parameter details.

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?

Given four undocumented parameters, no annotations, and no output schema, the description is too thin to fully prepare an agent. An agent can infer the basic intent but cannot confidently know how accountId or includeIncome affect results, what date formats are expected, or what the return structure looks like.

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

Parameters2/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 mentions 'date range', which partially maps to startDate and endDate, but it provides no meaning for accountId or includeIncome, and no format or default information for any parameter.

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 states a specific action ('Get spending breakdown by category') and a clear resource and scope ('specified date range'). It does not explicitly differentiate from sibling tools like 'get-grouped-categories' or 'monthly-summary', so it is clear but not fully distinguishing.

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 gives no guidance on when to use this tool versus alternatives. It does not mention when to prefer 'get-grouped-categories' or 'monthly-summary', nor does it explain any exclusions or prerequisites.

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

spending-by-payeeB

Rank payees by how much money was spent with (or received from) each one. Returns JSON; amounts are integer cents.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitYesMaximum number of payees to list
endDateNoEnd date in YYYY-MM-DD format
accountIdNoRestrict the report to a single account
startDateNoStart date in YYYY-MM-DD format
includeIncomeYesReport income received instead of money spent

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden, and it does disclose the return format (JSON) and unit (integer cents), which is genuinely useful. However, it says nothing about permissions, sorting order, pagination, or how ties/defaults behave, leaving substantial gaps for a report tool.

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 tight sentences with zero filler, and the core purpose is front-loaded before the return-format note. Every clause earns its place.

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 5-parameter report tool with no output schema and no annotations, the description covers purpose and the amount unit but not the shape of the ranked output (fields per payee, ordering, tie-breaking). It is adequate but not complete given the absence of structured return documentation.

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 100%, so every parameter is already documented. The description adds only the income-direction nuance ('received from') and the cents unit, which are marginal additions over the schema - consistent with the baseline 3 when the schema does the heavy lifting.

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 gives a specific verb (rank) and resource (payees) plus the metric (money spent/received), which clearly separates it from get-payees (list) and spending-by-category (grouped differently). It does not name any sibling explicitly, so it falls short of full differentiation.

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?

There is no statement of when to use this tool versus alternatives such as spending-by-category or get-payees, and no prerequisites or exclusions are mentioned. Usage can only be inferred from the resource name.

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. 1 tool updatev1.14.0
    • Changedbalance-history6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / accountId / minLength
        Added value: +1
      • addedInput schema / properties / months / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / months / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / months / type
        Previous value: -"number"New value: +"integer"
      • removedInput schema / required
        Removed value: -[
        -  "accountId",
        -  "includeOffBudget",
        -  "months"
        -]
  2. 7 tool updatesv1.13.0
    • Addedbudget-vs-actual
    • Addedcash-flow
    • Addedcategory-trends
    • Addedget-custom-reports
    • Addedget-dashboards
    • Addednet-worth
    • Addedspending-by-payee
  3. 10 tool updatesv1.12.1
    • First observedbalance-history
    • First observedget-accounts
    • First observedget-budget-month
    • First observedget-budget-months
    • First observedget-grouped-categories
    • First observedget-payees
    • First observedget-rules
    • First observedget-transactions
    • First observedmonthly-summary
    • First observedspending-by-category

TDQS

B3.2/5.0

Scored across 17 tools

Disambiguation3/5

Several reporting tools overlap in purpose: spending-by-category, category-trends, budget-vs-actual, monthly-summary, and cash-flow all present spending or income data over time, which could cause an agent to select the wrong one. The get-* list tools are clearly distinct, but the analytics tools have fuzzy boundaries.

Naming Consistency3/5

The tool names mix two conventions: get-prefixed verbs (get-accounts, get-transactions) and descriptive hyphenated noun phrases (balance-history, net-worth, cash-flow). While all names are lowercase with hyphens and still readable, the lack of a single consistent verb_noun or noun-only pattern lowers the score.

Tool Count4/5

With 17 tools, the server is on the heavier side but still reasonable for a budgeting application covering accounts, transactions, categories, payees, reports, and analytics. The count feels slightly over the ideal, but most tools have a legitimate purpose.

Completeness4/5

The tool surface covers the main read-only aspects of a budgeting app: accounts, transactions, categories, payees, rules, reports, dashboards, and monthly budgets. Missing write operations (e.g., create transaction, update budget) and some detail views are notable gaps, but for a reporting/analytics focus the scope is largely complete.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for interacting with YNAB (You Need A Budget). Provides tools for accessing budget data through MCP-enabled clients like Claude Desktop.
    4
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    MCP server that bridges Claude to Monarch Money for personal-finance analysis and lightweight edits.
    18
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.
    1,446 npm
    55
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    An MCP server that connects Actual Budget to Claude, enabling users to manage budgets, transactions, and spending insights through natural language.
    37
    100 npm
    6
    MIT