Skip to main content
Glama
Saikumarmohan

actual-budget-mcp

Actual Budget MCP Server

An MCP server for Actual Budget built with FastMCP and actualpy.

Requirements

  • Python 3.11+

  • uv

  • A running Actual Budget server

Related MCP server: actual-mcp-server

Setup

git clone https://github.com/Saikumarmohan/actual-budget-mcp
cd actual-budget-mcp
uv sync

Configuration

All configuration is done via environment variables. Pass them via your MCP client config.

Variable

Required

Default

Description

ACTUAL_BASE_URL

-

URL of your Actual Budget server

ACTUAL_PASSWORD

-

Actual Budget server password

ACTUAL_FILE

-

Budget file name or sync id

ACTUAL_CURRENCY

USD

Currency code e.g. INR, EUR

ACTUAL_CURRENCY_SYMBOL

$

Currency symbol e.g. ,

ACTUAL_TIMEZONE

UTC

Timezone e.g. Asia/Kolkata, America/New_York

ACTUAL_MCP_TRANSPORT

stdio

Transport mode — stdio for Cline/Cursor, http for Docker

ACTUAL_MCP_HOST

0.0.0.0

Host to bind to in HTTP mode

ACTUAL_MCP_PORT

8000

Port to bind to in HTTP mode

MCP Client Config (Cline / Cursor)

Replace /path/to/actualbudgetpy with the absolute path to this project on your machine.

{
  "mcpServers": {
    "actualbudget": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/actualbudgetpy",
        "-m",
        "actualbudgetpy.server"
      ],
      "env": {
        "ACTUAL_BASE_URL": "http://localhost:5006",
        "ACTUAL_PASSWORD": "your_password",
        "ACTUAL_FILE": "your_file_id_or_name",
        "ACTUAL_CURRENCY": "USD",
        "ACTUAL_CURRENCY_SYMBOL": "$",
        "ACTUAL_TIMEZONE": "UTC"
      }
    }
  }
}

Note: On Windows, use the full path to uv.exe instead of just uv e.g. C:\\Users\\username\\.local\\bin\\uv.exe

HTTP Mode (Local)

For running as a standalone HTTP server locally:

  1. Copy .env.example to .env and fill in your values:

cp .env.example .env
  1. Set transport to http in your .env:

ACTUAL_MCP_TRANSPORT=http
  1. Start the server:

uv run -m actualbudgetpy.server
  1. Point your MCP client to http://localhost:8000/mcp:

