MCP YNAB Server
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., "@MCP YNAB Servershow me my checking account balance"
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.
MCP YNAB Server
An MCP server implementation that provides access to YNAB (You Need A Budget) functionality through the Model Context Protocol.
Features
View account balances and transactions
Create new transactions
Access YNAB data through standardized MCP resources
Related MCP server: YNAB MCP Server
Installation
uv pip install -e .Configuration
The server requires a YNAB API key to function. You can obtain one from your YNAB Developer Settings.
The API key can be provided through:
Environment variable:
YNAB_API_KEY=your_api_keyMCP secret management system
.envfile in project root
Usage
Running the Server
# Development mode with hot reload and browser launch
task dev
# Production install for Claude Desktop, Goose, or any other MCP-supported environment
task installAvailable Resources
ynab://accounts- List all YNAB accountsynab://transactions/{account_id}- Get recent transactions for a specific account
Available Tools
create_transaction- Create a new transactionget_account_balance- Get the current balance of an account
Example Usage
# Create a new transaction
result = await create_transaction(
account_id="your_account_id",
amount=42.50, # in dollars
payee_name="Coffee Shop",
category_name="Dining Out",
memo="Morning coffee"
)
# Get account balance
balance = await get_account_balance("your_account_id")
# List accounts
accounts = await ctx.read_resource("ynab://accounts")
# Get recent transactions
transactions = await ctx.read_resource(f"ynab://transactions/{account_id}")Development
# Install dependencies (uses uv)
task deps
# Run all tests including integration tests (you will need a YNAB API key for this)
task test:all
# Generate coverage report
task coverage
# Format and lint code
task fmt # Should add this to TaskfileProject Tasks
This project uses a Taskfile for common operations. Key commands:
task dev # Start dev server with auto-reload
task test # Run unit tests
task coverage # Generate test coverage report
task install # Install production build
task deps # Synchronize dependenciesSee Taskfile.yml for all available tasks.
Available Tools
10 toolscache_categoriesC
Cache all categories for a given YNAB budget ID.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'cache' implies a write operation that stores data locally, the description doesn't specify what 'cache' means operationally - whether this is persistent storage, memory caching, duration, or side effects. It also doesn't mention authentication requirements, rate limits, or what happens on repeated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and gets straight to the point without unnecessary elaboration or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and low schema coverage, the description is insufficient. It doesn't explain what 'caching' means in this context, what the tool actually returns (if anything), how the cached data can be used, or why one would cache categories rather than using 'get_categories' directly. The description leaves too many operational questions unanswered.
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 description mentions 'budget ID' which aligns with the single parameter in the schema, but with 0% schema description coverage, it doesn't add meaningful semantic context beyond what's obvious from the parameter name. It doesn't explain what format the budget ID should be, where to find it, or provide examples. The baseline is 3 since schema coverage is low but the description doesn't adequately compensate.
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 ('Cache all categories') and the target resource ('for a given YNAB budget ID'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from sibling 'get_categories' which likely retrieves categories without caching, leaving some ambiguity about differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'get_categories' or when caching is appropriate versus direct retrieval. There's no mention of prerequisites, timing considerations, or performance implications that would help an agent decide when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_transactionC
Create a new transaction in YNAB.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| amount | Yes | Amount in dollars | |
| category_name | No | ||
| memo | No | ||
| payee_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Create' implies a write/mutation operation, but the description doesn't mention permission requirements, whether transactions are immediately posted or pending, error conditions, or what happens on success. This leaves significant behavioral gaps for a tool that modifies financial 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 perfectly concise - a single sentence that states the core purpose without any wasted words. It's front-loaded with the essential information and earns its place 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?
For a mutation tool with 5 parameters, no annotations, no output schema, and only 20% schema description coverage, the description is severely incomplete. It doesn't address behavioral aspects, parameter meanings, usage context, or expected outcomes, leaving the agent with insufficient information to use this tool effectively.
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?
With only 20% schema description coverage (only 'amount' has a description), the description provides no additional parameter information. It doesn't explain what account_id refers to, how payee_name should be formatted, what category_name options exist, or memo usage. For a tool with 5 parameters and poor schema coverage, this is inadequate.
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 ('Create') and resource ('new transaction in YNAB'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential sibling tools that might also create transactions or similar financial records, which prevents a perfect score.
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. With sibling tools like get_transactions and get_transactions_needing_attention available, there's no indication of whether this is for manual entry versus automated processing, or any prerequisites for creating transactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
_find_transaction_by_idC
Find a transaction by its ID and ID type.
| Name | Required | Description | Default |
|---|---|---|---|
| id_type | Yes | ||
| transaction_id | Yes | ||
| transactions | Yes |
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. It states the tool 'finds' a transaction, which suggests a read-only operation, but doesn't clarify if it requires authentication, has rate limits, returns errors for missing IDs, or handles deleted transactions. The description lacks critical behavioral context for a lookup tool, leaving gaps in understanding how it behaves in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized for a simple lookup tool, though it could be more informative. The structure is straightforward, but it lacks front-loading of critical details like parameter explanations or usage context.
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 complexity (3 parameters, no output schema, no annotations), the description is incomplete. It doesn't explain the return format, error handling, or how parameters interact. For a tool with undocumented parameters and no structured guidance, the description should provide more context to compensate, but it offers only a basic overview, leaving significant gaps for an agent to understand and use the tool effectively.
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 but fails to do so. It mentions 'ID and ID type' but doesn't explain what 'ID type' means (e.g., transaction ID vs. import ID), the format of 'transaction_id', or the purpose of the 'transactions' parameter. With 3 undocumented parameters, the description adds minimal value beyond restating parameter names, leaving semantics unclear.
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 the tool's purpose ('Find a transaction by its ID and ID type'), which is clear but generic. It specifies the verb ('Find') and resource ('transaction'), but doesn't differentiate from sibling tools like 'get_transactions' or explain what makes this lookup unique (e.g., exact ID match vs. filtering). The purpose is understandable but lacks specificity about scope or 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?
No guidance is provided on when to use this tool versus alternatives like 'get_transactions' (which might list multiple transactions) or 'get_transactions_needing_attention'. The description implies it's for exact ID-based retrieval, but it doesn't explicitly state prerequisites, exclusions, or compare to siblings. Usage is implied from the name and description alone, with no explicit instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_balanceC
Get the current balance of a YNAB account (in dollars).
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes |
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. It states the action ('Get') but lacks details on permissions, rate limits, error handling, or return format (e.g., numeric value, currency format). For a financial tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, clearly stating the tool's purpose without unnecessary details. Every word earns its place, making it highly concise and well-structured.
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 complexity of a financial balance tool with no annotations, 0% schema coverage, and no output schema, the description is incomplete. It lacks details on behavioral traits, parameter semantics, and return values, failing to provide sufficient context for effective tool use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It implies the parameter is an account ID but doesn't specify format, source (e.g., from get_accounts), or validation rules. The description adds minimal meaning beyond the schema's property name, resulting in a baseline score due to incomplete 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 clearly states the verb ('Get') and resource ('current balance of a YNAB account'), specifying the unit ('in dollars'). It distinguishes from siblings like get_accounts (which lists accounts) and get_transactions (which retrieves transaction data). However, it doesn't explicitly differentiate from all siblings, such as get_budgets, which might also involve financial data.
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 doesn't mention prerequisites (e.g., needing an account ID from get_accounts), exclusions, or comparisons to siblings like get_transactions for transaction-level details. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountsC
List all YNAB accounts in a specific budget in Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
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. It mentions the output format ('Markdown format'), which adds some context beyond basic listing. However, it fails to disclose critical traits like whether this is a read-only operation, potential rate limits, authentication needs, error handling, or pagination behavior for large account lists. The description is too sparse for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action and resource. Every word earns its place, with no redundant or vague phrasing. It's appropriately sized for a simple list tool, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description is incomplete. It lacks details on return values (beyond 'Markdown format'), error cases, or operational constraints. For a tool with zero annotation coverage, more context is needed to ensure the agent can invoke it correctly without guesswork.
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 1 parameter with 0% description coverage, so the description must compensate. It adds meaning by specifying 'in a specific budget', which clarifies the 'budget_id' parameter's purpose. However, it doesn't explain the parameter's format, constraints, or how to obtain valid budget IDs, leaving significant gaps in understanding how to use the tool effectively.
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 ('List all') and resource ('YNAB accounts in a specific budget'), making the purpose evident. It distinguishes from siblings like 'get_account_balance' by focusing on listing rather than retrieving a specific metric. However, it doesn't explicitly differentiate from 'get_budgets' or 'get_transactions', which are also list operations but for different resources.
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 minimal guidance by specifying 'in a specific budget', implying it should be used when targeting accounts within a budget context. However, it lacks explicit when-to-use criteria, prerequisites (e.g., budget must exist), or alternatives (e.g., when to use 'get_account_balance' instead). No exclusions or comparisons to sibling tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budgetsB
List all YNAB budgets in Markdown format.
| 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 carries the full burden. It mentions the output format ('Markdown format'), which is useful, but lacks critical behavioral details such as whether this requires authentication, if it's a read-only operation, potential rate limits, or error handling. For a tool with zero annotation coverage, 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 a single, efficient sentence that front-loads the key information ('List all YNAB budgets in Markdown format'). There is no wasted text, and it's appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema), the description is minimally complete. It states the purpose and output format, but lacks behavioral context (e.g., authentication needs, error cases). Without annotations or an output schema, more detail would improve completeness for agent 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?
There are 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter semantics, but that's appropriate here. A baseline of 4 is given as it compensates adequately for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all') and resource ('YNAB budgets'), and specifies the output format ('Markdown format'). It doesn't distinguish from siblings like 'get_accounts' or 'get_categories', but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention if this should be used before other operations or how it relates to 'set_preferred_budget_id'. The description only states what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesB
List all transaction categories for a given YNAB budget in Markdown format.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
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. It states the tool lists categories in Markdown format, which implies a read-only operation, but doesn't cover critical aspects like authentication needs, rate limits, error handling, or whether it's idempotent. For a tool with zero annotation coverage, 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 a single, efficient sentence with zero waste—it front-loads the purpose and includes key details like scope and output format without redundancy. Every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one parameter, no output schema, no annotations), the description is minimally complete. It covers the basic operation and output format but lacks details on behavioral traits, parameter usage, and sibling differentiation, which are needed for full agent understanding in this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds minimal semantics beyond the input schema, which has 0% description coverage. It implies the budget_id parameter is required to specify the YNAB budget, but doesn't explain its format, source, or validation. With one parameter and low schema coverage, the description provides basic context but doesn't fully compensate for the lack of schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('transaction categories'), specifying the scope ('for a given YNAB budget') and output format ('in Markdown format'). It distinguishes from siblings like get_transactions or get_accounts by focusing on categories, though it doesn't explicitly contrast with cache_categories, which might be a related operation.
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 on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid budget_id), exclusions, or comparisons to siblings like cache_categories or get_budgets, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsC
Get recent transactions for a specific account in a specific budget.
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | ||
| budget_id | Yes |
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 states 'Get recent transactions' but doesn't disclose behavioral traits like what 'recent' means (time range, limit), whether it's paginated, requires authentication, or has rate limits. For a read operation with zero annotation coverage, this leaves significant 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 a single, efficient sentence that front-loads the core purpose with zero wasted words. Every part ('Get recent transactions for a specific account in a specific budget') directly contributes to understanding the tool's function.
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 low schema coverage (0%), the description is incomplete. It lacks details on return values (e.g., transaction format, fields), error handling, and behavioral constraints, making it inadequate for a tool with two required parameters and potential complexity in financial data retrieval.
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 'account_id' and 'budget_id' implicitly by referring to 'specific account' and 'specific budget', adding basic meaning. However, it doesn't explain parameter formats, valid values, or relationships, leaving the schema's undocumented parameters only partially clarified.
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 ('Get') and target resource ('recent transactions'), specifying scope for 'a specific account in a specific budget'. It distinguishes from siblings like 'get_accounts' or 'get_budgets' by focusing on transactions, but doesn't explicitly differentiate from '_find_transaction_by_id' or 'get_transactions_needing_attention'.
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 tool versus alternatives like '_find_transaction_by_id' (likely for specific transactions) or 'get_transactions_needing_attention' (likely filtered). The description implies usage when needing recent transactions for an account/budget pair, but lacks explicit when-not scenarios or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactions_needing_attentionC
List transactions that need attention based on specified filter type in a YNAB budget.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes | ||
| days_back | No | Number of days to look back (default 30, None for all) | |
| filter_type | No | Type of transactions to show. One of: 'uncategorized', 'unapproved', 'both' | both |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It doesn't disclose whether this is a read-only operation (implied by 'List'), what permissions are needed, whether results are paginated, or what format the output takes. The phrase 'need attention' is vague without explaining what constitutes 'attention' in this 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 a single, efficient sentence that states the core purpose upfront. However, it could be more front-loaded by specifying what 'needing attention' means immediately rather than leaving it implied through 'filter type'.
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 3 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what constitutes 'transactions needing attention', what the output format will be, or how this tool differs from the sibling 'get_transactions' tool. The vague 'needing attention' concept requires more clarification for effective 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 description coverage is 67% (2 of 3 parameters have descriptions). The description adds minimal value beyond the schema - it mentions 'filter type' but doesn't elaborate on what 'needing attention' means for each filter option. It doesn't explain the relationship between 'days_back' and 'needing attention' criteria. Baseline 3 is appropriate given moderate schema coverage.
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 ('List') and resource ('transactions that need attention'), and specifies the context ('in a YNAB budget'). It distinguishes from generic 'get_transactions' by focusing on 'needing attention' transactions, though it doesn't explicitly differentiate from all siblings like 'create_transaction' or 'get_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 provides no guidance on when to use this tool versus alternatives like 'get_transactions' (which presumably lists all transactions) or other filtering tools. It mentions 'based on specified filter type' but doesn't explain when different filter types are appropriate or what 'needing attention' means in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_preferred_budget_idC
Set the preferred YNAB budget ID.
| Name | Required | Description | Default |
|---|---|---|---|
| budget_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states this is a 'set' operation (implying mutation), but doesn't disclose whether this changes global preferences, requires specific permissions, has side effects, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is inadequate.
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 zero wasted words. It's front-loaded with the core action and resource, making it highly efficient for quick comprehension.
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 mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is insufficient. It doesn't explain what 'preferred' means in context, how this affects other operations, or what the user should expect after invocation. The simplicity of the tool (1 parameter) doesn't compensate for these gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but doesn't add parameter details. It mentions 'budget_id' implicitly but provides no context about format, source, or validation. With only one parameter, the baseline is 4, but the lack of any parameter guidance reduces this to 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and the target resource ('preferred YNAB budget ID'), making the purpose immediately understandable. It doesn't distinguish from siblings like 'get_budgets' or 'create_transaction', but the verb+resource combination is specific enough for basic understanding.
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. The description doesn't mention prerequisites (e.g., needing existing budgets), exclusions, or relationships to sibling tools like 'get_budgets' for listing available budgets first.
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.0.0- First observed
_find_transaction_by_id - First observed
cache_categories - First observed
create_transaction - First observed
get_account_balance - First observed
get_accounts - First observed
get_budgets - First observed
get_categories - First observed
get_transactions - First observed
get_transactions_needing_attention - First observed
set_preferred_budget_id
TDQS
Most tools have distinct purposes, but there is some potential overlap between 'get_transactions' and 'get_transactions_needing_attention', as the latter could be seen as a filtered version of the former. However, their descriptions clarify different use cases, so confusion is minimal.
The naming is mixed with some inconsistencies: most tools use a verb_noun pattern (e.g., 'create_transaction', 'get_accounts'), but '_find_transaction_by_id' uses a leading underscore and a different verb style, and 'cache_categories' uses 'cache' instead of 'get' or 'list'. This creates a readable but not fully consistent convention.
With 10 tools, this server is well-scoped for managing YNAB budgets, covering core operations like listing budgets, accounts, categories, and transactions, as well as creating transactions and setting preferences. Each tool serves a clear purpose without being overwhelming.
The tool set provides good coverage for YNAB interactions, including CRUD-like operations (e.g., create transaction, get various resources) and utility functions (e.g., cache categories, set preferred budget). Minor gaps might include updating or deleting transactions, but agents can likely work around this with the available tools.
Related MCP Connectors
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
Chat with your bank data: balances, transactions, budgets, bills. Reads only, never moves money.
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
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
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI-powered interaction with YNAB (You Need A Budget) data, allowing users to query their budgets through conversational interfaces.1675141MIT
- 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 gradedqualityDmaintenanceA Model Context Protocol server that enables Claude Code to interact with You Need A Budget (YNAB) accounts, providing API access for budget management, transaction tracking, and financial insights through OAuth authentication.8115MIT
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/Meh-S-Eze/ynab-mcp-client2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server