YNAB MCP Server
This YNAB MCP Server enables AI-driven interaction with your YNAB budgets. Key capabilities include:
List available budgets using the
ListBudgetstoolSummarize budget status to identify underfunded categories and low accounts
Retrieve and approve transactions (view unapproved transactions and approve them by ID)
Create new transactions for specified budgets and accounts
Manage workflows including:
First-time budget setup
Managing overspent categories
Checking monthly spending versus income
Auto-distributing funds based on category targets
Develop and add custom tools using the MCP framework and YNAB SDK
Supports publishing the MCP server as an npm package for easier distribution and installation
Used for building tools that interact with YNAB's API through typed interfaces
Utilized for schema validation of tool inputs when interacting with YNAB data
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., "@YNAB MCP Servershow me my budget summary for 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.
ynab-mcp-server
A Model Context Protocol (MCP) server built with mcp-framework. This MCP provides tools for interacting with your YNAB budgets setup at https://ynab.com
In order to have an AI interact with this tool, you will need to get your Personal Access Token from YNAB: https://api.ynab.com/#personal-access-tokens. When adding this MCP server to any client, you will need to provide your personal access token as YNAB_API_TOKEN. This token is never directly sent to the LLM. It is stored privately in an environment variable for use with the YNAB api.
Setup
Specify env variables:
YNAB_API_TOKEN (required)
YNAB_BUDGET_ID (optional)
Related MCP server: ynab-mcp
Goal
The goal of the project is to be able to interact with my YNAB budget via an AI conversation. There are a few primary workflows I want to enable:
Workflows:
First time setup
be prompted to select your budget from your available budgets. If you try to use another tool first, this prompt should happen asking you to set your default budget.
Tools needed: ListBudgets
Manage overspent categories
Adding new transactions
Approving transactions
Check total monthly spending vs total income
Auto-distribute ready to assign funds based on category targets
Current state
Available tools:
ListBudgets - lists available budgets on your account
BudgetSummary - provides a summary of categories that are underfunded and accounts that are low
GetUnapprovedTransactions - retrieve all unapproved transactions
CreateTransaction - creates a transaction for a specified budget and account.
example prompt:
Add a transaction to my Ally account for $3.98 I spent at REI todayrequires GetBudget to be called first so we know the account id
ApproveTransaction - approves an existing transaction in your YNAB budget
requires a transaction ID to approve
can be used in conjunction with GetUnapprovedTransactions to approve pending transactions
After calling get unapproved transactions, prompt:
approve the transaction for $6.95 on the Apple Card
Next:
be able to approve multiple transactions with 1 call
updateCategory tool - or updateTransaction more general tool if I can get optional parameters to work correctly with zod & mcp framework
move off of mcp framework to use the model context protocol sdk directly?
Quick Start
# Install dependencies
npm install
# Build the project
npm run build
Project Structure
ynab-mcp-server/
├── src/
│ ├── tools/ # MCP Tools
│ └── index.ts # Server entry point
├── .cursor/
│ └── rules/ # Cursor AI rules for code generation
├── package.json
└── tsconfig.jsonAdding Components
The YNAB sdk describes the available api endpoints: https://github.com/ynab/ynab-sdk-js.
YNAB open api specification is here: https://api.ynab.com/papi/open_api_spec.yaml. This can be used to prompt an AI to generate a new tool. Example prompt for Cursor Agent:
create a new tool based on the readme and this openapi doc: https://api.ynab.com/papi/open_api_spec.yaml
The new tool should get the details for a single budgetYou can add more tools using the CLI:
# Add a new tool
mcp add tool my-tool
# Example tools you might create:
mcp add tool data-processor
mcp add tool api-client
mcp add tool file-handlerTool Development
Example tool structure:
import { MCPTool } from "mcp-framework";
import { z } from "zod";
interface MyToolInput {
message: string;
}
class MyTool extends MCPTool<MyToolInput> {
name = "my_tool";
description = "Describes what your tool does";
schema = {
message: {
type: z.string(),
description: "Description of this input parameter",
},
};
async execute(input: MyToolInput) {
// Your tool logic here
return `Processed: ${input.message}`;
}
}
export default MyTool;Publishing to npm
Update your package.json:
Ensure
nameis unique and follows npm naming conventionsSet appropriate
versionAdd
description,author,license, etc.Check
binpoints to the correct entry file
Build and test locally:
npm run build npm link ynab-mcp-server # Test your CLI locallyLogin to npm (create account if necessary):
npm loginPublish your package:
npm publish
After publishing, users can add it to their claude desktop client (read below) or run it with npx
Using with Claude Desktop
Installing via Smithery
To install YNAB Budget Assistant for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @calebl/ynab-mcp-server --client claudeLocal Development
Add this configuration to your Claude Desktop config file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"ynab-mcp-server": {
"command": "node",
"args":["/absolute/path/to/ynab-mcp-server/dist/index.js"]
}
}
}After Publishing
Add this configuration to your Claude Desktop config file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"ynab-mcp-server": {
"command": "npx",
"args": ["ynab-mcp-server"]
}
}
}Other MCP Clients
Check https://modelcontextprotocol.io/clients for other available clients.
Building and Testing
Make changes to your tools
Run
npm run buildto compileThe server will automatically load your tools on startup
Learn More
Available Tools
16 toolsynab_approve_transactionApprove TransactionB
Approves an existing transaction in your YNAB budget.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The id of the budget containing the transaction (optional, defaults to the budget set in the YNAB_BUDGET_ID environment variable) | |
| transactionId | Yes | The id of the transaction to approve | |
| approved | No | Whether the transaction should be marked as approved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states 'Approves' without detailing mutation behavior, required permissions, or effects on already-approved transactions.
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?
Single sentence is concise and front-loaded, but could include slightly more context without becoming verbose.
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?
Sufficient for a simple action, but given sibling tools and no output schema, more detail on scope (single vs bulk) and parameter use would improve completeness.
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 covers 100% of parameter descriptions; tool description adds no extra meaning beyond what is already in the schema, so baseline score 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?
Description clearly states verb 'Approves' and resource 'existing transaction', distinguishing it from siblings like ynab_bulk_approve_transactions and ynab_create_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?
Implies single-transaction approval but does not explicitly guide when to use this tool over the bulk alternative or mention prerequisites like transaction existing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_budget_summaryBudget SummaryA
Get a summary of the budget for a specific month highlighting overspent categories that need attention and categories with a positive balance that are doing well.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget to get a summary for (optional, defaults to the budget set in the YNAB_BUDGET_ID environment variable) | |
| month | No | The budget month in ISO format (e.g. 2016-12-01). The string 'current' can also be used to specify the current calendar month (UTC) | current |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes what the tool does (get summary) but does not explicitly state that it is read-only, nor does it disclose any behavioral traits like authentication needs, rate limits, or side effects. The term 'summary' suggests a read operation, but this is not confirmed.
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, well-structured sentence that clearly conveys the purpose without redundancy. 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?
Given the lack of output schema, the description should ideally hint at the return structure. It mentions 'highlighting overspent categories and positive balance categories', which provides some completeness, but lacks specifics on whether the summary is a text report, a list of categories, or a data object. For a tool with only 2 parameters and no annotations, this is adequate but not thorough.
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 has a description. The tool description adds context that the summary is for a specific month, which aligns with the month parameter, but does not add semantic detail beyond the schema for budgetId (defaulting to env var) or month format. Baseline 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 clearly states 'Get a summary of the budget for a specific month' with a specific verb and resource. It distinguishes from sibling tools by focusing on a consolidated summary highlighting overspent and positive categories, not listing transactions or 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 implies usage for a monthly overview with overspent/positive categories but does not explicitly state when to use this tool versus alternatives like ynab_list_categories or ynab_get_transactions. No when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_bulk_approve_transactionsBulk Approve TransactionsA
Approves multiple transactions at once. Provide an array of transaction IDs to approve them all in a single API call.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| transactionIds | Yes | Array of transaction IDs to approve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It merely states 'Approves' without disclosing side effects, permission requirements, rate limits, or error handling. For a mutation operation, this is insufficient.
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 extremely concise with two short sentences, no fluff, and the key information is front-loaded.
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?
The description covers the basic function but lacks details on expected behavior (e.g., partial success, idempotency, response structure). Given the simplicity, it is minimally adequate but could be more 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 description coverage is 100%, so the schema already documents both parameters. The description adds no new meaning beyond restating the need for transaction IDs, which is already in the schema. Baseline 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 explicitly states the verb 'Approves' and the resource 'multiple transactions', clearly differentiating from the sibling tool 'ynab_approve_transaction' which handles single transactions. The phrase 'at once' and 'bulk' reinforce the batch nature.
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 for approving multiple transactions in one call but does not explicitly state when to use versus calling the single-approve tool multiple times. No when-not scenarios or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_create_transactionCreate TransactionB
Creates a new transaction in your YNAB budget. Either payeeId or payeeName must be provided in addition to the other required fields.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The id of the budget to create the transaction in (optional, defaults to the budget set in the YNAB_BUDGET_ID environment variable) | |
| accountId | Yes | The id of the account to create the transaction in | |
| date | Yes | The date of the transaction in ISO format (e.g. 2024-03-24) | |
| amount | Yes | The amount in dollars (e.g. 10.99) | |
| payeeId | No | The id of the payee (optional if payeeName is provided) | |
| payeeName | No | The name of the payee (optional if payeeId is provided) | |
| categoryId | No | The category id for the transaction (optional) | |
| memo | No | A memo/note for the transaction (optional) | |
| cleared | No | Whether the transaction is cleared (optional, defaults to false) | |
| approved | No | Whether the transaction is approved (optional, defaults to false) | |
| flagColor | No | The transaction flag color (red, orange, yellow, green, blue, purple) (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Fails to mention side effects (budget balance changes), idempotency, rate limits, or error conditions. Minimal disclosure.
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?
Single sentence, no redundancy, conveys essential function and a key constraint efficiently.
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?
No output schema, description omits response details. For 11 parameters, lacks guidance on default behavior for optional fields or error handling. Incomplete for a creation tool.
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 good descriptions. Description adds value by clarifying mutual exclusivity of payeeId/payeeName, which is not evident from schema. Baseline 3 + 1 for this insight.
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?
Description clearly states verb 'creates' with resource 'new transaction in YNAB budget'. Distinct from siblings like get, delete, import. Constraint on payee fields adds specificity.
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 on when to use this vs alternatives (e.g., import, update). Does not mention prerequisites or context for creation. Only mentions a constraint but no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_delete_transactionDelete TransactionA
Deletes a transaction from the budget. This action cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| transactionId | Yes | The ID of the transaction to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes that the action cannot be undone, which is a critical behavioral trait. However, with no annotations present, it fails to disclose other potential behaviors such as permissions required, effects on related entities, or error conditions like attempting to delete a deleted transaction.
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 extremely concise with two sentences: the first states the primary action, and the second adds a critical warning. Every word earns its place, and key information is front-loaded.
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 simplicity of the tool (delete a transaction) and the lack of an output schema, the description covers the core action and an important behavioral warning. However, it could be more complete by indicating what the response looks like (e.g., success confirmation) or any constraints on the transaction status.
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 provides full parameter descriptions (100% coverage). The description adds no additional meaning beyond the schema, 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 clearly states the action (delete) and the resource (transaction). It distinguishes this tool from siblings like ynab_create_transaction or ynab_update_transaction by specifying deletion, making it easy for an agent to select the correct tool.
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 does not provide any guidance on when to use this tool versus alternatives or any prerequisites. For example, it doesn't explain that transactions might need to be unapproved before deletion, nor does it mention appropriate context for deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_get_transactionsGet TransactionsB
Gets transactions from a budget with optional filters. Can filter by date range, account, category, payee, or approval status.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| sinceDate | No | Only return transactions on or after this date (ISO format: 2024-01-01) | |
| type | No | Filter by transaction type. Defaults to 'all'. | |
| accountId | No | Filter to only transactions in this account | |
| categoryId | No | Filter to only transactions in this category | |
| payeeId | No | Filter to only transactions with this payee | |
| limit | No | Maximum number of transactions to return (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It correctly implies a read operation ('Gets'), but does not disclose response structure, pagination behavior, or the default limit of 100 transactions (though the schema includes a limit parameter). No hidden behaviors are suggested.
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 sentence that efficiently conveys purpose and key filters. It is front-loaded and contains no extraneous words, though it could be slightly more structured with bullet points.
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?
The description adequately covers the main filters but omits mention of the optional budgetId defaulting to an environment variable and does not explicitly state the tool is read-only. Given the absence of output schema and annotations, a slightly more complete description would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds limited value beyond summarizing filter capabilities (date range, account, category, payee, approval status). It does not improve on schema details significantly.
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 'Gets transactions from a budget' and lists optional filters, distinguishing it from creation/deletion siblings. However, it does not distinguish from the more specific sibling 'ynab_get_unapproved_transactions', which could cause ambiguity.
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 mentions optional filters but offers no guidance on when to use this tool versus the sibling 'ynab_get_unapproved_transactions' or other transaction tools. No explicit when-not or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_get_unapproved_transactionsGet Unapproved TransactionsA
Gets unapproved transactions from a budget. First time pulls last 3 days, subsequent pulls use server knowledge to get only changes.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget to fetch transactions for (optional, defaults to the budget set in the YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behavioral traits: first call fetches last 3 days, subsequent calls use server knowledge for incremental updates. This is helpful, but it omits other traits like read-only nature, authorization requirements, or rate limits. The provided information is decent but not comprehensive.
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 wasted words. It front-loads the core action and efficiently adds operational detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fails to mention output format, pagination, or any return structure. There is no output schema, so the description must compensate. For a simple fetch tool, the absence of output details makes it incomplete for an agent to fully understand what the tool returns.
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 for the single optional parameter, with a clear description of its default behavior. The description does not add any additional meaning beyond what the schema already provides. Thus baseline 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 clearly states the action ('gets'), the resource ('unapproved transactions'), and the context ('from a budget'). It distinguishes from sibling tools like 'ynab_get_transactions' by specifying 'unapproved'. The addition of first-time vs. subsequent behavior further clarifies its 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 implies usage for unapproved transactions via the first sentence, but it does not explicitly state when to use this tool versus alternatives like 'ynab_get_transactions'. It gives operational guidance on first-time vs. subsequent calls but lacks explicit 'when-not-to-use' or comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_import_transactionsImport TransactionsA
Imports available transactions on all linked accounts for the budget. This triggers an import from connected financial institutions (equivalent to clicking 'Import' in the YNAB app).
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it triggers network import from financial institutions, implying potential latency and side effects. No mention of error handling, idempotency, or success/failure responses. With no annotations, description should be more thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, action first, no filler. Every word adds value.
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 single optional param and no output schema, description adequately conveys purpose and behavior. Missing details on return behavior and error states, but sufficient for common 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?
Schema covers 100% of parameters with descriptions. The description reinforces 'all linked accounts for the budget' but adds no new semantic detail beyond schema. Baseline 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?
Clearly states verb 'Imports' and resource 'transactions on all linked accounts for the budget'. Distinguishes from sibling tools like create, delete, get, etc. by explicitly mentioning automated import from financial institutions, making it unique.
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?
Provides context by comparing to 'Import' button in YNAB app, implying it's for syncing from banks. Lacks explicit exclusions or when to prefer alternatives like create_transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_accountsList AccountsA
Lists all accounts in a budget. Useful for finding account IDs when creating transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| includeClosedAccounts | No | Include closed accounts in the list (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits beyond listing accounts, such as read-only nature, rate limits, or sorting 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 sentence that is concise and includes a practical hint, but lacks structured formatting for quick scanning.
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 no output schema, the description provides the basic purpose and a use case, but does not mention response details, pagination, or filtering, which may be expected.
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 descriptions for both parameters, so description adds minimal extra meaning beyond stating the default for budgetId, which is already documented.
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 'Lists all accounts in a budget' and provides a specific use case ('finding account IDs when creating transactions'), distinguishing it from sibling tools like ynab_list_budgets.
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 context by noting it's 'useful for finding account IDs when creating transactions', but does not explicitly state when not to use it or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_budgetsList BudgetsB
Lists all available budgets from YNAB API
| 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 burden. It only states 'lists budgets' but does not disclose whether the operation is read-only, whether authentication is required, or any pagination or filtering behavior. For a simple list, the lack of explicit transparency is a gap.
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 8-word sentence, extremely concise with no unnecessary verbiage. 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?
The tool lacks an output schema and has no annotations. The description does not hint at what information is returned for each budget (e.g., id, name, currency). For a tool with zero parameters and simple behavior, the absence of return value details makes it incomplete for an agent to understand what to expect.
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 zero parameters, so baseline is 4. The description adds no parameter-specific meaning, but none is needed since there are no parameters. The 100% schema coverage further reduces the need for additional description.
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 ('Lists') and the resource ('all available budgets'), making the purpose obvious. It contrasts sufficiently with sibling tools that have different actions (e.g., create, update, delete), though it doesn't explicitly differentiate itself.
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 usage guidelines are provided. The description does not mention when to prefer this tool over siblings like ynab_budget_summary or ynab_get_transactions, nor does it state any prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_categoriesList CategoriesA
Lists all categories in a budget, grouped by category group. Useful for finding category IDs when creating transactions or updating budgets.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states the tool 'lists all categories in a budget, grouped by category group', which is the core behavior. While it doesn't discuss edge cases like pagination or permissions, the simplicity of the tool (single parameter, read-only) makes this level of detail acceptable.
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 extremely concise: two sentences with no fluff. The first sentence states the primary action, the second provides context. Every word serves a purpose.
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 low complexity (1 parameter, no output schema), the description adequately explains the tool's purpose and usage. It mentions grouping and the use case. A slight improvement would be to hint at the return structure (e.g., 'returns category groups with nested categories'), but it is already reasonably 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% with a well-described optional budgetId parameter (including default from environment variable). The description adds no additional parameter meaning beyond what the schema already provides, so 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 uses a specific verb ('Lists') and resource ('categories'), mentions grouping by category group, and explains the use case (finding category IDs). It clearly distinguishes from sibling tools like ynab_list_accounts or ynab_list_payees by specifying 'grouped by category group'.
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 states it is 'useful for finding category IDs when creating transactions or updating budgets', providing clear context for when to use this tool. It does not explicitly mention when not to use it or list alternatives, but the usage guidance is strong enough for a general-purpose listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_monthsList MonthsB
Lists all budget months. Each month contains summary information about budgeting status.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool lists budget months (implying a read operation) and mentions monthly summaries but does not disclose pagination, sorting, error handling, or the exact meaning of 'summary information'. Adequate for a simple read tool but lacks depth.
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 concise sentences with no fluff. Each sentence provides essential information: the action (list all budget months) and the content (summary information about budgeting status). No unnecessary 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 tool with one optional parameter and no output schema, the description is mostly complete. It covers what the tool does and what the result contains. However, it could be slightly richer by noting that the output is a list or mentioning the default budget behavior, but overall adequate.
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 covers the single parameter (budgetId) with full description, including its optional nature and default from an environment variable. The description adds no additional parameter information beyond the schema, so baseline score 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 that the tool lists all budget months and that each month contains summary information about budgeting status. It distinguishes itself from sibling tools like ynab_list_accounts or ynab_list_budgets by focusing on months, though it does not explicitly differentiate.
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 no guidance on when to use this tool versus alternatives. It lacks context such as prerequisites or typical use cases, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_payeesList PayeesA
Lists all payees in a budget. Useful for finding payee IDs when creating transactions.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'Lists all payees in a budget', which implies a read-only operation but does not disclose any other behavioral traits such as pagination, authentication needs, or rate limits. For a simple list tool this is minimally 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 extremely concise with two sentences, both front-loaded and adding value. Every sentence earns its place without any unnecessary 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?
The tool has no output schema, and the description does not explain what information is returned (e.g., payee IDs, names). While the tool name suggests the response includes payee details, the lack of any return format description leaves agents to infer, which is adequate but not comprehensive.
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 one parameter with 100% description coverage, fully documenting its optional nature and default value. The description adds no additional meaning about the parameter beyond what the schema already provides, so a 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 clearly states 'Lists all payees in a budget' which is a specific verb and resource. It also provides a use case for finding payee IDs. However, it does not differentiate from sibling list tools such as list_accounts or list_categories, which are also present on the same server.
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 includes a usage hint ('Useful for finding payee IDs when creating transactions'), which implies when to use the tool. However, it lacks explicit guidance on when not to use it or alternatives that might be better suited for other scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_list_scheduled_transactionsList Scheduled TransactionsB
Lists all scheduled (recurring) transactions in a budget.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden for behavioral disclosure. It only states the action ('list'), omitting details like read-only nature, pagination, or response format.
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 sentence that is clear and without fluff, but could be slightly expanded (e.g., mentioning return type) without harming conciseness.
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 simplicity (1 optional param, no output schema), the description covers the primary purpose adequately, but lacks context on behavior like whether it returns scheduled-only items, ordering, or limits.
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 single parameter (budgetId) is already described in the schema (optional, defaults to env variable). The description adds no further meaning, so baseline 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 uses a specific verb ('Lists') and identifies the resource ('scheduled (recurring) transactions'), clearly distinguishing from siblings like 'get_transactions' which likely covers all transactions.
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 information is provided about when to use this tool versus alternatives (e.g., get_transactions), nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_update_category_budgetUpdate Category BudgetA
Updates the budgeted amount for a category in a specific month. Use this to allocate funds to categories or move money between categories.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| month | Yes | The budget month in ISO format (e.g. 2024-01-01). Must be the first day of the month. | |
| categoryId | Yes | The ID of the category to update | |
| budgeted | Yes | The amount to budget in dollars (e.g. 500.00). This sets the total budgeted amount, not an increment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like idempotency, permissions, or side effects. It only states the action and relies on schema for parameter details, missing important context.
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 two sentences, no fluff, and purpose is front-loaded. It could possibly include more structure but is efficient.
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?
The description covers the main action and usage but lacks context about optional budgetId defaulting, month format requirements, and absence of output schema. Schema partially compensates but not fully.
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 baseline is 3. The description adds no additional meaning beyond the schema, which already describes each parameter sufficiently.
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 updates the budgeted amount for a category in a specific month, and distinguishes from siblings by specifying use for allocation or moving money between categories.
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 when to use it (allocate funds or move money between categories), but does not mention when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ynab_update_transactionUpdate TransactionA
Updates an existing transaction. All fields except transactionId are optional - only provide fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| budgetId | No | The ID of the budget (optional, defaults to YNAB_BUDGET_ID environment variable) | |
| transactionId | Yes | The ID of the transaction to update | |
| accountId | No | Move transaction to a different account | |
| date | No | The date of the transaction in ISO format (e.g. 2024-03-24) | |
| amount | No | The amount in dollars (e.g. -10.99 for outflow, 10.99 for inflow) | |
| payeeId | No | The ID of the payee | |
| payeeName | No | The name of the payee (creates new payee if doesn't exist) | |
| categoryId | No | The category ID for the transaction | |
| memo | No | A memo/note for the transaction | |
| cleared | No | The cleared status | |
| approved | No | Whether the transaction is approved | |
| flagColor | No | The transaction flag color |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavior beyond 'updates'. It omits whether it returns the updated transaction, what happens on invalid IDs, or how it handles nested data. Only provides a merge hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, first gives purpose, second gives usage nuance. No filler, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a straightforward update tool with well-documented schema. Lacks output description and error behavior, but sibling tools cover other operations.
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 covers all 12 parameters with descriptions (100% coverage). Description adds only that all optional fields are for partial updates, which is minimal added value beyond schema.
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 it updates an existing transaction, differentiating it from create and delete siblings. The optionality hint distinguishes it from a full replacement update.
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?
Explains that all fields except transactionId are optional, guiding sparse updates. Does not explicitly exclude scenarios (e.g., creating transactions) but name and sibling list make it clear.
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.
17 tool updates
v1.0.0- Removed
list_budgets - Added
ynab_approve_transaction - Added
ynab_budget_summary - Added
ynab_bulk_approve_transactions - Added
ynab_create_transaction - Added
ynab_delete_transaction - Added
ynab_get_transactions - Added
ynab_get_unapproved_transactions - Added
ynab_import_transactions - Added
ynab_list_accounts - Added
ynab_list_budgets - Added
ynab_list_categories - Added
ynab_list_months - Added
ynab_list_payees - Added
ynab_list_scheduled_transactions - Added
ynab_update_category_budget - Added
ynab_update_transaction
1 tool update
- First observed
list_budgets
TDQS
Each tool has a clearly distinct purpose with no ambiguity, covering specific actions like approve, create, delete, get, list, update, import, and summary for different YNAB entities such as transactions, budgets, accounts, categories, payees, and months. The descriptions clearly differentiate overlapping tools like ynab_approve_transaction vs. ynab_bulk_approve_transactions, and ynab_get_transactions vs. ynab_get_unapproved_transactions, ensuring agents can easily select the correct tool.
All tool names follow a consistent verb_noun pattern with the 'ynab_' prefix, using clear verbs like approve, create, delete, get, list, update, import, and summary paired with specific nouns such as transaction, budget, account, category, payee, and month. There are no deviations in naming conventions, making the set predictable and readable.
With 16 tools, the count is well-scoped for a YNAB budget management server, covering essential CRUD operations, listing resources, and specialized actions like importing transactions and updating category budgets. Each tool earns its place by addressing specific needs in the domain without being excessive or insufficient.
The tool set provides complete CRUD/lifecycle coverage for the YNAB domain, including listing budgets, accounts, categories, payees, months, and transactions; creating, updating, approving, and deleting transactions; importing transactions; and updating category budgets. There are no obvious gaps, as all core workflows for budget management are supported without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
A Model Context Protocol server for Wix AI tools
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that allows users to interact with YNAB data, enabling access to account balances, transactions, and the creation of new transactions through the Model Context Protocol.86MIT
- 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
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that enables interaction with You Need A Budget (YNAB) via their API, allowing users to manage budgets, accounts, categories, and transactions through natural language.2MIT
- AlicenseAqualityBmaintenanceA Model Context Protocol server for YNAB (You Need A Budget). Enables users to query budgets, accounts, categories, transactions, and more, as well as create, update, and delete transactions and manage scheduled transactions from any MCP client.252MIT
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/calebl/ynab-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server