Skip to main content
Glama
matvei77

Maybe Finance MCP Server

by matvei77

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

  1. Clone this repository:

git clone https://github.com/yourusername/maybe-finance-mcp.git
cd maybe-finance-mcp
  1. Install dependencies:

npm install
  1. Set 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-here
  1. Build the project:

npm run build

Configuration

Claude Desktop Setup

  1. Open Claude Desktop settings

  2. Navigate to Developer → Model Context Protocol

  3. 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-here

The 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 account

    • startDate (string): Start date (ISO format)

    • endDate (string): End date (ISO format)

    • category (string): Filter by category

    • limit (number): Maximum results (default: 100)

    • offset (number): Pagination offset

search_transactions

Search transactions by text query.

  • Parameters:

    • query (string, required): Search query

    • accountId (string): Limit to specific account

    • limit (number): Maximum results

create_transaction

Create a new transaction.

  • Parameters:

    • accountId (string, required): Account ID

    • amount (string, required): Amount (negative for expenses)

    • date (string, required): Transaction date

    • name (string, required): Transaction name/description

    • category (string): Category name

    • merchant (string): Merchant name

    • tags (array): Transaction tags

    • notes (string): Additional notes

update_transaction

Update an existing transaction.

  • Parameters:

    • transactionId (string, required): Transaction ID

    • category (string): New category

    • excluded (boolean): Exclude from reports

    • name (string): New name

    • amount (string): New amount

    • date (string): New date

    • merchant (string): New merchant

    • notes (string): New notes

    • tags (array): New tags

categorize_transaction

Categorize a single transaction.

  • Parameters:

    • transactionId (string, required): Transaction ID

    • category (string, required): Category name

bulk_categorize

Categorize multiple transactions at once.

  • Parameters:

    • transactionIds (array, required): Array of transaction IDs

    • category (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 include

    • includeForecasted (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 forecast

    • includeSeasonality (boolean): Consider seasonal patterns

    • confidenceLevel (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 name

    • parentCategory (string): Parent category for hierarchy

    • color (string): Hex color code

    • icon (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 ID

    • csvContent (string, required): CSV content

    • encoding (string): base64 or utf8 (default: utf8)

    • fieldMapping (object): Custom field mapping

    • dateFormat (string): Date format in CSV

    • skipDuplicates (boolean): Skip duplicate detection

    • autoCategarize (boolean): Auto-categorize imports

    • dryRun (boolean): Preview without importing

analyze_csv

Analyze CSV structure before import.

  • Parameters:

    • csvContent (string, required): CSV content

    • encoding (string): base64 or utf8

    • sampleRows (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 date

    • overwriteExisting (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 dev

Run Tests

npm test

Lint 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

Available Tools

18 tools
analyze_csvB

Analyze CSV structure before import

ParametersJSON Schema
NameRequiredDescriptionDefault
csvContentYesCSV file content to analyze

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoPreview without applying changes
endDateNoEnd date for categorization
accountIdNoFilter by account ID
startDateNoStart date for categorization

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesCategory to apply to all
transactionIdsYesList of transaction IDs

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryYesCategory name
transactionIdYesTransaction ID to categorize

TDQS

C2.6/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoCategory icon name
nameYesCategory name
colorNoCategory color (hex code)
parentCategoryNoParent category name for subcategory

TDQS

B3/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesTransaction date (ISO format or DD-MM-YYYY)
nameYesTransaction name/description
tagsNoTransaction tags
notesNoAdditional notes
amountYesTransaction amount (negative for expenses, positive for income)
categoryNoCategory name
merchantNoMerchant name
accountIdYesAccount ID for the transaction

TDQS

C2.6/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
daysYesNumber of days to forecast
accountIdNoFilter by account ID
includeRecurringNoInclude detected recurring transactions

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesAccount ID

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
groupByTypeNoGroup accounts by type (default: false)
includeBalanceNoInclude current balance (default: true)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date (ISO format or DD-MM-YYYY)
accountIdNoFilter by account ID
frequencyNoAggregation frequency
startDateNoStart date (ISO format or DD-MM-YYYY)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
includeUsageStatsNoInclude usage statistics

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoRolling period
accountIdNoFilter by account ID

TDQS

C2.4/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
endDateNoEnd date (ISO format or DD-MM-YYYY)
groupByNoGroup by category, merchant, or account
accountIdNoFilter by account ID
startDateNoStart date (ISO format or DD-MM-YYYY)
includeIncomeNoInclude income in breakdown
excludeTransfersNoExclude transfers from breakdown

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by tags
limitNoNumber of results per page
offsetNoNumber of results to skip
endDateNoEnd date (ISO format or DD-MM-YYYY)
categoryNoFilter by category
merchantNoFilter by merchant name
accountIdNoFilter by account ID
maxAmountNoMaximum amount filter
minAmountNoMinimum amount filter
startDateNoStart date (ISO format or DD-MM-YYYY)
includeExcludedNoInclude excluded transactions
excludeTransfersNoExclude transfer transactions

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesAccount ID to import into
csvContentYesCSV file content
dateColumnNoColumn name for date
amountColumnNoColumn name for amount
autoCategorizeNoAuto-categorize imported transactions
skipDuplicatesNoSkip duplicate transactions
descriptionColumnNoColumn name for description

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by tags
limitNoNumber of results per page
queryYesSearch query
offsetNoNumber of results to skip
categoryNoFilter by category
merchantNoFilter by merchant
accountIdNoFilter by account ID

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoNew tags (replaces existing)
notesNoNew notes
categoryNoNew category
merchantNoNew merchant name
descriptionNoNew description
transactionIdYesTransaction ID to update
excludeFromReportsNoExclude from reports

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 18 tool updatesv1.0.0
    • First observedanalyze_csv
    • First observedauto_categorize_all
    • First observedbulk_categorize
    • First observedcategorize_transaction
    • First observedcreate_category
    • First observedcreate_transaction
    • First observedforecast_cash_flow
    • First observedget_account_balance
    • First observedget_accounts
    • First observedget_cash_flow
    • First observedget_categories
    • First observedget_categorization_rules
    • First observedget_rolling_cash_flow
    • First observedget_spending_breakdown
    • First observedget_transactions
    • First observedimport_csv
    • First observedsearch_transactions
    • First observedupdate_transaction

TDQS

B3.1/5.0

Scored across 18 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    16
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables 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.
    39
    129 npm
    32
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables users to manage personal finances using natural language, including tracking expenses, income, budgets, and generating financial summaries.
    -