actual-budget-mcp
Provides tools for interacting with Actual Budget, enabling AI agents to manage accounts, payees, transactions, categories, budgets, and transfers.
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-budget-mcpShow my spending by category this 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
An MCP server for Actual Budget built with FastMCP and actualpy.
Requirements
Python 3.11+
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 syncConfiguration
All configuration is done via environment variables. Pass them via your MCP client config.
Variable | Required | Default | Description |
| ✅ | - | URL of your Actual Budget server |
| ✅ | - | Actual Budget server password |
| ✅ | - | Budget file name or sync id |
| ❌ |
| Currency code e.g. |
| ❌ |
| Currency symbol e.g. |
| ❌ |
| Timezone e.g. |
| ❌ |
| Transport mode — |
| ❌ |
| Host to bind to in HTTP mode |
| ❌ |
| 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.exeinstead of justuve.g.C:\\Users\\username\\.local\\bin\\uv.exe
HTTP Mode (Local)
For running as a standalone HTTP server locally:
Copy
.env.exampleto.envand fill in your values:
cp .env.example .envSet transport to
httpin your.env:
ACTUAL_MCP_TRANSPORT=httpStart the server:
uv run -m actualbudgetpy.serverPoint 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 \
actualbudgetpyThen point your MCP client to http://localhost:8000/mcp.
Available Tools
Read
Tool | Description |
| List all accounts |
| List all payees |
| List transactions with optional filters — date, account, category, payee, notes |
| List all categories, filterable by income or expense |
| List all category groups |
| List budget allocations by month |
Write
Tool | Description |
| Create a new transaction |
| Update an existing transaction |
| Delete a transaction by id |
| Transfer money between two accounts |
| 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 |
| Live list of all accounts |
| Live list of all categories |
Prompts
Reusable prompt templates that guide the AI through common workflows.
Prompt | Parameters | Description |
|
| Full budget vs spending analysis for a month |
|
| Spending breakdown for a specific category |
|
| 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 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transaction date in YYYY-MM-DD format | |
| notes | No | Optional notes for the transaction | |
| payee | No | Payee name. Use list_payees to get names | |
| amount | Yes | Amount in dollars. Negative for expenses, positive for income | |
| account | Yes | Account name or id. Use list_accounts to get names | |
| cleared | No | Whether the transaction is cleared | |
| category | No | Category name. Use list_categories to get names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transfer date in YYYY-MM-DD format | |
| notes | No | Optional notes for the transfer | |
| amount | Yes | Amount to transfer in dollars, must be positive | |
| to_account | Yes | Destination account name or id. Use list_accounts to get names | |
| from_account | Yes | Source account name or id. Use list_accounts to get names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_transactionADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_id | Yes | Transaction id to delete. Use list_transactions to get ids |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month to filter by in YYYY-MM-DD format e.g. 2024-01-01 for January 2024. If not provided returns all months |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| is_income | No | True for income categories, False for expense categories, None for all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Partial string to search within transaction notes | |
| payee | No | Payee name or id. Use list_payees to get names | |
| account | No | Account name or id. Use list_accounts to get names | |
| category | No | Category name or id. Use list_categories to get names | |
| end_date | No | End date in YYYY-MM-DD format | |
| start_date | No | Start date in YYYY-MM-DD format |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in YYYY-MM-DD format e.g. 2024-01-01 for January 2024 | |
| amount | Yes | Budget amount in dollars | |
| category | Yes | Category name or id. Use list_categories to get names |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | New date in YYYY-MM-DD format | |
| notes | No | New notes | |
| payee | No | New payee name | |
| amount | No | New amount in dollars | |
| cleared | No | New cleared status | |
| category | No | New category name | |
| transaction_id | Yes | Transaction id to update. Use list_transactions to get ids |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
v0.1.0- First observed
add_transaction - First observed
create_transfer - First observed
delete_transaction - First observed
list_accounts - First observed
list_budgets - First observed
list_categories - First observed
list_category_groups - First observed
list_payees - First observed
list_transactions - First observed
set_budget - First observed
update_transaction
TDQS
Scored across 11 tools
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.
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.
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.
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
Related MCP Connectors
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
MCP server for building and testing AI agents with multi-model experimentation and insights.
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
Related MCP Servers
- AlicenseBqualityBmaintenanceMCP server for integrating Actual Budget with Claude and other LLM assistants.17193 npm230TypeScriptMIT
- AlicenseNot gradedqualityAmaintenanceMCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.2,160 npm54MIT
- FlicenseAqualityDmaintenanceBridges AI/LLM applications to Actual Budget, exposing budget data as MCP tools for account listing, transactions, and budget balances.4-
- AlicenseNot gradedqualityCmaintenanceAn 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.1MIT