actual-mcp
Enables access to personal financial data from Actual Budget, including accounts, transactions, and financial metrics. Provides tools for retrieving filtered transactions, generating spending breakdowns by category, viewing monthly summaries, and analyzing budget performance.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@actual-mcpshow me my spending by category for last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Actual Budget MCP Server
MCP server for integrating Actual Budget with Claude and other LLM assistants.
Overview
The Actual Budget MCP Server allows you to interact with your personal financial data from Actual Budget using natural language through LLMs. It exposes your accounts, transactions, and financial metrics through the Model Context Protocol (MCP).
Related MCP server: monarch-mcp
Features
Resources
Account Listings - Browse all your accounts with their balances
Account Details - View detailed information about specific accounts
Transaction History - Access transaction data with complete details
Tools
Transaction & Account Management
get-transactions- Retrieve and filter transactions by account, date, amount, category, or payeecreate-transaction- Create a new transaction in an account with optional category, payee, and notesupdate-transaction- Update an existing transaction with new category, payee, notes, or amountget-accounts- Retrieve a list of all accounts with their current balance and IDbalance-history- View account balance changes over time
Reporting & Analytics
spending-by-category- Generate spending breakdowns categorized by typemonthly-summary- Get monthly income, expenses, and savings metrics
Categories
get-grouped-categories- Retrieve a list of all category groups with their categoriescreate-category- Create a new category within a category groupupdate-category- Update an existing category's name or groupdelete-category- Delete a categorycreate-category-group- Create a new category groupupdate-category-group- Update a category group's namedelete-category-group- Delete a category group
Payees
get-payees- Retrieve a list of all payees with their detailscreate-payee- Create a new payeeupdate-payee- Update an existing payee's detailsdelete-payee- Delete a payee
Rules
get-rules- Retrieve a list of all transaction rulescreate-rule- Create a new transaction rule with conditions and actionsupdate-rule- Update an existing transaction ruledelete-rule- Delete a transaction rule
Prompts
financial-insights- Generate insights and recommendations based on your financial databudget-review- Analyze your budget compliance and suggest adjustments
Installation
Prerequisites
Node.js (v16 or higher)
Actual Budget installed and configured
Claude Desktop or another MCP-compatible client
Docker Desktop (optional)
Remote access
Pull the latest docker image:
docker pull sstefanov/actual-mcp:latestLocal setup
Clone the repository:
git clone https://github.com/s-stefanov/actual-mcp.git
cd actual-mcpInstall dependencies:
npm installBuild the server:
npm run buildBuild the local docker image (optional):
docker build -t <local-image-name> .Configure environment variables (optional):
# Path to your Actual Budget data directory (default: ~/.actual)
export ACTUAL_DATA_DIR="/path/to/your/actual/data"
# If using a remote Actual server
export ACTUAL_SERVER_URL="https://your-actual-server.com"
export ACTUAL_PASSWORD="your-password"
# Specific budget to use (optional)
export ACTUAL_BUDGET_SYNC_ID="your-budget-id"
# How long downloaded data stays fresh before the server re-syncs, in ms
# (default: 60000). Use 0 to sync before every call, or -1 to never sync.
export ACTUAL_SYNC_TTL_MS="60000"Optional: separate encryption budget password
If your Actual setup requires a different password to unlock the local/encrypted budget data than the server authentication password, you can set ACTUAL_BUDGET_ENCRYPTION_PASSWORD in addition to ACTUAL_PASSWORD.
# If server auth and encryption/unlock use different passwords
export ACTUAL_BUDGET_ENCRYPTION_PASSWORD="your-encryption-password"Usage with Claude Desktop
To use this server with Claude Desktop, add it to your Claude configuration:
On MacOS:
code ~/Library/Application\ Support/Claude/claude_desktop_config.jsonOn Windows:
code %APPDATA%\Claude\claude_desktop_config.jsonAdd the following to your configuration...
a. Using Node.js (npx version):
{
"mcpServers": {
"actualBudget": {
"command": "npx",
"args": ["-y", "actual-mcp", "--enable-write"],
"env": {
"ACTUAL_DATA_DIR": "path/to/your/data",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_SERVER_URL": "http://your-actual-server.com",
"ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
}
}
}
}
### a. Using Node.js (local only):
```json
{
"mcpServers": {
"actualBudget": {
"command": "node",
"args": ["/path/to/your/clone/build/index.js", "--enable-write"],
"env": {
"ACTUAL_DATA_DIR": "path/to/your/data",
"ACTUAL_PASSWORD": "your-password",
"ACTUAL_SERVER_URL": "http://your-actual-server.com",
"ACTUAL_BUDGET_SYNC_ID": "your-budget-id"
}
}
}
}b. Using Docker (local or remote images):
{
"mcpServers": {
"actualBudget": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/your/data:/data",
"-e",
"ACTUAL_PASSWORD=your-password",
"-e",
"ACTUAL_SERVER_URL=https://your-actual-server.com",
"-e",
"ACTUAL_BUDGET_SYNC_ID=your-budget-id",
"sstefanov/actual-mcp:latest",
"--enable-write"
]
}
}
}After saving the configuration, restart Claude Desktop.
๐ก
ACTUAL_DATA_DIRis optional if you're usingACTUAL_SERVER_URL.
๐ก Use
--enable-writeto enable write-access tools.
Running an SSE Server
To expose the server over a port using Docker:
docker run -i --rm \
-p 3000:3000 \
-v "/path/to/your/data:/data" \
-e ACTUAL_PASSWORD="your-password" \
-e ACTUAL_SERVER_URL="http://your-actual-server.com" \
-e ACTUAL_BUDGET_SYNC_ID="your-budget-id" \
-e BEARER_TOKEN="your-bearer-token" \
sstefanov/actual-mcp:latest \
--sse --enable-write --enable-bearerโ ๏ธ Important: When using --enable-bearer, the BEARER_TOKEN environment variable must be set.
๐ This is highly recommended if you're exposing your server via a public URL.
Example Queries
Once connected, you can ask Claude questions like:
"What's my current account balance?"
"Show me my spending by category last month"
"How much did I spend on groceries in January?"
"What's my savings rate over the past 3 months?"
"Analyze my budget and suggest areas to improve"
Usage with Codex CLI
Example Codex configuration:
In ~/.codex/config.toml:
[mcp_servers.actual-budget]
url = "http://localhost:3000"Point Codex at the same port you pass to npm start -- --sse --port <PORT>.
Development
For development with auto-rebuild:
npm run watchTesting the connection to Actual
To verify the server can connect to your Actual Budget data:
node build/index.js --test-resourcesDebugging
Since MCP servers communicate over stdio, debugging can be challenging. You can use the MCP Inspector:
npx @modelcontextprotocol/inspector node build/index.jsProject Structure
index.ts- Main server implementationtypes.ts- Type definitions for API responses and parametersprompts.ts- Prompt templates for LLM interactionsutils.ts- Helper functions for date formatting and more
Fork Modifications
This fork includes the following changes from the upstream s-stefanov/actual-mcp:
@actual-app/apibumped from^26.3.0to^26.5.0โ updates the Actual Budget API client to the latest version for compatibility with newer Actual server releases.Balance cutoff fix โ
getAccountBalancecalls now pass a far-future cutoff date (2099-01-01) so that future-dated pending transactions are included in balance calculations. Without this fix, banks that pre-date pending transactions (showing them in the future) would cause reported balances to be lower than the actual cleared balance.
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Available Tools
10 toolsbalance-historyC
Get account balance history over time
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | ||
| accountId | Yes | ||
| includeOffBudget | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only says the tool gets balance history. It does not explain whether the result is a time series, aggregated points, or whether includeOffBudget changes what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no fluff or repetition. It is appropriately brief, though it achieves conciseness at the cost of useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and three required parameters, a one-line description is incomplete. It leaves the agent uncertain about the return format, how months are interpreted, and what includeOffBudget controls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no meaning for accountId, includeOffBudget, or months. The agent must infer their roles from names alone, and the description does not compensate for the missing parameter documentation.
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 clear operation on a specific resource: getting account balance history over time. It does not explicitly distinguish itself from siblings like get-transactions or monthly-summary, but the resource and temporal scope are reasonably identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. There is no mention of scenarios, exclusions, or why an agent should prefer balance-history over get-transactions or monthly-summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-accountsA
Retrieve a list of all accounts with their current balance and ID.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It clearly communicates a read-only retrieval operation and the returned content. It doesn't mention pagination, ordering, or exact response shape, but for a zero-parameter list tool the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the verb and resource, names the returned fields, and contains no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless retrieval tool, the description covers the essential information: what is returned and its scope ('all accounts'). The lack of output schema is partially compensated by naming balance and ID as the returned fields, though details like response envelope or ordering are not stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter documentation to rely on. The baseline for zero-parameter tools is 4, and the description appropriately focuses on what is returned rather than on parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Retrieve') and a precise resource ('a list of all accounts') with clear return fields ('current balance and ID'). This makes it immediately distinguishable from sibling tools that deal with transactions, categories, budgets, and payees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when all accounts with their current balance and ID are needed. It does not explicitly mention alternatives or exclusions, but the domain (accounts) is distinct enough from the siblings that routing is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-budget-monthA
Retrieve budget data for a specific month, including budgeted amounts, spending, and balances per category.
| Name | Required | Description | Default |
|---|---|---|---|
| month | Yes | Month in YYYY-MM format (e.g. "2025-01") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It uses 'Retrieve' to indicate a read operation and lists the data included. It does not mention response format, pagination, or authentication, but these are less critical for a simple month-scoped lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and every word adds value. 'Budgeted amounts, spending, and balances per category' is precise and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter, full schema coverage, and no output schema, the description adequately explains what is returned. It misses only a note on how this differs from overlapping siblings, which is covered by the usage dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter 'month' is already described with format and example. The description adds no extra parameter semantics beyond confirming the month scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves budget data for a specific month with category-level budgeted amounts, spending, and balances. It is specific about the resource and scope, though it does not explicitly differentiate from siblings like monthly-summary or get-budget-months.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description: to get monthly budget data per category. However, there is no guidance on when to choose this over similar siblings such as monthly-summary, spending-by-category, or get-budget-months.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-budget-monthsA
Retrieve a list of all available budget months in YYYY-MM format.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It conveys that the operation is a read-only retrieval and discloses the output format, but does not mention ordering, empty results, or how this differs from the singular get-budget-month tool. Adequate for a simple getter, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that directly states the action and the output format with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list retrieval tool, the description fully specifies what is returned and in what format. It could note the relationship to get-budget-month or clarify edge cases like empty lists, but the basic contract is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty with 100% coverage. The description's mention of YYYY-MM is output format rather than parameter semantics, which is appropriate. Baseline 4 applies for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('all available budget months'), and specifies the output format (YYYY-MM). It does not explicitly differentiate from the sibling get-budget-month, though the plural 'months' and 'list of all' imply a distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool should be used when a caller needs to enumerate available budget months, but it does not explicitly state when to use it versus alternatives like get-budget-month or monthly-summary. No exclusions or alternative routing are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-grouped-categoriesA
Retrieve a list of all category groups with their id, name, type and category list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Retrieve a list' clearly indicates a read-only operation, which is useful. However, it does not disclose ordering, filtering, pagination, permissions, or any potential limitations, leaving some behavioral gaps for a tool without annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is a single focused sentence that immediately states the action, target resource, and output contents. There is no redundant wording or filler, making it easy to parse and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-argument retrieval tool, the description covers the main need: what data will be returned. It names id, name, type, and category list. However, without an output schema, it does not clarify the structure of the 'category list' or whether results are sorted, so it falls just short of fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema fully documents this with 'This tool does not accept any arguments.' The description adds no parameter-specific detail, but none is needed; the baseline for a zero-parameter tool is appropriately high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') and identifies the exact resource ('all category groups') plus the returned fields. This clearly differentiates the tool from siblings like get-payees, get-accounts, and get-budget-months, leaving no ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when the caller needs category group metadata, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusion criteria. The resource name and contents make the intended use reasonably clear, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-payeesA
Retrieve a list of all payees with their id, name, categoryId and transferAccountId.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'Retrieve' clearly indicates a read-only operation and 'all payees' clarifies that results are unfiltered. However, because no annotations are provided, the description carries the full behavioral burden; it does not disclose result ordering, pagination, nullability of fields, or how errors are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence states the action, resource, scope, and returned fields with no filler. The key information is front-loaded and every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description is largely complete: it identifies the resource, scope, and exact return fields. Minor omissions such as sort order and response format prevent a perfect score, but they are unlikely to block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters and the input schema explicitly states 'This tool does not accept any arguments.' With 100% schema coverage, the description does not need to add parameter detail; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retrieve') with a concrete resource ('all payees') and enumerates the returned fields (id, name, categoryId, transferAccountId). The resource is unique among the sibling tools, so there is no ambiguity about what this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a complete payee list is needed, and no sibling tool is payee-specific, but it does not explicitly state when to prefer this over alternatives or any exclusion criteria. Usage context must be inferred from the tool name and resource rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-rulesA
Retrieve a list of all rules. PS amount comes in cents: positive for deposit, negative for payment
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It does this by stating the operation is a retrieval and by documenting a non-obvious output detail: amounts are in cents and signed as positive for deposits and negative for payments. It does not cover pagination, ordering, or output structure, but for a parameterless list tool these are acceptable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary purpose is front-loaded, and the second sentence adds essential unit and sign semantics that are directly relevant to interpreting the result.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument tool with no output schema, the description provides the essential purpose and one important output convention, but it leaves some ambiguity about what fields a rule contains and how the list is ordered. Still, an agent can confidently select and invoke the tool based on this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema declares zero parameters and explicitly states the tool accepts no arguments, so parameter-level documentation is unnecessary. With schema description coverage at 100% and no parameters to explain, the baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Retrieve a list of all rules.' This clearly identifies what the tool does and distinguishes it from siblings like get-transactions or get-payees by naming a unique resource. The additional amount convention reinforces that the tool has a defined output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool should be used when an agent needs all rules, but it does not explicitly state when to choose it over alternatives or mention any exclusions. The wording gives a clear purpose, but no direct comparison to sibling tools or conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-transactionsC
Get transactions for an account with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| endDate | No | ||
| accountId | Yes | ||
| maxAmount | No | ||
| minAmount | No | ||
| payeeName | No | ||
| startDate | No | ||
| categoryName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. 'Get' implies a read operation, but the description omits pagination, sorting, date formats, amount semantics, and any caveats about response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler, and the core operation is front-loaded. However, it is slightly under-specified for a tool with 8 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations, output schema, and parameter descriptions, this one-liner is insufficient for an agent to use the tool reliably. An agent could make a basic call with accountId, but the filtering parameters and their formats remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 8 parameters. It only maps 'account' to accountId and broadly signals that other parameters are optional filters; it does not explain limit, date ranges, amount bounds, payeeName, or categoryName.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('transactions for an account'), making the core purpose clear. It is distinct from sibling tools like monthly-summary or spending-by-category, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over the sibling aggregation tools, nor any mention of prerequisites, exclusions, or typical use cases. 'Optional filtering' gives a hint but not enough to route an agent confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monthly-summaryC
Get monthly income, expenses, and savings
| Name | Required | Description | Default |
|---|---|---|---|
| months | Yes | ||
| accountId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read-only operation, and the description lists output categories, but it does not explain how the monthly window is calculated, what 'savings' includes, or whether accountId scopes the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundancy. The key output areas are front-loaded and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter description coverage, the overall context is too thin. An agent cannot tell from the description how the optional accountId interacts with the summary, what time range is covered, or what the response structure looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate, but it never mentions the 'months' parameter or the optional 'accountId' parameter. 'Monthly' weakly hints at the time dimension, but the default value and account scoping behavior are left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), resource ('monthly summary'), and the key data areas ('income, expenses, and savings'), making the tool's core function clear. It does not explicitly contrast with siblings like spending-by-category or balance-history, but the summary-style output is reasonably distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over alternatives such as get-transactions, spending-by-category, or balance-history. Usage is only weakly implied by the phrase 'monthly income, expenses, and savings' rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spending-by-categoryC
Get spending breakdown by category for a specified date range
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ||
| accountId | No | ||
| startDate | No | ||
| includeIncome | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The word 'Get' implies a read-only operation, and 'breakdown by category' communicates aggregation behavior. However, it does not disclose date inclusivity, whether income is treated differently, category rollup behavior, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no redundant wording. It is concise, though the conciseness comes at the cost of omitting important usage and parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four undocumented parameters, no annotations, and no output schema, the description is too thin to fully prepare an agent. An agent can infer the basic intent but cannot confidently know how accountId or includeIncome affect results, what date formats are expected, or what the return structure looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'date range', which partially maps to startDate and endDate, but it provides no meaning for accountId or includeIncome, and no format or default information for any parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Get spending breakdown by category') and a clear resource and scope ('specified date range'). It does not explicitly differentiate from sibling tools like 'get-grouped-categories' or 'monthly-summary', so it is clear but not fully distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention when to prefer 'get-grouped-categories' or 'monthly-summary', nor does it explain any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v1.12.1- First observed
balance-history - First observed
get-accounts - First observed
get-budget-month - First observed
get-budget-months - First observed
get-grouped-categories - First observed
get-payees - First observed
get-rules - First observed
get-transactions - First observed
monthly-summary - First observed
spending-by-category
TDQS
Each tool targets a distinct financial data view, and the two budget-month tools are clearly differentiated by singular/plural. Some summary tools like spending-by-category and monthly-summary are related but their descriptions clarify the different outputs.
Most tools use a get- prefix with hyphenated nouns, but three tools (spending-by-category, monthly-summary, balance-history) drop the prefix. The naming is readable and uniform in hyphenation but inconsistent in verb usage.
With 10 tools, the server is well-scoped for a read-only personal finance/budgeting assistant. Each tool covers a meaningful aspect of the domain without unnecessary redundancy.
The tool surface covers accounts, transactions, categories, payees, rules, spending breakdowns, balance history, and budget monthsโstrong read coverage. The main gap is the absence of write operations, but this appears to be a deliberate read-only analytics server.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for Argo RPG Platform โ connects AI assistants to campaign data via OAuth2
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for interacting with YNAB (You Need A Budget). Provides tools for accessing budget data through MCP-enabled clients like Claude Desktop.4MIT
- FlicenseBqualityDmaintenanceMCP server that bridges Claude to Monarch Money for personal-finance analysis and lightweight edits.18-
- AlicenseNot gradedqualityAmaintenanceMCP server that connects AI assistants to Actual Budget for budget management, enabling natural language queries, transaction creation, and spending analysis.1,67149MIT
- AlicenseBqualityAmaintenanceAn MCP server that connects Actual Budget to Claude, enabling users to manage budgets, transactions, and spending insights through natural language.374442MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/s-stefanov/actual-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server