Maybe Finance MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Maybe Finance MCP Servershow 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.
Maybe Finance MCP Server
A Model Context Protocol (MCP) server that connects Claude Desktop to your self-hosted Maybe Finance instance, enabling natural language financial queries, transaction management, and advanced analytics.
🚀 Features
Complete Financial Management
Account Management: Query account balances and information
Transaction CRUD: Create, read, update, and delete transactions
CSV Import: Bulk import transactions from bank statements
Smart Search: Find transactions with advanced filtering
Intelligent Categorization
Auto-Categorization: AI-powered transaction categorization with 17 built-in rules
Custom Categories: Create and manage your own categories
Special Categories:
Required Purchases (groceries, utilities, etc.)
Discretionary Spending
Subscriptions
Spending but Assets (investments, high-value items)
Advanced Analytics
Cash Flow Analysis: Track inflows/outflows with insights
Rolling Metrics: Analyze trends over custom time periods
Forecasting: Predict future cash flow with confidence intervals
Spending Breakdowns: Detailed category-based analytics
Related MCP server: OpenCoffer
Prerequisites
Node.js 20 or later
Maybe Finance API key (from your self-hosted instance)
Claude Desktop installed on your computer
Installation
Clone this repository:
git clone https://github.com/yourusername/maybe-finance-mcp.git
cd maybe-finance-mcpInstall dependencies:
npm installSet up environment variables:
# Create a .env file
cp .env.example .env
# Edit .env with your API credentials
API_BASE_URL=https://your-maybe-instance.com/api/v1
API_KEY=your-api-key-hereBuild the project:
npm run buildConfiguration
Claude Desktop Setup
Open Claude Desktop settings
Navigate to Developer → Model Context Protocol
Add the MCP server configuration:
{
"mcpServers": {
"maybe-finance": {
"command": "node",
"args": ["C:\\path\\to\\maybe-finance-mcp\\dist\\index.js"],
"env": {
"API_BASE_URL": "https://your-maybe-instance.com/api/v1",
"API_KEY": "your-api-key-here"
}
}
}
}API Configuration
The MCP server connects to your Maybe Finance instance via its REST API:
# Your Maybe Finance API endpoint
API_BASE_URL=https://your-maybe-instance.com/api/v1
# Your API key (get this from your Maybe Finance settings)
API_KEY=your-api-key-hereThe API key should be kept secure and never committed to version control.
📋 Complete Tool Reference
Account Management Tools
get_accounts
List all accounts with balances and net worth calculation.
Parameters:
includeBalance(boolean): Include current balance (default: true)groupByType(boolean): Group accounts by type (default: false)
get_account_balance
Get detailed balance information for a specific account.
Parameters:
accountId(string, required): Account ID
Transaction Management Tools
get_transactions
Retrieve transactions with powerful filtering options.
Parameters:
accountId(string): Filter by accountstartDate(string): Start date (ISO format)endDate(string): End date (ISO format)category(string): Filter by categorylimit(number): Maximum results (default: 100)offset(number): Pagination offset
search_transactions
Search transactions by text query.
Parameters:
query(string, required): Search queryaccountId(string): Limit to specific accountlimit(number): Maximum results
create_transaction
Create a new transaction.
Parameters:
accountId(string, required): Account IDamount(string, required): Amount (negative for expenses)date(string, required): Transaction datename(string, required): Transaction name/descriptioncategory(string): Category namemerchant(string): Merchant nametags(array): Transaction tagsnotes(string): Additional notes
update_transaction
Update an existing transaction.
Parameters:
transactionId(string, required): Transaction IDcategory(string): New categoryexcluded(boolean): Exclude from reportsname(string): New nameamount(string): New amountdate(string): New datemerchant(string): New merchantnotes(string): New notestags(array): New tags
categorize_transaction
Categorize a single transaction.
Parameters:
transactionId(string, required): Transaction IDcategory(string, required): Category name
bulk_categorize
Categorize multiple transactions at once.
Parameters:
transactionIds(array, required): Array of transaction IDscategory(string, required): Category name
Cash Flow Analysis Tools
get_cash_flow
Analyze cash flow for a specific period.
Parameters:
days(number): Number of days to analyze (default: 30)accountIds(array): Specific accounts to includeincludeForecasted(boolean): Include forecasted data
get_rolling_cash_flow
Get rolling cash flow metrics over time.
Parameters:
period(string): Period type (week/month/quarter)periods(number): Number of periods (default: 6)accountIds(array): Specific accounts to include
forecast_cash_flow
Predict future cash flow with confidence intervals.
Parameters:
days(number, required): Days to forecastincludeSeasonality(boolean): Consider seasonal patternsconfidenceLevel(number): Confidence level (0.8-0.99)
Category Management Tools
get_categories
List all available categories including special categories.
Parameters: None
create_category
Create a custom category.
Parameters:
name(string, required): Category nameparentCategory(string): Parent category for hierarchycolor(string): Hex color codeicon(string): Icon identifier
get_spending_breakdown
Analyze spending by category.
Parameters:
days(number): Analysis period (default: 30)includeAssets(boolean): Include asset purchases
Import/Export Tools
import_csv
Import transactions from CSV file.
Parameters:
accountId(string, required): Target account IDcsvContent(string, required): CSV contentencoding(string): base64 or utf8 (default: utf8)fieldMapping(object): Custom field mappingdateFormat(string): Date format in CSVskipDuplicates(boolean): Skip duplicate detectionautoCategarize(boolean): Auto-categorize importsdryRun(boolean): Preview without importing
analyze_csv
Analyze CSV structure before import.
Parameters:
csvContent(string, required): CSV contentencoding(string): base64 or utf8sampleRows(number): Rows to analyze (default: 5)
Automation Tools
auto_categorize_all
Automatically categorize all uncategorized transactions.
Parameters:
dryRun(boolean): Preview changes (default: true)startDate(string): Process from dateoverwriteExisting(boolean): Re-categorize existing
get_categorization_rules
View all active categorization rules.
Parameters: None
💡 Example Usage in Claude
Basic Queries
"What's my current account balance?"
"Show me all transactions from last month"
"How much did I spend on groceries this week?"Transaction Management
"Create a transaction for $50 coffee shop expense today"
"Update the Netflix transaction to the Subscriptions category"
"Import my bank statement CSV file"Analytics & Insights
"Show me my cash flow for the last 30 days"
"What are my biggest expense categories?"
"Forecast my cash flow for the next 2 weeks"
"Give me a spending breakdown by category"Automation
"Auto-categorize all my transactions"
"Show me the categorization rules"
"Bulk categorize all coffee transactions as Dining"🔧 Development
Run in Development Mode
npm run devRun Tests
npm testLint Code
npm run lint🔒 Security Notes
The MCP server runs locally on your machine
API credentials are stored in your local environment
All communication with Maybe Finance is over HTTPS
The API key provides scoped access to your financial data
No data is sent to third-party servers
Sensitive data is never logged or exposed
🐛 Troubleshooting
Connection Issues
Verify your API endpoint URL is correct
Check that your API key is valid
Ensure your Maybe Finance instance is accessible
Check firewall/proxy settings
Authentication Errors
Regenerate your API key in Maybe Finance settings
Check the API key is correctly set in environment variables
Verify the API key has necessary permissions
Tool Errors
Ensure account IDs are valid UUIDs
Check date formats (ISO 8601 preferred)
Verify category names match exactly
Check transaction amounts are properly formatted
📝 License
MIT
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
🙏 Acknowledgments
Built for Maybe Finance - Open source personal finance app
Powered by Model Context Protocol
Designed for use with Claude Desktop
Available Tools
18 toolsanalyze_csvB
Analyze CSV structure before import
| Name | Required | Description | Default |
|---|---|---|---|
| csvContent | Yes | CSV file content to analyze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavioral traits. It merely says 'analyze CSV structure' and does not state whether the operation is read-only, what it returns, how malformed input is handled, or any side effects. This lack of transparency leaves the agent uncertain about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant wording. It is front-loaded with the core purpose and does not waste 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 tool with no output schema and no annotations, the description should clarify what the analysis returns (e.g., column list, format validation, or error flags). The current description omits this critical information, leaving the agent unable to interpret the tool's result and decide whether to proceed with import.
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 describes the only parameter csvContent as 'CSV file content to analyze', providing 100% coverage. The description adds minimal extra meaning by focusing on 'structure', which suggests format analysis rather than data analysis, but this is a minor addition.
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 'analyze' with the resource 'CSV structure' and adds temporal context 'before import'. This distinguishes it from the sibling tool import_csv and other tools, though it does not elaborate on what the analysis entails.
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 phrase 'before import' provides a clear contextual guideline for when to use this tool, implying it should precede import_csv. It does not mention alternatives or exclusions, but the temporal context is sufficient for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_categorize_allB
Auto-categorize all uncategorized transactions
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview without applying changes | |
| endDate | No | End date for categorization | |
| accountId | No | Filter by account ID | |
| startDate | No | Start date for categorization |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It does not explain how categorization is applied (e.g., based on rules), whether changes are permanent, or how to preview with dryRun (though dryRun is in the schema). The behavior is underspecified for a bulk mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is concise, front-loaded, and contains no fluff. It immediately conveys the tool's core function without extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description is incomplete. It doesn't mention what happens on success, whether the operation is reversible, or any side effects. For a bulk mutation tool, more context is needed to understand the tool's impact.
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 all four parameters with descriptions, so the baseline is 3. The description adds no parameter-level meaning beyond the schema, but it doesn't need to since schema coverage is 100%.
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 a specific action ('Auto-categorize') applied to a well-defined resource ('all uncategorized transactions'). It distinguishes from single-transaction categorization tools like categorize_transaction by emphasizing the exhaustive scope and automatic 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?
No guidance is provided on when to use this tool versus alternatives such as bulk_categorize or categorize_transaction. The description implies a batch operation but does not state exclusions, prerequisites, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_categorizeA
Categorize multiple transactions at once
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category to apply to all | |
| transactionIds | Yes | List of transaction IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for disclosing behavior. It only states the action and scope, providing no detail on side effects, atomicity, overwrite semantics, error handling, or permission requirements. This is a significant transparency gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It delivers the core purpose 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?
The tool is simple with only two parameters and no output schema, but the description omits important behavioral context such as return values, partial failure handling, or whether the operation is atomic. Given the lack of annotations, this leaves the agent with unanswered questions, though the low complexity keeps it from being severely incomplete.
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%: both 'transactionIds' and 'category' have descriptive text. The tool description itself adds no further meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Categorize multiple transactions at once' clearly identifies the verb (categorize), the resource (transactions), and the multi-item scope. It effectively distinguishes itself from the sibling 'categorize_transaction' tool by highlighting that it handles multiple transactions at once.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for bulk operations ('multiple transactions') but does not explicitly state when to use it over alternatives, nor provide exclusions or prerequisites. It is minimally sufficient but lacks direct comparison to singular categorization or other related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
categorize_transactionC
Quick categorization of a transaction
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | Category name | |
| transactionId | Yes | Transaction ID to categorize |
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 only says 'Quick categorization' and does not mention whether existing categories are overwritten, whether the operation is idempotent, what permissions are needed, or what side effects occur. This is severely inadequate for a mutation tool.
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 short and front-loaded, but it is more under-specified than appropriately concise. The word 'Quick' adds little value, and the phrase mostly restates the tool name without providing meaningful 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?
For a mutation tool with no annotations and no output schema, this one-liner fails to explain operational behavior, return values, or how it differs from bulk/automated categorization. While the schema covers the parameters, the description lacks essential context for an agent to invoke it confidently.
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 provides 100% coverage with descriptions for both parameters (transactionId and category), so the schema already documents the parameter meanings. The description adds no additional semantic value beyond what the schema provides, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (categorize) and the object (a transaction). However, it doesn't explicitly distinguish itself from sibling tools like bulk_categorize or auto_categorize_all beyond the vague word 'Quick.'
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 such as bulk_categorize, auto_categorize_all, or update_transaction. The intended single-transaction scope is only implied by the tool name and the word 'Quick.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_categoryB
Create a new category
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Category icon name | |
| name | Yes | Category name | |
| color | No | Category color (hex code) | |
| parentCategory | No | Parent category name for subcategory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the action without addressing potential side effects, uniqueness constraints, validation, or error behavior. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words, but it is overly terse. While it is structured understandably, it lacks informative content that could be incorporated without sacrificing 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 tool has four parameters and no annotations or output schema, the description is insufficiently complete. It does not explain the context of category creation, subcategory relationships, or relationships to sibling tools, leaving the agent without a full understanding of the operation.
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 explains all four parameters. The description adds no additional semantic value beyond the schema, which meets the baseline but does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new category' clearly states the specific verb (create) and resource (category), distinguishing it from sibling tools like create_transaction. It is unambiguous and directly names the 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?
There is no guidance on when to use this tool vs alternatives, such as checking existing categories with get_categories or relating it to categorization tools. No prerequisites or exclusions are mentioned, leaving the agent without context for appropriate invocation.
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
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Transaction date (ISO format or DD-MM-YYYY) | |
| name | Yes | Transaction name/description | |
| tags | No | Transaction tags | |
| notes | No | Additional notes | |
| amount | Yes | Transaction amount (negative for expenses, positive for income) | |
| category | No | Category name | |
| merchant | No | Merchant name | |
| accountId | Yes | Account ID for the transaction |
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 reveals nothing about side effects, permissions, idempotency, response format, or error states. For a mutation tool, this is a significant gap, essentially providing no transparency beyond the action itself.
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 and front-loaded, but it is essentially a restatement of the tool name. It is concise but under-specified, lacking any additional context. While it doesn't waste words, it borders on tautology and misses opportunities to add useful 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 tool has 8 parameters, no output schema, and no annotations, the description is inadequate. It fails to explain return values, side effects, or usage context. The schema covers parameters, but the behavioral and contextual gaps make this incomplete for an agent to use 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?
The schema description coverage is 100%, so every parameter is documented in the schema. The description adds no additional meaning beyond the schema, which already explains fields like amount (negative for expenses), date format, and required fields. Therefore, the 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 'Create a new transaction' uses a specific verb and resource, clearly indicating the action of creating a transaction. It is distinct from siblings like update_transaction or categorize_transaction, though it lacks explicit scope details to fully distinguish it from bulk-creation tools like import_csv.
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, no prerequisites, no context about required inputs or typical scenarios. It merely states 'Create a new transaction' with no mention of alternative tools or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forecast_cash_flowC
Forecast future cash flow based on historical data
| Name | Required | Description | Default |
|---|---|---|---|
| days | Yes | Number of days to forecast | |
| accountId | No | Filter by account ID | |
| includeRecurring | No | Include detected recurring transactions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description must carry the full burden for behavioral disclosure. It mentions the reliance on historical data, but does not indicate whether this is a read-only operation, any limitations of the forecast, or what the output contains. This is a clear 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, clear sentence with no redundant words. It earns its place and is 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 there is no output schema, the description should explain what the forecast result looks like or how it is presented. It also lacks context about data scope or how the historical data is used. The minimal text leaves too much unspecified for a forecast 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?
The schema already provides complete descriptions for all three parameters (days, accountId, includeRecurring), so the description needs no additional parameter explanations. Baseline score of 3 is appropriate since the description adds no extra semantics beyond the 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 a specific verb ('Forecast') and resource ('future cash flow') and adds the basis ('historical data'), which distinguishes it from historical reporting tools like get_cash_flow. However, it does not explicitly contrast with siblings like get_rolling_cash_flow, so it's not a full 5.
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 such as get_cash_flow or get_rolling_cash_flow. The description only states what it does, with no mention of appropriate contexts, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_balanceA
Get current balance for a specific account
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states only the basic action and does not mention read-only nature, authentication requirements, error behavior, or what the response looks like. Similar to the MID example, this is a clear gap for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded with the verb and noun, and every word earns its place. Extremely 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 tool is simple (1 parameter, no output schema), so the description is minimally sufficient for understanding the basic action. However, it lacks information about return values, error conditions, or any behavioral nuances. For a straightforward getter, this is acceptable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (accountId is described as 'Account ID'). The description adds minimal extra meaning ('specific account' merely echoes the parameter). Since the schema is well-covered, the 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?
The description 'Get current balance for a specific account' uses a clear verb and resource, and clearly differentiates from sibling tools like get_accounts (which lists accounts, not balances) or get_transactions. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the current balance of a known account is needed, but it does not explicitly state when NOT to use this tool or mention alternatives. The context is clear from the purpose, but no explicit guidance or exclusions are provided, so it stays at the 'implied usage' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountsB
Get list of all accounts with their balances
| Name | Required | Description | Default |
|---|---|---|---|
| groupByType | No | Group accounts by type (default: false) | |
| includeBalance | No | Include current balance (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states 'with their balances' but does not disclose that 'includeBalance' can exclude balances, nor does it describe the output format, side effects, or permissions. The behavior is only partially revealed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that immediately conveys the core function. No fluff or redundant phrasing; every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description gives the essential purpose, but it omits differentiation from the linked sibling tool and does not enumerate the returned fields (only mentions balances). It is adequate but lacks depth for full context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema. The description adds no additional parameter-level meaning beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get list') and clearly identifies the resource ('all accounts with their balances'). It distinguishes from sibling tool 'get_account_balance' by emphasizing the plural 'all accounts' versus a single account balance.
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 does not mention that 'get_account_balance' should be used for a single account, nor are there any exclusions or context for when this list is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cash_flowC
Get cash flow analysis for a period
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | End date (ISO format or DD-MM-YYYY) | |
| accountId | No | Filter by account ID | |
| frequency | No | Aggregation frequency | |
| startDate | No | Start date (ISO format or DD-MM-YYYY) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. The description only implies a read-only operation ('Get') but discloses nothing about aggregation behavior, data inclusion rules, permissions, auth requirements, or return format. It adds little beyond what the tool name suggests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and easy to parse. However, it is somewhat under-specified given the tool's complexity and lack of annotations, so it earns a 4 rather than a 5.
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 moderate complexity (4 optional parameters, no output schema, no annotations, and several related siblings), the description is incomplete. It fails to explain what 'cash flow analysis' means, what the output looks like, or how this tool differs from get_rolling_cash_flow and forecast_cash_flow. The agent would need to inspect sibling tools or the schema to fully understand its role.
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 all four parameters with descriptions, so the baseline is 3. The tool description does not add any meaning beyond the schema; for example, it does not explain how 'frequency' interacts with the date range or what 'cash flow analysis' entails. The schema itself provides adequate parameter semantics.
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 the resource ('cash flow analysis'), with a temporal scope ('for a period'). This is a clear verb+resource pairing. However, it does not differentiate itself from sibling tools like get_rolling_cash_flow or forecast_cash_flow, as 'cash flow analysis' is generic.
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 does not mention prerequisites, exclusions, or scenarios where other tools like get_rolling_cash_flow or forecast_cash_flow would be more appropriate. The usage context is only implied by the name and the 'for a period' phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesB
Get all available categories
| Name | Required | Description | Default |
|---|---|---|---|
| includeUsageStats | No | Include usage statistics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavior. It only states 'Get all available categories,' which implies a read-only list operation but does not disclose response format, pagination, auth requirements, or how the optional includeUsageStats parameter affects results. Minimal transparency beyond the most basic intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded phrase with zero redundant words. 'Get all available categories' is concise and efficient, containing only essential information. There is no padding or unnecessary filler, 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?
For a simple list tool with one optional parameter and no output schema, the description gives a basic idea of the function. However, it omits any mention of the optional parameter's effect or what the response contains, which is notable since there is no output schema to fill that gap. It is adequate but lacks some context, justifying a mid-range score.
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 fully documents the sole parameter 'includeUsageStats' with a description, and schema coverage is 100%. The description does not add any additional meaning about the parameter, which is acceptable when the schema already provides complete coverage. Baseline 3 is appropriate since no extra parameter context is offered.
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 'Get all available categories' uses a specific verb and resource, clearly indicating the tool fetches categories. It distinguishes from siblings like get_accounts or get_transactions, as no other tool in the sibling set is dedicated to listing categories. The inclusion of 'all' clarifies scope, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no context about when to use this tool or how it compares to alternatives. There is no mention of prerequisites, typical use cases, or exclusions (e.g., 'use this before categorizing a transaction'). The usage is only implied by the tool name, but the description itself offers no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categorization_rulesB
Get current categorization rules and patterns
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the full burden of behavioral disclosure. It indicates a read operation ('Get') but provides no detail on the format of the rules, whether they are user-defined or system-generated, or any potential side effects. This is a significant gap for an agent deciding whether to invoke the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that communicates the tool's purpose without any unnecessary words. It is appropriately sized for a tool with no parameters and a straightforward getter behavior.
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 (zero parameters, no output schema), the description is minimally adequate. However, it lacks context about what constitutes a 'rule' or 'pattern' and how this tool relates to the sibling categorization tools (e.g., auto_categorize_all, categorize_transaction). Without an output schema, the description should clarify the return value better.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline score is 4 per the guidelines. The description adds no parameter-specific information, but there are no parameters to explain, making it sufficient.
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 'Get current categorization rules and patterns' uses a specific verb ('Get') and resources ('categorization rules and patterns'), making the tool's intent clear. It distinguishes from siblings like get_categories by focusing on rules/patterns rather than categories, but it does not explicitly differentiate from other getters like get_transactions 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?
No guidance is provided on when to use this tool versus alternatives. For example, it does not mention that this tool retrieves the rules used by auto_categorize_all, nor does it specify any prerequisites or contexts. The description only states what it does, leaving usage entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rolling_cash_flowC
Get rolling cash flow analysis
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Rolling period | |
| accountId | No | Filter by account ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It offers only a high-level phrase and says nothing about how the rolling period is applied, whether account filtering is supported beyond the schema, what data is returned, or any side effects. This is nearly negligible 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?
The description is a single sentence and is not verbose, but it is under-specified. It essentially restates the tool name ('Get rolling cash flow analysis' versus 'get_rolling_cash_flow') without adding useful information, so it does not earn its place as a clarifying description.
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 two optional parameters and no output schema, the description should explain what the analysis includes, expected output format, or default behavior. It provides none of that, relying solely on the schema for parameter meaning and leaving the tool's overall behavior largely undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters ('Rolling period' with an enum, and 'Filter by account ID'), achieving 100% coverage. The description adds no further meaning or examples, 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 'Get rolling cash flow analysis' clearly identifies the verb ('Get') and resource ('rolling cash flow analysis'). It distinguishes from the sibling 'get_cash_flow' by the word 'rolling', though it does not explicitly explain what makes it different beyond that.
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 does not mention any prerequisites, exclusions, or scenarios where another tool like 'get_cash_flow' would be more appropriate. The description simply states the action without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spending_breakdownC
Get spending breakdown by category for a time period
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | End date (ISO format or DD-MM-YYYY) | |
| groupBy | No | Group by category, merchant, or account | |
| accountId | No | Filter by account ID | |
| startDate | No | Start date (ISO format or DD-MM-YYYY) | |
| includeIncome | No | Include income in breakdown | |
| excludeTransfers | No | Exclude transfers from breakdown |
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, but it only states the basic action. It does not mention how grouping works, what data is included/excluded, or the output format. This is a significant gap for a tool with multiple optional filters.
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 and front-loaded, with no filler words. It is appropriately sized for a short summary, though the brevity sacrifices important clarifying details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 optional parameters, no output schema, and no annotations, the description is far too incomplete. It does not specify the return structure, how filters interact, or the grouping behavior. A more detailed description is necessary for an agent to use this tool confidently.
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 baseline is 3. The description adds no extra parameter context and even misrepresents the groupBy parameter by saying 'by category' when the schema allows merchant and account. No positive contribution beyond the 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 gives a clear verb ('Get') and resource ('spending breakdown'), indicating a report-oriented tool. However, it specifies 'by category' which is narrower than the actual groupBy parameter supporting category, merchant, and account, making it slightly misleading. It also does not differentiate from sibling tools like get_cash_flow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like get_cash_flow or get_transactions. No mention of prerequisites, typical use cases, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsC
Get transactions with various filters
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags | |
| limit | No | Number of results per page | |
| offset | No | Number of results to skip | |
| endDate | No | End date (ISO format or DD-MM-YYYY) | |
| category | No | Filter by category | |
| merchant | No | Filter by merchant name | |
| accountId | No | Filter by account ID | |
| maxAmount | No | Maximum amount filter | |
| minAmount | No | Minimum amount filter | |
| startDate | No | Start date (ISO format or DD-MM-YYYY) | |
| includeExcluded | No | Include excluded transactions | |
| excludeTransfers | No | Exclude transfer transactions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral details. It only says 'Get transactions' and does not mention pagination behavior, default filter settings, or how filters combine. The read-only nature is implied but not explicit.
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 (one sentence) but is under-specified. It lacks useful structure or differentiation, making it minimally viable but not helpful or informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters and no output schema or annotations, the description is too sparse. It fails to explain response format, default values, or how this tool relates to 'search_transactions'. The context is incomplete for a tool of this complexity.
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 no additional parameter meaning. A baseline of 3 is appropriate since the schema carries the full burden and the description contributes nothing beyond the tool's general purpose.
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 transactions') and the resource ('transactions'), but 'with various filters' is vague and does not differentiate this tool from the sibling 'search_transactions' which likely has a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like 'search_transactions'. The description provides no context about ideal use cases, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_csvB
Import transactions from CSV file
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID to import into | |
| csvContent | Yes | CSV file content | |
| dateColumn | No | Column name for date | |
| amountColumn | No | Column name for amount | |
| autoCategorize | No | Auto-categorize imported transactions | |
| skipDuplicates | No | Skip duplicate transactions | |
| descriptionColumn | No | Column name for description |
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 disclosing behavioral traits. It does not mention what happens to existing data, whether duplicates are skipped by default, what the import outcome looks like, or any error conditions. This lack of detail leaves significant behavioral ambiguity for an agent.
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, making it highly concise and front-loaded with the core purpose. Every word serves a function, and there is no unnecessary verbosity.
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 has 7 parameters, no output schema, and no annotations, the description is markedly incomplete. It fails to explain the import behavior, return values, potential side effects, or any prerequisites, leaving an agent without sufficient context to use the tool correctly beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the input schema provides descriptions for all 7 parameters (100% coverage), the description adds no additional meaning beyond the schema itself. The schema already documents each parameter, so the description's value here is redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function as importing transactions from a CSV file, using a specific verb 'Import' and identifying the resource 'transactions' and source 'CSV file'. This distinguishes it from sibling tools such as `analyze_csv`, which likely analyzes rather than imports.
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 such as `create_transaction` or `analyze_csv`. It lacks any context about scenarios where bulk CSV import is appropriate or prerequisites like file format.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_transactionsC
Search transactions by text query
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags | |
| limit | No | Number of results per page | |
| query | Yes | Search query | |
| offset | No | Number of results to skip | |
| category | No | Filter by category | |
| merchant | No | Filter by merchant | |
| accountId | No | Filter by account ID |
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 says 'Search transactions by text query' and discloses nothing about pagination, filtering behavior, result format, or any side effects. This is insufficient for a tool with this complexity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, it is so brief that it fails to convey necessary context for the multiple filter parameters, making it under-specified rather than appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and seven parameters, a one-line description is inadequate. It does not mention the available filters (tags, category, merchant, accountId), pagination (limit, offset), or what the search returns, leaving significant gaps for a tool of this complexity.
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?
All seven parameters have descriptions in the input schema, giving a baseline of 3. The description adds no additional meaning beyond the 'query' parameter, such as how filters interact or are combined.
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 'search' and resource 'transactions', and clarifies it searches by text query. This distinguishes it from sibling tools like get_transactions, though it could be more explicit about what differentiates it from related listing tools.
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 such as get_transactions or get_spending_breakdown. It simply states the action without context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_transactionC
Update an existing transaction
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tags (replaces existing) | |
| notes | No | New notes | |
| category | No | New category | |
| merchant | No | New merchant name | |
| description | No | New description | |
| transactionId | Yes | Transaction ID to update | |
| excludeFromReports | No | Exclude from reports |
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, but it only says 'Update an existing transaction.' It does not mention side effects, whether fields are replaced or merged, error behavior, or any prerequisites. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is efficiently structured and front-loaded, though it sacrifices helpful detail for brevity.
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 complexity (7 parameters, no output schema, no annotations), the description is incomplete. It does not explain the effect of omitted parameters, whether updates are partial or full replacements, or any expected outcomes. The schema covers parameter meanings, but the description lacks critical behavioral context for a mutation 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?
The input schema covers 100% of the parameters with descriptive text, so the baseline is 3. The description itself adds no parameter semantics beyond what the schema already provides, but it does not need to compensate due to the high 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 'Update an existing transaction' clearly identifies the verb and resource, and it distinguishes the tool from siblings like create_transaction and categorize_transaction. It does not elaborate on scope or specific fields, but it is specific enough to convey the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_transaction, categorize_transaction, or bulk_categorize. The description simply states the action without any context or exclusions.
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.
18 tool updates
v1.0.0- First observed
analyze_csv - First observed
auto_categorize_all - First observed
bulk_categorize - First observed
categorize_transaction - First observed
create_category - First observed
create_transaction - First observed
forecast_cash_flow - First observed
get_account_balance - First observed
get_accounts - First observed
get_cash_flow - First observed
get_categories - First observed
get_categorization_rules - First observed
get_rolling_cash_flow - First observed
get_spending_breakdown - First observed
get_transactions - First observed
import_csv - First observed
search_transactions - First observed
update_transaction
TDQS
Scored across 18 tools
Most tools target distinct resources and actions, but get_transactions and search_transactions overlap in purpose, potentially causing misselection. Other pairs like get_cash_flow and get_rolling_cash_flow are distinct enough in scope.
Tool names mostly follow a verb_noun snake_case pattern (e.g., get_accounts, create_transaction). Minor deviations like bulk_categorize and auto_categorize_all break the strict pattern but remain readable and predictable.
With 18 tools, the server is slightly above the ideal 3-15 range but still within a reasonable scope for a finance manager. Each tool addresses a specific need, though the count feels a bit heavy.
The server covers transaction management, categorization, cash flow, and CSV import well, but lacks account CRUD (create/update/delete) and category update/delete operations. These gaps are notable for a finance domain but not severe enough to break core workflows.
Maintenance
Related MCP Connectors
- Era ContextOAuthapp.era
Personal finance, bank account, and shared memory connector for Claude, ChatGPT, Gemini Spark & more
Personal-finance workspace for AI agents: accounts, spending, budgets, goals, and investments.
Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.
- ManiloOAuthapp.manilo
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage personal expenses through natural language conversations. Supports adding, searching, and analyzing transactions with automatic categorization and financial insights.3MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying personal finance data including accounts, transactions, spending, holdings, net worth, and budgets from your self-hosted OpenCoffer instance. Supports natural language queries through any MCP-compatible client.16MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with YNAB budgets, performing read-only queries by default and optional write operations like creating transactions and managing categories through natural language.39129 npm32MIT
- FlicenseNot gradedqualityDmaintenanceEnables users to manage personal finances using natural language, including tracking expenses, income, budgets, and generating financial summaries.-