{
  "mcpServers": {
    "actualbudget": {
      "type": "streamable-http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

Docker

# build
docker build -t actualbudgetpy .

# run
docker run -p 8000:8000 \
  -e ACTUAL_BASE_URL=http://your-server:5006 \
  -e ACTUAL_PASSWORD=your_password \
  -e ACTUAL_FILE=your_file_id \
  -e ACTUAL_CURRENCY=USD \
  -e ACTUAL_CURRENCY_SYMBOL=$ \
  -e ACTUAL_TIMEZONE=UTC \
  actualbudgetpy

Then point your MCP client to http://localhost:8000/mcp.

Available Tools

Read

Tool

Description

list_accounts

List all accounts

list_payees

List all payees

list_transactions

List transactions with optional filters — date, account, category, payee, notes

list_categories

List all categories, filterable by income or expense

list_category_groups

List all category groups

list_budgets

List budget allocations by month

Write

Tool

Description

add_transaction

Create a new transaction

update_transaction

Update an existing transaction

delete_transaction

Delete a transaction by id

create_transfer

Transfer money between two accounts

set_budget

Set budget amount for a category in a month

Resources

Resources are read-only data the AI can attach as context at the start of a conversation.

Resource

Description

budget://accounts

Live list of all accounts

budget://categories

Live list of all categories

Prompts

Reusable prompt templates that guide the AI through common workflows.

Prompt

Parameters

Description

monthly_review

month (YYYY-MM)

Full budget vs spending analysis for a month

spending_by_category

category, start_date, end_date

Spending breakdown for a specific category

add_expense

description

Natural language guided expense entry

Author

Built by Saikumar — feel free to connect!

If you find this useful, consider giving it a ⭐ on GitHub.

Available Tools

11 tools
add_transactionA

Create a new transaction in Actual Budget. date must be in YYYY-MM-DD format. amount is in dollars — use negative for expenses, positive for income. Use list_accounts for account names, list_payees for payee names, list_categories for category names. Returns the created transaction id and details.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesTransaction date in YYYY-MM-DD format
notesNoOptional notes for the transaction
payeeNoPayee name. Use list_payees to get names
amountYesAmount in dollars. Negative for expenses, positive for income
accountYesAccount name or id. Use list_accounts to get names
clearedNoWhether the transaction is cleared
categoryNoCategory name. Use list_categories to get names

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only include readOnlyHint=false, so the description must carry some behavioral weight. It discloses the return value ('Returns the created transaction id and details') and mentions format constraints. It does not discuss permissions or undoability, but for a simple create operation this is adequate.

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 five short, purposeful sentences. It is front-loaded with the primary purpose, then provides essential format conventions, helper tool references, and return behavior. No extraneous words or repetition.

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

Completeness4/5

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

Given the tool's 7 parameters, full schema descriptions, and an output schema, the description covers the key contextual needs: date format, amount sign, how to obtain enum-like values, and return content. It could mention cleared or transfers, but those are optional and not essential for basic use.

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

Parameters3/5

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

The input schema has 100% coverage, with all seven parameters described. The description largely repeats schema information (date format, amount sign, use list_* calls) without adding new parameter-level meaning, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Create a new transaction in Actual Budget' with a clear verb and resource. It distinguishes this from sibling tools like update_transaction, delete_transaction, and create_transfer by focusing on creation of a standard transaction.

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 provides explicit guidance on using list_accounts, list_payees, and list_categories to obtain valid names, and explains the amount sign convention. However, it does not explicitly state when to avoid this tool, such as using create_transfer for transfers, so the alternative guidance is incomplete.

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

create_transferA

Transfer money between two accounts in Actual Budget. amount must be positive — direction is determined by from_account and to_account. Use list_accounts to get account names. Returns both the debit and credit transaction details.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesTransfer date in YYYY-MM-DD format
notesNoOptional notes for the transfer
amountYesAmount to transfer in dollars, must be positive
to_accountYesDestination account name or id. Use list_accounts to get names
from_accountYesSource account name or id. Use list_accounts to get names

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds useful constraints: 'amount must be positive' and that direction is determined by from_account/to_account. It also notes the return of both debit and credit transaction details, which is actual behavior beyond the minimal readOnlyHint:false annotation. It does not mention side effects like the creation of two ledger entries explicitly, but implies it.

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?

Three concise sentences, front-loaded with the core purpose, then constraints and prerequisites. Every sentence adds value without redundancy or fluff.

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

Completeness5/5

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

With an output schema present and full parameter schema coverage, the description completes the picture by adding domain-specific constraints and cross-referencing the list_accounts tool. Given the tool's moderate complexity, this is highly 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?

Schema coverage is 100%, so each parameter is already documented. The description adds extra meaning by explaining how amount positivity and directionality work, which goes beyond the individual parameter descriptions. It also reinforces the use of list_accounts for account name resolution.

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 and resource: 'Transfer money between two accounts in Actual Budget.' It clearly distinguishes from siblings like add_transaction and update_transaction by focusing on transfers, and it explains the directional semantics of from/to accounts.

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 explicitly instructs to 'Use list_accounts to get account names,' which is a clear prerequisite. It conveys when to use the tool (for transfers) but does not explicitly exclude it for non-transfer transactions, leaving a small gap in alternative guidance.

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

delete_transactionA
Destructive

Delete a transaction from Actual Budget by id. This is destructive and cannot be undone. Use list_transactions to get transaction ids. Returns the id of the deleted transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYesTransaction id to delete. Use list_transactions to get ids

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, but the description adds that the operation 'cannot be undone' and states the return value (deleted transaction ID). This provides useful context beyond the structured data without contradicting it.

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?

Four short sentences, each serving a purpose: the action, the warning, the prerequisite, and the return value. No filler or redundancy.

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

Completeness5/5

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

For a single-parameter tool with full schema coverage, annotations, and an output schema, the description fully covers what the tool does, its destructive nature, how to get the ID, and what it returns. No gaps.

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

Parameters3/5

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

The schema covers 100% of the parameter with a description that already says to use list_transactions. The description restates this, adding no new meaning beyond what the schema provides.

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 'Delete' and a clear resource 'transaction from Actual Budget by id.' It distinguishes the tool from siblings like update_transaction and add_transaction by focusing on deletion by ID and noting irreversibility.

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 explicitly instructs to use list_transactions to get transaction IDs, which is a clear prerequisite. It does not explicitly mention when not to use it (e.g., for updates), but the destructive warning and ID requirement imply the right context.

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

list_accountsA

List all accounts from Actual Budget. Returns each account's id, name, whether it is off-budget, and whether it is closed. Use this to get account ids needed for filtering transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 burden of indicating that this is a read-only operation. The verb 'List' implies no side effects, and the description discloses that it returns all accounts including closed and off-budget status. However, it does not explicitly state any authentication requirements or potential errors, so it is adequate but not exhaustive.

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 three short sentences, front-loaded with the primary action, and each sentence adds value: what it does, what it returns, and when to use it. No wasted words.

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

Completeness5/5

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

For a simple read-only list tool with zero parameters and an output schema, the description covers the essential aspects: scope, returned fields, and a practical use case. It is complete enough for an agent to select and invoke correctly.

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

Parameters4/5

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

The tool has no parameters, so the description does not need to explain parameter semantics. The schema coverage is trivially 100%, and the baseline for zero-parameter tools is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('List') and resource ('accounts'), and distinguishes it from sibling list tools by naming the resource. It also specifies the returned fields ('id, name, off-budget, closed'), making its purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides a clear use case: 'Use this to get account ids needed for filtering transactions.' It does not explicitly mention when not to use it or name alternative tools, but the guidance is specific and the context from sibling tools makes the intended usage clear.

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

list_budgetsA

List budget allocations from Actual Budget. month must be in YYYY-MM-DD format (e.g. 2024-01-01 for January 2024). If month is not provided, returns budgets for all months. Returns category name, budgeted amount, and month. Use list_categories to get category names.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth to filter by in YYYY-MM-DD format e.g. 2024-01-01 for January 2024. If not provided returns all months

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses month format requirements, default behavior, and return fields, which are essential behavioral facts. However, it does not explicitly state read-only nature or any side effects, but 'list' strongly implies a safe read operation.

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 composed of five short sentences, each serving a purpose: main function, format, default, return fields, and related tool. It is front-loaded and not overly verbose, though the format example is redundant with the schema.

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

Completeness5/5

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

Given the simple tool with one optional parameter and full schema coverage, the description covers all essential aspects: purpose, parameter format, default, return fields, and a related tool. It is complete for an agent to use correctly without further context.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents the month parameter with the same format and default details. The description repeats this information without adding new parameter semantics, such as edge cases or validation rules.

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 lists budget allocations from Actual Budget, using a specific verb and resource. It is distinguishable from sibling tools by naming the resource, but does not explicitly contrast with alternatives.

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 explains the optional month parameter and default behavior ('If month is not provided, returns budgets for all months'), giving clear context. It also directs to 'Use list_categories to get category names', but does not fully discuss when to use this tool vs. others.

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

list_categoriesA

List all budget categories from Actual Budget. Optionally filter by is_income=True for income categories or is_income=False for expense categories. Returns category id, name, group name, and whether it is an income category. Use category names when filtering transactions by category.

ParametersJSON Schema
NameRequiredDescriptionDefault
is_incomeNoTrue for income categories, False for expense categories, None for all

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral transparency burden. It explicitly discloses the return fields (category id, name, group name, income flag) and the filtering behavior. It does not state whether it is read-only, but the verb 'list' strongly implies a safe read operation, so this is adequate.

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 concise, with four sentences each earning their place: purpose, filtering, return fields, and a practical usage tip. It is front-loaded and avoids redundancy.

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

Completeness5/5

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

For a simple list tool with one optional parameter and an output schema, the description fully covers the purpose, filtering, return fields, and downstream usage. It is contextually complete despite lacking annotations.

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% for the single parameter is_income. The description repeats the parameter's meaning (True for income, False for expense) without adding new semantic details beyond the schema, so the baseline of 3 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 clearly states 'List all budget categories from Actual Budget' with a specific verb and resource, and the optional filtering on is_income distinguishes it from sibling tools. It is unambiguous and action-oriented.

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 provides clear context for when to use the filter (income vs expense) and implies usage for transaction category filtering. It does not explicitly name alternatives or exclusions, but the context is sufficiently clear for a list tool.

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

list_category_groupsA

List all category groups from Actual Budget. Returns group id, name, and whether it is an income group. Use this to understand how categories are organised.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the responsibility of disclosing behavior. It explicitly says 'List' (implying read-only) and enumerates the return data, which gives the agent a clear behavioral model. It does not mention side effects, but for a list operation, the non-destructive nature is adequately implied.

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 three short sentences, each serving a distinct purpose: action, output, and usage context. It is appropriately sized, front-loaded with the main verb, and contains no extraneous information.

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

Completeness5/5

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

For a simple zero-parameter list tool with an output schema, the description covers all essential elements: what it lists, what it returns, and why it is useful. No missing context or ambiguity, even with sibling tools present.

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 baseline is 4. The description adds no parameter details because none exist, and the schema already reflects the empty parameter list. No further compensation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List all category groups from Actual Budget' with a specific verb and resource, and further distinguishes it from sibling tools like list_categories by focusing on groups rather than categories. It also specifies the return fields (id, name, income group), making the purpose explicit and unambiguous.

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 provides clear usage context with 'Use this to understand how categories are organised,' indicating when this tool is appropriate. It does not explicitly exclude alternatives or name siblings, but the context is sufficient for an agent to infer when to choose this over category-listing tools.

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

list_payeesA

List all payees from Actual Budget. Returns each payee's id and name. Use payee names when filtering transactions by payee.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden. It discloses behavior: lists ALL payees, and returns each payee's id and name. It implies a read-only operation. It does not discuss ordering or edge cases, but for a zero-parameter list tool this is adequate.

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?

Three short sentences: first states the action, second states the output fields, third gives practical usage. Every sentence earns its place with zero filler.

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

Completeness5/5

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

With zero parameters and an output schema present, the description is complete for a simple enumeration tool. It specifies the source, scope ('all'), return contents, and a concrete use case, leaving no critical gaps.

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?

There are zero parameters and schema coverage is 100%, so the baseline is 4. The description adds no parameter detail, but none is needed.

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 'List' with an explicit resource 'payees from Actual Budget'. It clearly distinguishes from sibling list_accounts/list_categories by naming the exact entity, and adds scope ('all').

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 provides concrete usage guidance: 'Use payee names when filtering transactions by payee', implying this is the lookup tool for payee IDs/names. It lacks explicit exclusions or named alternatives, but the context is clear.

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

list_transactionsA

List transactions from Actual Budget with optional filters. Dates must be in YYYY-MM-DD format. account, category and payee accept names or ids. notes accepts a partial string to search within transaction notes. Returns date, account, payee, category, notes, and amount (in USD). Use list_accounts to get account names, list_categories for category names, list_payees for payee names.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoPartial string to search within transaction notes
payeeNoPayee name or id. Use list_payees to get names
accountNoAccount name or id. Use list_accounts to get names
categoryNoCategory name or id. Use list_categories to get names
end_dateNoEnd date in YYYY-MM-DD format
start_dateNoStart date in YYYY-MM-DD format

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no provided annotations, the description carries the full burden of behavioral disclosure. It discloses important behavioral constraints: date format (YYYY-MM-DD), acceptance of names or ids, partial string matching for notes, and return fields with currency (USD). It does not mention pagination or potential high-volume results, but for a list operation the core behaviors are well covered. The description compensates well for the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of four focused sentences, each contributing unique value: the primary action with filters, date format, flexible identifier handling, return fields, and references to helper tools. There is no redundant or filler content, and the main purpose is front-loaded. It is concise while remaining informative.

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

Completeness5/5

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

Given that all 6 parameters are optional and an output schema is present, the description provides a complete mental model: how to filter, what data comes back, and where to get filter values. The return fields are listed explicitly, and the sibling tools offer additional context. For a read-only list tool, the description adequately covers both usage and expectations without needing to detail every edge case.

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 already describes all parameters (100% coverage), establishing a baseline of 3. The description adds meaningful semantics beyond the schema by explaining that account, category, and payee accept either names or ids (the schema only explicitly mentions this for payee), and that notes is a partial search. It also cross-references the list_* tools, tying parameter usage to a practical workflow. This extra context justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('List transactions') and the resource ('from Actual Budget'), with optional filters. It distinguishes from sibling tools like list_accounts and add_transaction by specifying the returned entity type (transactions) and the context (Actual Budget). The scope is unambiguous.

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 provides practical guidance by directing users to list_accounts, list_categories, and list_payees to obtain valid names for filters. This implies when to use the tool (when you need transaction data with filtering) and how to prepopulate filters. It doesn't explicitly contrast with mutation tools (add/update/delete), but the 'list' verb makes the read-only intent clear. Overall, strong context but missing an explicit 'use this when' statement.

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

set_budgetA

Set the budget amount for a category in a given month in Actual Budget. month must be in YYYY-MM-DD format e.g. 2024-01-01 for January 2024. Use list_categories to get category names. Returns the updated budget details.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthYesMonth in YYYY-MM-DD format e.g. 2024-01-01 for January 2024
amountYesBudget amount in dollars
categoryYesCategory name or id. Use list_categories to get names

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

The annotation readOnlyHint: false already indicates a write operation. The description adds behavioral context by stating it 'Returns the updated budget details', which tells the agent what to expect. It also clarifies the month format and hints that categories should come from list_categories. There is no contradiction with annotations.

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 three sentences and front-loaded with the primary purpose. It is concise, but the second and third sentences largely repeat information already in the schema (month format, list_categories). Despite this redundancy, it remains appropriately sized and scannable.

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 3-parameter write operation, the description is complete: it states the action, specifies the month format, points to list_categories for valid categories, and mentions the return value. The presence of an output schema reduces the need to detail return fields. It lacks error handling or side-effect notes, but these are not critical for this straightforward mutation.

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

Parameters3/5

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

The input schema has 100% description coverage for all three parameters. The description repeats the month format and list_categories hint verbatim from the schema, adding no new meaning beyond what the schema already provides. Therefore, baseline 3 is appropriate; the description does not enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Set the budget amount for a category in a given month in Actual Budget.' The verb 'Set' and resource 'budget' are explicit, and this tool is distinct from sibling list/transaction tools. It also specifies the target (category, month, amount) which fully clarifies the scope.

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 provides clear context (when to use: for a given month and category) and a prerequisite (Use list_categories to get category names). It does not explicitly mention alternatives or when-not-to-use, but given the sibling tools are mostly list operations, this unique write operation is obviously the right choice for setting budgets. The month format requirement is also a useful guideline.

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

update_transactionA

Update an existing transaction in Actual Budget. Only provided fields will be updated, others remain unchanged. Use list_transactions to get transaction ids. Returns the updated transaction details.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoNew date in YYYY-MM-DD format
notesNoNew notes
payeeNoNew payee name
amountNoNew amount in dollars
clearedNoNew cleared status
categoryNoNew category name
transaction_idYesTransaction id to update. Use list_transactions to get ids

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotation readOnlyHint=false: it discloses the partial-update behavior ('Only provided fields will be updated, others remain unchanged') and states the return value. This is valuable for a mutation tool, though it doesn't cover permissions or error cases.

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?

Three tightly structured sentences: purpose, update semantics, and prerequisite/return. Every sentence adds essential information with no redundancy or fluff.

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

Completeness5/5

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

For a moderately complex tool with 7 parameters and an output schema, the description covers purpose, partial-update behavior, how to obtain IDs, and return value. With output schema present, this is sufficient.

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?

Schema coverage is 100%, with each parameter already described. The description enhances this by explaining the overarching update rule, which directly affects how all parameters behave (partial update). It also adds a critical hint for transaction_id to use list_transactions. This goes beyond the baseline.

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 the specific verb 'Update' with the resource 'transaction', clearly stating it targets an existing transaction in Actual Budget. This distinguishes it from siblings like add_transaction and delete_transaction by emphasizing 'existing'.

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?

It provides clear context by explaining that only provided fields are updated and directs users to list_transactions for obtaining IDs. However, it does not explicitly exclude alternatives or state when not to use this tool, though the 'existing' wording implies it's for updates rather than creation.

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. 11 tool updatesv0.1.0
    • First observedadd_transaction
    • First observedcreate_transfer
    • First observeddelete_transaction
    • First observedlist_accounts
    • First observedlist_budgets
    • First observedlist_categories
    • First observedlist_category_groups
    • First observedlist_payees
    • First observedlist_transactions
    • First observedset_budget
    • First observedupdate_transaction

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct entity or action: listing accounts, payees, transactions, categories, category groups, and budgets are clearly separated, while add/update/delete transaction, create_transfer, and set_budget each address a unique mutation. No two tools appear to overlap in purpose.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: list_* for retrieval, add/update/delete for transaction mutations, create_transfer for transfers, and set_budget for budget setting. The convention is uniform and predictable.

Tool Count5/5

With 11 tools, the server is well-scoped for interacting with Actual Budget. Each tool serves a clear purpose without redundancy, and the count is within the ideal 3-15 range for a domain-specific MCP server.

Completeness5/5

The tool surface covers the core lifecycle for transactions (list, add, update, delete, transfer) and budgets (list, set), plus all necessary reference listings (accounts, payees, categories, category groups). There are no obvious dead ends for typical budget management workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    MCP server for integrating Actual Budget with Claude and other LLM assistants.
    17
    193 npm
    230
    TypeScript
    MIT
  • 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.
    2,160 npm
    54
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Bridges AI/LLM applications to Actual Budget, exposing budget data as MCP tools for account listing, transactions, and budget balances.
    4
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that connects AI assistants to YNAB budgets, enabling natural language queries about finances backed by full API coverage and built-in YNAB methodology knowledge.
    1
    MIT