actual-mcp
This server lets you interact with Actual Budget data through MCP: read accounts/transactions, run financial reports, and manage budget entities.
Accounts & transactions: list accounts, fetch/filter transactions, create/update transactions, view balance history.
Reporting & analytics: spending by category/payee, monthly summary, budget vs actual, net worth, category trends, cash flow.
Budgets: list budget months, retrieve detailed per-category budget data for a month.
Custom reports & dashboards: list/create/update/delete reports; manage dashboard pages and widgets (add/update/remove/organize).
Categories & payees: list/create/update/delete category groups, categories, and payees.
Rules: list/create/update/delete transaction rules.
Prompts: built-in financial-insights and budget-review prompts.
Access modes: stdio or streamable HTTP (SSE), optional auth via bearer token, and write tools can be enabled with
--enable-write.
Enables access to personal financial data from Actual Budget, including accounts, transactions, and financial metrics. Provides tools for retrieving filtered transactions, generating spending breakdowns by category, viewing monthly summaries, and analyzing budget performance.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@actual-mcpshow me my spending by category for last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 payeecreate-transaction- Create a new transaction in an account with optional category, payee, and notesupdate-transaction- Update an existing transaction with new category, payee, notes, or amountget-accounts- Retrieve a list of all accounts with their current balance and IDbalance-history- View account balance changes over time
Reporting & Analytics
spending-by-category- Generate spending breakdowns categorized by typemonthly-summary- Get monthly income, expenses, and savings metricsbudget-vs-actual- Compare budgeted amounts against actual spending per categorynet-worth- Track assets, liabilities, and net worth across all accounts over timecategory-trends- See how spending in each category moves month over month, with trend directionspending-by-payee- Rank payees by how much was spent with (or received from) each onecash-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
amountsInfield describing the sign conventions it uses.
Custom Reports & Dashboards
get-custom-reports- Retrieve every saved custom report from the Reports sectioncreate-custom-report- Create a saved custom reportupdate-custom-report- Update fields on a saved custom report, leaving the rest unchangeddelete-custom-report- Delete a saved custom reportget-dashboards- Retrieve every dashboard page and the widgets laid out on itadd-dashboard-widget- Add a widget to a dashboard pageupdate-dashboard-widget- Update a widget's configuration, position, or sizeremove-dashboard-widget- Remove a widget from its pageorganize-dashboard- Reposition and resize several widgets at oncecreate-dashboard-page/rename-dashboard-page/delete-dashboard-page- Manage dashboard pages
Categories
get-grouped-categories- Retrieve a list of all category groups with their categoriescreate-category- Create a new category within a category groupupdate-category- Update an existing category's name or groupdelete-category- Delete a categorycreate-category-group- Create a new category groupupdate-category-group- Update a category group's namedelete-category-group- Delete a category group
Payees
get-payees- Retrieve a list of all payees with their detailscreate-payee- Create a new payeeupdate-payee- Update an existing payee's detailsdelete-payee- Delete a payee
Rules
get-rules- Retrieve a list of all transaction rulescreate-rule- Create a new transaction rule with conditions and actionsupdate-rule- Update an existing transaction ruledelete-rule- Delete a transaction rule
Prompts
financial-insights- Generate insights and recommendations based on your financial databudget-review- Analyze your budget compliance and suggest adjustments
Installation
Prerequisites
Node.js (v16 or higher)
Actual Budget installed and configured
Claude Desktop or another MCP-compatible client
Docker Desktop (optional)
Remote access
Pull the latest docker image:
docker pull sstefanov/actual-mcp:latestLocal setup
Clone the repository:
git clone https://github.com/s-stefanov/actual-mcp.git
cd actual-mcpInstall dependencies:
npm installBuild the server:
npm run buildBuild the local docker image (optional):
docker build -t <local-image-name> .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.jsonOn Windows:
code %APPDATA%\Claude\claude_desktop_config.jsonAdd 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_DIRis optional if you're usingACTUAL_SERVER_URL.
💡 Use
--enable-writeto 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 watchTesting the connection to Actual
To verify the server can connect to your Actual Budget data:
node build/index.js --test-resourcesDebugging
Since MCP servers communicate over stdio, debugging can be challenging. You can use the MCP Inspector:
npx @modelcontextprotocol/inspector node build/index.jsE2E 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:e2eDocker must be installed and running; the test suite pulls and starts the Actual server image automatically.
Project Structure
index.ts- Main server implementationtypes.ts- Type definitions for API responses and parametersprompts.ts- Prompt templates for LLM interactionsutils.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 toolsbalance-historyC
Get account balance history over time
| Name | Required | Description | Default |
|---|---|---|---|
| months | No | ||
| accountId | No | ||
| includeOffBudget | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | Number of most recent months to report on | |
| includeHidden | Yes | Include categories and groups marked hidden | |
| categoryGroupName | No | Restrict the report to a single category group, by name |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | Number of most recent months to report on | |
| interval | Yes | Bucket size for each row of the report | monthly |
| accountId | No | Restrict the report to a single account |
TDQS
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.
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.
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.
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.
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.
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.
category-trendsB
Show how spending in each category changes month over month, with trend direction. Returns JSON; amounts are integer cents.
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | Number of most recent months to report on | |
| categoryNames | No | Restrict the report to these categories, by name | |
| includeIncome | Yes | Include income categories | |
| categoryGroupName | No | Restrict the report to a single category group, by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full behavioral burden. It discloses the return format (JSON) and currency unit (integer cents), which is helpful, but says nothing about required auth, scope limitations, whether it's a read-only aggregation, or how trend direction is computed (e.g., percentage vs absolute).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core analysis then the return-format note. Zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description carries full burden but only covers purpose and return format. It omits auth/scope constraints, pagination-like limits, and how trend direction is derived, leaving the agent under-informed about behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all four parameters; the description adds no parameter-level meaning beyond what the schema provides. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific analysis: month-over-month category spending change with trend direction. Distinct from sibling spending-by-category (single period) and monthly-summary. Does not explicitly name or contrast siblings, keeping it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage via the MoM trend framing, which hints when it's useful versus a flat category report, but provides no explicit when-to-use or when-not guidance, nor names alternatives like spending-by-category.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in YYYY-MM format (e.g. "2025-01") |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| endDate | No | ||
| accountId | Yes | ||
| maxAmount | No | ||
| minAmount | No | ||
| payeeName | No | ||
| startDate | No | ||
| categoryName | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | ||
| accountId | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | Number of most recent months to report on | |
| includeClosed | Yes | Include closed accounts | |
| includeOffBudget | Yes | Include off-budget accounts. Defaults to true, since net worth normally covers every account. |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ||
| accountId | No | ||
| startDate | No | ||
| includeIncome | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | Maximum number of payees to list | |
| endDate | No | End date in YYYY-MM-DD format | |
| accountId | No | Restrict the report to a single account | |
| startDate | No | Start date in YYYY-MM-DD format | |
| includeIncome | Yes | Report income received instead of money spent |
TDQS
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.
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.
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.
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.
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.
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 tool update
v1.14.0- Changed
balance-history6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / accountId / minLengthAdded value: +1 - added
Input schema / properties / months / exclusiveMinimumAdded value: +0 - added
Input schema / properties / months / maximumAdded value: +9007199254740991 - changed
Input schema / properties / months / typePrevious value: -"number"New value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "accountId", - "includeOffBudget", - "months" -]
7 tool updates
v1.13.0- Added
budget-vs-actual - Added
cash-flow - Added
category-trends - Added
get-custom-reports - Added
get-dashboards - Added
net-worth - Added
spending-by-payee
10 tool updates
v1.12.1- First observed
balance-history - First observed
get-accounts - First observed
get-budget-month - First observed
get-budget-months - First observed
get-grouped-categories - First observed
get-payees - First observed
get-rules - First observed
get-transactions - First observed
monthly-summary - First observed
spending-by-category
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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.4MIT
- FlicenseBqualityDmaintenanceMCP server that bridges Claude to Monarch Money for personal-finance analysis and lightweight edits.18-
- AlicenseNot gradedqualityAmaintenanceMCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.1,446 npm55MIT
- AlicenseBqualityAmaintenanceAn MCP server that connects Actual Budget to Claude, enabling users to manage budgets, transactions, and spending insights through natural language.37100 npm6MIT