Skip to main content
Glama
joshuarreid

WhatsMyBudgetMCP

by joshuarreid

WhatsMyBudgetMCP

TypeScript MCP server for the WhatsMyBudget Analytics API (/api/analytics) built with FastMCP.

What changed

  • MCP infrastructure migrated to fastmcp

  • Existing API integration/business logic preserved

  • Tool names, descriptions, and response payload shapes preserved

  • Tool registration split into modular files for easier future additions

Related MCP server: ynab-mcp-bridge

Requirements

  • Node.js 20+

  • npm

Environment variables

Copy .env.example to .env and set values:

  • WMB_API_BASE_URL (example: https://api.example.com)

  • WMB_BEARER_TOKEN (optional; sent only when set)

  • WMB_TIMEOUT_MS (optional, default 15000)

  • WMB_TRANSPORT (optional: stdio or httpStream; default auto-detect)

  • PORT (optional; when set, server defaults to httpStream on this port)

  • WMB_HTTP_HOST (optional; default 0.0.0.0 for httpStream)

Project structure

src/
  index.ts
  server.ts
  config.ts
  schemas/
    analytics.ts
  services/
    apiClient.ts
    auth.ts
  tools/
    index.ts
    registerApiTool.ts
    analytics/
      registerMetadataTools.ts
      registerPeriodTools.ts
      registerRangeTools.ts
      registerSummaryTools.ts
    health/
      registerHealthTool.ts

Local setup (development)

  1. Clone and enter the project.

  2. Create your local env file.

  3. Install dependencies.

  4. Build and run tests.

  5. Run the MCP server over stdio.

cp .env.example .env
npm install
npm run build
npm test
npm run dev

Optional smoke check (calls GET /api/analytics/periods):

npm run smoke

Production runtime command (compiled):

npm run build
npm start

Exposed MCP tools

  • analytics_health

  • analytics_periods_list

  • analytics_categories_distinct_global

  • analytics_period_overview

  • analytics_period_categories

  • analytics_period_categories_distinct

  • analytics_period_categories_top

  • analytics_period_accounts

  • analytics_period_payment_methods

  • analytics_period_criticality

  • analytics_period_daily

  • analytics_period_duplicates

  • analytics_period_uncategorized

  • analytics_period_outliers

  • analytics_range_overview

  • analytics_range_categories

  • analytics_range_categories_top

  • analytics_range_accounts

  • analytics_range_payment_methods

  • analytics_range_criticality

  • analytics_range_daily

  • analytics_range_duplicates

  • analytics_range_uncategorized

  • analytics_range_outliers

  • analytics_summary_by_period

  • analytics_summaries_range

Production setup on DigitalOcean

This server supports both MCP stdio and httpStream transports.

  • If PORT is set at runtime, it starts httpStream on 0.0.0.0:$PORT.

  • Otherwise it defaults to stdio for local process-based MCP clients.

Use this when your agent runs on the same Droplet and launches this MCP server as a local process.

  1. Provision an Ubuntu Droplet.

  2. Install Node.js 20+ and npm.

  3. Clone the repo and configure env vars.

  4. Build and run as a long-lived process.

Example commands after SSH:

git clone <your-repo-url>
cd WhatsMyBudgetMCP
cp .env.example .env
npm install
npm run build
npm start

For process supervision in production, use a service manager like systemd or PM2.

Option B: Docker on Droplet

If your agent can execute Docker commands locally on the host, run the MCP server in a container.

docker build -t whatsmybudget-mcp:latest .
docker run --rm \
  -e WMB_API_BASE_URL="https://api.example.com" \
  -e WMB_TIMEOUT_MS="15000" \
  whatsmybudget-mcp:latest

If your backend enforces auth, include -e WMB_BEARER_TOKEN="your-token".

App Platform note

DigitalOcean App Platform can run this server when PORT is injected by the platform (default behavior). The server will bind to 0.0.0.0:$PORT and expose MCP at /mcp with health at /health.

Available Tools

26 tools
analytics_categories_distinct_globalA
Read-only

List distinct categories across all analytics data. When to use: Use when the user wants the set of all category names across the whole dataset. Trigger words: all categories, distinct categories, category list

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. Description adds scope and distinctness but no deeper behavioral insights. Adequate but not enhanced.

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?

Extremely concise, straight to the point with no fluff. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool, it covers purpose and usage. Lacks mention of return format (e.g., sorted) but sufficient given simplicity.

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?

No parameters, and schema coverage is 100%. Description is not required to add parameter details, but could hint at output format. Still meets expectation.

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 'List distinct categories across all analytics data' with specific verb and scope. It distinguishes from sibling tools like analytics_period_categories_distinct by indicating 'global' scope.

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?

Provides explicit 'When to use' section and trigger words. Lacks explicit when-not-to-use but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_healthA
Read-only

Verify connectivity to WhatsMyBudget analytics API. When to use: Use only for connectivity, uptime, or authorization checks. Trigger words: health, status, connectivity, is it working

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint and openWorldHint. Description adds context about authorization checks, which is useful. No contradictions.

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?

Three sentences, front-loaded with purpose. Trigger words list may be slightly extraneous but overall efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple health check tool. Provides purpose, usage context, and trigger words. No output schema needed.

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?

No parameters, baseline 4. Schema coverage 100%, description adds no parameter info but none needed.

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?

Description clearly states the verb 'Verify connectivity' and the resource 'WhatsMyBudget analytics API'. It distinguishes from sibling tools which are all about analytics data retrieval.

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?

Explicitly states when to use: 'connectivity, uptime, or authorization checks' and provides trigger words. Could be more explicit about when not to use, but sufficient for its simplicity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_accountsA
Read-only

Get account breakdown for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for account totals inside one statement period. Trigger words: by account, account breakdown, statement accounts

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
paymentMethodNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so description does not need to restate. However, it adds no extra behavioral context beyond what annotations imply, such as output format or pagination.

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?

Every sentence adds value: purpose, prerequisite, usage condition, and trigger words. No redundant information.

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?

While prerequisite and trigger words are helpful, the description fails to explain the parameters or output. Given the tool's low complexity (2 params, no nested objects), the gap is moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet description provides no explanation of either parameter (period, paymentMethod). The agent lacks guidance on what values to provide, especially for the optional paymentMethod.

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?

Description clearly states 'Get account breakdown for a statement period' with a specific verb and resource. It distinguishes from sibling tools like analytics_range_accounts by emphasizing 'one statement period'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides prerequisite (call analytics_periods_list first), specifies when to use (account totals inside one period), and lists trigger words. This gives clear guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_categoriesA
Read-only

Get category breakdown for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for category spending inside one statement period, including food questions where food should be interpreted as dining out plus groceries. Trigger words: period categories, monthly categories, category breakdown, food, food spending, dining out, groceries

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
paymentMethodNo
accountNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds value beyond readOnlyHint and openWorldHint by specifying that 'food' should be interpreted as dining out plus groceries. No contradictions with annotations.

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?

Concise with clear sections: function, prerequisite, when-to-use, trigger words. Every sentence is useful, no redundancy.

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?

No output schema and description lacks details on return format. With 3 parameters and 0% schema coverage, the description should compensate but does not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and description does not explain parameters. Only 'period' is implied but paymentMethod and account are not described.

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?

Clearly states 'Get category breakdown for a statement period' and distinguishes from siblings by specifying it's for one period with category spending. Includes trigger words for easy selection.

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?

Explicitly instructs to call analytics_periods_list first and what to do if period missing. Provides when-to-use guidance including special interpretation of 'food'. Does not explicitly list alternatives but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_categories_distinctA
Read-only

List distinct categories in a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use to discover which categories exist in one statement period. Trigger words: distinct categories, list categories, available categories

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true. Description adds no further behavioral details (e.g., no mention of result format or error handling). But it is consistent and does not contradict annotations.

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?

Very concise, front-loaded with purpose, then usage guidance, then trigger words. No wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 parameter and no output schema, the description covers prerequisite, use cases, and trigger words. Lacks return format details but still adequate given context signals.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'period' is required with minLength:1 but no description in schema (0% coverage). Description mentions period only in the prerequisite context without clarifying format, expected values, or examples. Fails to compensate for missing schema documentation.

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 'List distinct categories in a statement period', specifying a verb, resource, and scope. It distinguishes from siblings like analytics_categories_distinct_global (global scope) and analytics_period_categories (likely more detailed listing).

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?

Provides explicit prerequisite (call analytics_periods_list first) and when to use ('discover which categories exist in one statement period'). Includes trigger words. Does not explicitly exclude use cases for siblings but is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_categories_topA
Read-only

Get top categories for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for top-N category questions inside one statement period, including food questions where food means dining out plus groceries. Trigger words: top categories, highest categories, ranked categories, food, dining out, groceries

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
limitNo
paymentMethodNo
accountNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint and openWorldHint. The description adds value by clarifying that 'food means dining out plus groceries', which is a non-obvious behavioral detail. This contextual nuance helps agents interpret user intent correctly.

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 short and front-loaded with the core purpose. Usage guidelines and trigger words are provided without redundancy. Minor improvement could be structuring parameter descriptions, but overall efficient.

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 no output schema and 4 undocumented parameters, the description lacks key context. It does not describe the return format, pagination, or how categories are sorted. The prerequisites and trigger words help, but the incompleteness reduces the tool's usability.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides no explanation of parameters. It fails to define 'period', 'limit', 'paymentMethod', or 'account', leaving the agent without essential guidance on how to fill these fields.

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 'Get top categories for a statement period', specifying the verb, resource, and scope. It differentiates from siblings like 'analytics_period_categories' (all categories) and 'analytics_range_categories_top' (range-based) by targeting a specific period and top-N results.

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?

Provides explicit prerequisite: 'Call analytics_periods_list first to confirm the requested period exists.' Also defines when to use (top-N category questions, including food-specific triggers). However, it does not mention when not to use or explicitly name alternatives such as 'analytics_range_categories_top' for range queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_criticalityB
Read-only

Get criticality breakdown for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for criticality/severity breakdowns inside one statement period. Trigger words: criticality, severity, risk

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
paymentMethodNo
accountNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true. Description adds no new behavioral traits (e.g., no side effects, rate limits, or authentication needs). It only restates the tool's focus on criticality, which is already in the name.

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?

Three concise sentences, each serving a distinct purpose: purpose, prerequisite, and usage keywords. No fluff, front-loaded with the core action.

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?

Missing parameter explanations and output description. No output schema exists, so description should hint at return format. The prerequisite steps are good, but incomplete for a tool with three parameters and no schema documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% with no parameter descriptions. The description does not mention any parameters or their meaning. With low coverage, the description must compensate but completely fails to explain period, paymentMethod, or account semantics.

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?

Description clearly states 'Get criticality breakdown for a statement period' with a specific verb and resource. It distinguishes from siblings by specifying 'inside one statement period', contrasting with the range-criticality sibling tool. Trigger words further aid selection.

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?

Explicit prerequisite: call analytics_periods_list first. Usage context is clear: 'Use for criticality/severity breakdowns inside one statement period.' Does not explicitly mention when not to use or list alternatives, but the sibling context and scope make it adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_dailyA
Read-only

Get daily totals for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use when you need day-by-day totals within one statement period. Trigger words: daily totals, by day, day-by-day, timeline

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
paymentMethodNo
accountNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that it returns 'day-by-day totals' but does not elaborate on return format or pagination. No contradictions, but limited additional value beyond annotations.

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 concise and well-structured: purpose first, then prerequisite, then usage, then trigger words. Every sentence adds value with no redundancy.

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?

While the description covers prerequisite and usage context, it fails to explain the optional parameters (paymentMethod, account) and does not describe the output format. Given the 3 required/optional params and no output schema, the description should provide more completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description does not explain the meaning or expected format of the three parameters (period, paymentMethod, account), leaving the agent to guess. The only hint is 'statement period' in the purpose, but no parameter-level detail.

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 'Get daily totals for a statement period,' providing a specific verb and resource. The trigger words ('daily totals, by day, day-by-day, timeline') help distinguish from sibling tools like analytics_period_overview or analytics_range_daily.

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?

Explicitly instructs to call analytics_periods_list first to verify the period exists, and advises asking the user if missing. The 'When to use' section specifies the exact scenario. However, it does not mention alternative tools by name for other use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_duplicatesA
Read-only

Find duplicate row hash groups for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use to detect duplicate transaction groups inside one statement period. Trigger words: duplicates, duplicate rows, duplicate transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. The description adds a prerequisite step but does not disclose additional behavioral traits like rate limits, data freshness, or error handling. Without annotations, this would be a 2, but with them, the description is adequate but not exceptional.

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 concise (three lines) and well-structured with clear sections for purpose, prerequisite, usage, and trigger words. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema), the description covers the essential aspects: what it does, prerequisite, and when to use. It does not describe return format or error behavior, but these are not critical given the lack of output schema.

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 schema has a single required 'period' parameter with 0% description coverage. The description adds context by linking 'period' to a statement period and recommending calling analytics_periods_list to get valid values, which compensates for the schema gap.

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 'Find duplicate row hash groups for a statement period,' using a specific verb and resource. It distinguishes this tool from siblings like analytics_range_duplicates and other analytics_period_* tools by focusing on duplicates within a single period.

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 description provides explicit prerequisite guidance ('Before calling: Call analytics_periods_list first') and defines when to use with trigger words. It does not explicitly exclude cases but provides sufficient context for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_outliersA
Read-only

Get largest transactions in a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for largest or unusual transaction questions inside one statement period. Trigger words: outliers, largest transactions, unusual spending, biggest transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, providing safety and openness context. Description adds that it fetches 'largest transactions' but does not elaborate on ordering, pagination, or limits beyond schema. Adds some value but not substantial beyond annotations.

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?

Description is well-structured with clear sections (Before calling, When to use, Trigger words) and front-loaded key information. Length is appropriate, but could be slightly more concise by merging some phrases.

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?

While usage guidelines are solid, the description fails to explain parameter semantics and does not hint at the return structure (e.g., list of transactions with amounts, dates). With no output schema, this omission leaves the agent guessing about the tool's full behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description provides no explanation of the two parameters (period, limit) or their semantics. The agent must rely solely on the schema names and types, which lack descriptions, making parameter usage unclear.

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?

Description clearly states 'Get largest transactions in a statement period', specifying verb, resource, and scope. It differentiates from sibling tools like analytics_range_outliers by focusing on a single period.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to call analytics_periods_list first to confirm period existence, and advises asking user if missing. Provides 'When to use' context and trigger words, clearly delineating when to use this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_overviewA
Read-only

Get statement period totals and transaction count. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for a named statement period total and count, especially when the user says a month or billing period. Trigger words: statement period, period total, monthly overview, april 2026, month spend

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
paymentMethodNo
accountNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true and openWorldHint=true, so the description's statement about getting totals and count is consistent. No additional behavioral traits are disclosed beyond what annotations imply.

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, with essential usage guidance and trigger words. One unnecessary redundancy: 'Trigger words' list could be more concise, but overall 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?

For a tool with 3 parameters and no output schema, the description lacks details about what totals are returned (e.g., currency, categories) and does not fully explain all parameters. The prerequisite guidance adds value but completeness is moderate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meanings. However, it only implicitly mentions 'period' and does not explain 'paymentMethod' or 'account' fields.

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 states 'Get statement period totals and transaction count,' which is a clear verb and resource. It distinguishes from many sibling period tools that focus on specific aspects like categories or daily breakdowns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit before-call guidance to call analytics_periods_list first and ask user for available periods if missing. Also gives when-to-use criteria and trigger words for the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_payment_methodsA
Read-only

Get payment method breakdown for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use for payment-method totals inside one statement period. Trigger words: payment methods, cards, cash, statement payments

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes
accountNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description confirms read-only behavior ('Get') and adds the context of validating the period exists via a prerequisite. It does not elaborate on the openWorldHint or any other behavioral traits, so it adds moderate value beyond annotations.

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 front-loaded with the purpose and includes a prerequisite, usage context, and trigger words in 5 sentences. It is reasonably concise, though the trigger word list could be omitted for brevity.

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 tool with no output schema, the description covers purpose, prerequisite, and usage context but does not describe the return value structure (e.g., what fields the breakdown contains). It also lacks detail on the optional account parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has two parameters (period required, account optional) with no descriptions (0% coverage). The description does not explain these parameters, their formats, or their meaning beyond implying period is a statement period. It fails to compensate for the missing schema descriptions.

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 purpose: 'Get payment method breakdown for a statement period.' This is a specific verb ('Get') and resource ('payment method breakdown') that distinguishes it from sibling tools like analytics_period_accounts or analytics_period_categories.

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 description provides a prerequisite ('Before calling: Call analytics_periods_list first to confirm the requested period exists') and explicit when-to-use guidance ('Use for payment-method totals inside one statement period'). It also offers trigger words. It does not explicitly list alternatives or when not to use, but the sibling set makes the context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_periods_listA
Read-only

List available statement periods. When to use: Use when the user asks which statement periods are available or needs a valid period value. Trigger words: available periods, list periods, what months exist

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, and the description is consistent. No additional behavioral disclosure is needed due to the tool's simplicity.

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?

Extremely concise with front-loaded purpose, followed by usage guidance. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, simple list tool with annotations, the description is complete. It tells what it does and when to use it, sufficient to select among siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and the description adds context about the return value (list of available periods), which is helpful beyond the schema.

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 it lists available statement periods, which is a specific verb and resource. It distinguishes from sibling tools that focus on period-specific analytics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use the tool (when user asks for available periods or needs a valid period value) and includes trigger words for easy identification.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_period_uncategorizedA
Read-only

Get uncategorized transactions for a statement period. Before calling: Call analytics_periods_list first to confirm the requested period exists. If missing, ask the user to choose from available periods. When to use: Use to find uncategorized transactions inside one statement period. Trigger words: uncategorized, missing category, unclassified

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. Description adds no new behavioral traits beyond purpose; it does not contradict annotations. Adequate but not extra.

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?

Three sentences plus trigger words, front-loaded with main purpose, then prerequisite, then usage context. No redundant information.

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?

Covers prerequisite and usage context but fails to describe the output (e.g., returns a list of transactions). Given no output schema, this is a notable omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description does not clarify the format of the required 'period' parameter (e.g., 'YYYY-MM' or ID). With 0% schema coverage, this is a significant gap for correct invocation.

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?

Clearly states 'Get uncategorized transactions for a statement period' with a specific verb, resource, and scope. Distinguishes from siblings like analytics_range_uncategorized by specifying 'statement period' and provides trigger words.

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?

Provides explicit prerequisite: call analytics_periods_list first. Includes trigger words for when to use. Lacks explicit exclusion of alternatives but context implies use for single period only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_accountsC
Read-only

Get account breakdown for a date range. When to use: Use for account-level totals across a custom date range. Trigger words: account breakdown, by account, range accounts

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, indicating safe read operations with variable results. The description only restates the basic function ('account breakdown') without adding behavioral traits such as pagination, aggregation type, or authentication requirements. It is consistent with annotations, no contradiction.

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 short and front-loaded: three lines with the core purpose first, then usage guidance and trigger words. Every sentence adds value, though the trigger words could be placed separately. No unnecessary repetition.

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 three parameters, no output schema, and minimal annotations, the description should provide more context. It does not explain the output format, how paymentMethod affects results, or any edge cases (e.g., overlapping ranges). Incomplete for effective AI agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It mentions 'date range' implying startDate/endDate but does not describe their format or purpose, and completely omits the optional paymentMethod parameter. No details on regex patterns or constraints 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 the tool's purpose: 'Get account breakdown for a date range.' It uses a specific verb and resource, and the name hints at range-based versus period-based siblings. However, it does not explicitly differentiate from the sibling analytics_period_accounts or other range tools (e.g., analytics_range_categories).

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 includes a 'When to use' section specifying account-level totals across a custom date range. However, it lacks guidance on when not to use this tool (e.g., for predefined periods or other breakdowns) and does not mention alternatives among the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_categoriesC
Read-only

Get category breakdown for a date range. When to use: Use for category spending across a custom date range. Trigger words: category breakdown, range categories, spending by category

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo
accountNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true, indicating safe read and possible schema incompleteness. The description does not add any behavioral traits beyond 'category breakdown', such as data format, pagination, or limitations. Without additional context, the description adds minimal value over annotations.

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?

Description is concise with two sentences and trigger words. It front-loads the action. The trigger words add some redundancy but are not excessive. Overall, efficient but could be better structured with explicit parameter notes.

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?

No output schema is provided, yet the description does not explain the return format (e.g., a map of categories to amounts). Given 4 parameters and no parameter descriptions, the description is incomplete for the agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 4 parameters with 0% description coverage. The description only implies that startDate and endDate define a range, but does not explain paymentMethod or account, nor their constraints. This fails to compensate for the missing schema descriptions, leaving the agent without essential parameter meaning.

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?

Description clearly states the action ('Get category breakdown') and scope ('for a date range'). While it distinguishes from siblings like 'analytics_period_categories' (fixed periods) and 'analytics_range_categories_top' (top categories), it does not explicitly differentiate from 'analytics_range_categories_top' or other range tools, but the purpose is still clear.

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?

Provides a 'When to use' statement and trigger words, which give context for when to invoke this tool. However, it lacks guidance on when not to use it (e.g., for top categories) and does not mention alternatives like 'analytics_range_categories_top' for summarizing top categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_categories_topC
Read-only

Get top categories for a date range. When to use: Use for top-N category questions over a custom date range. Trigger words: top categories, highest categories, ranked categories

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo
accountNo
limitNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and openWorldHint, so the description gains limited credit. It does not explain what 'top' means (e.g., by count or amount) or mention any other behavioral traits like response size or sorting, beyond the implicit read-only operation.

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 with three sentences covering purpose, usage, and trigger words. However, the trigger words section is somewhat redundant and could be merged, and the structure is front-loaded but not optimized for quick scanning.

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 no output schema, the description should explain return values but does not. It also misses details on optional parameters and the meaning of 'top'. With many sibling tools, the description provides adequate context for selection but falls short on invocation completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description should compensate. It mentions date range for startDate and endDate but provides no information on optional parameters (paymentMethod, account, limit). The default value for limit is not explained, leaving the agent guessing.

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 tool gets top categories for a date range, distinguishing it from sibling tools like analytics_range_categories (which likely returns all categories) and period-based tools. The trigger words further clarify the purpose.

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 'When to use' section explicitly guides usage for top-N category questions over a custom date range and provides trigger words. However, it lacks explicit exclusions or alternatives (e.g., when to use a period-based tool instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_criticalityB
Read-only

Get criticality breakdown for a date range. When to use: Use for criticality/severity breakdowns across a custom date range. Trigger words: criticality, severity, range criticality

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo
accountNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, which cover safety and variability. The description adds no additional behavioral context (e.g., no mention of rate limits, data freshness). With annotations present, the description adequately confirms the read-only nature but provides no extra depth.

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 very short and front-loaded with the core purpose. However, the 'Trigger words' line is somewhat redundant and consumes space that could be used for parameter clarification.

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 four parameters (two optional), no output schema, and no description of return format or filtering behavior, the description is incomplete. The agent lacks essential context about how the breakdown is structured and how optional filters affect results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description does not explain any parameter meaning beyond the implied date range. Optional parameters paymentMethod and account are left entirely undocumented, forcing the agent to guess their purpose.

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 states 'Get criticality breakdown for a date range,' which clearly specifies the action (get), resource (criticality breakdown), and scope (date range). This distinguishes it from sibling tools like analytics_period_criticality (single period) and other range tools focusing on different dimensions.

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 description includes explicit usage guidance: 'Use for criticality/severity breakdowns across a custom date range' and provides trigger words. However, it does not explicitly state when not to use this tool versus alternatives like analytics_period_criticality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_dailyB
Read-only

Get daily totals for a date range. When to use: Use when you need day-by-day totals within a custom date range. Trigger words: daily totals, by day, day-by-day, timeline

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo
accountNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint, which the description does not contradict. The description adds that it returns daily totals but does not elaborate on behavior like pagination or constraints. It provides some context beyond annotations.

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 at two sentences plus trigger words, with the primary purpose front-loaded. Every sentence adds useful information, though trigger words could be considered slightly redundant.

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 four parameters and no output schema, the description should explain the optional parameters and return format. It only covers the core purpose; missing details on paymentMethod, account, and the structure of daily totals make it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention any parameter names, types, or formats. It only references 'date range' without explaining required startDate/endDate or optional paymentMethod/account. The description adds minimal value 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 states 'Get daily totals for a date range' which clearly identifies the verb and resource. It is distinct from siblings like analytics_range_categories but does not explicitly differentiate; however, the trigger words help identify usage.

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?

Contains a 'When to use' section and trigger words, providing clear context for when the tool is appropriate. However, it does not mention when not to use or list alternative tools from the sibling group.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_duplicatesA
Read-only

Find duplicate row hash groups for a date range. When to use: Use to detect duplicate transaction groups in a custom date range. Trigger words: duplicates, duplicate rows, duplicate transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds context about what the tool finds (row hash groups), aligning with read-only behavior. No contradictions.

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 extremely concise with a clear structure: purpose, usage guidance, and trigger words. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two parameters and no output schema, the description covers the main purpose well, though it could elaborate on what 'row hash groups' are and return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, and the description only references a 'date range' without detailing parameter format or meaning, failing to compensate for the coverage gap.

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 action ('Find'), the resource ('duplicate row hash groups'), and the scope ('for a date range'). It distinguishes from siblings by being range-specific, unlike period-based duplicates tools.

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?

Explicitly provides 'When to use' guidance, but does not include when not to use or mention alternatives like analytics_period_duplicates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_outliersB
Read-only

Get largest transactions in a date range. When to use: Use for largest or unusual transaction questions over a custom date range. Trigger words: outliers, largest transactions, unusual spending, biggest transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
limitNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true and openWorldHint=true, indicating safe read operations. The description adds that the tool returns 'largest transactions,' implying ordering or outlier detection behavior. However, it does not disclose details like data recency, precision, or potential latency. No contradiction with annotations.

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 short and front-loaded: a clear verb phrase followed by usage guidance. Three sentences are compact, but the trigger words list is slightly redundant with the second sentence. Overall efficient without unnecessary detail.

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 read-only analytics tool with 3 parameters and no output schema, the description covers the core purpose and usage context. However, it omits details about return structure (e.g., list format, fields included, sorting) and any pagination or throttling behavior. Adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% coverage (no parameter descriptions). The description does not explain the meaning of startDate, endDate, or limit beyond what the schema constraints imply (formats, min/max). For example, it doesn't clarify that limit caps the number of results. This leaves the agent relying solely on schema patterns and defaults.

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 it retrieves 'largest transactions in a date range.' The verb 'Get' and resource 'largest transactions' are specific. While it distinguishes from period-based tools via the range keyword, it does not explicitly differentiate from other range analytics tools among siblings, which are numerous.

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 description explicitly says 'Use for largest or unusual transaction questions over a custom date range' and lists trigger words. This provides clear context for when to use, but it lacks guidance on when not to use or mention of alternative tools for similar queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_overviewA
Read-only

Get totals and transaction count for a date range. When to use: Use for custom start/end date spend totals, counts, and overall range questions. Trigger words: date range, from, to, between, overall spend, range total

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
paymentMethodNo
accountNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=true. The description adds that the tool returns totals and transaction counts, but does not elaborate on additional behavioral aspects like result limits, performance, or handling of optional parameters. This is adequate but not enhanced beyond the annotations.

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 at three lines, but the 'Trigger words' line is somewhat redundant for an AI agent and could be omitted or integrated. Still, it is well-structured and wastes few words.

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 tool has 4 parameters with 2 required, no output schema, and many sibling tools, the description covers the basic purpose and usage context but lacks details on optional parameters, return format, and how it differs from specific sibling tools like analytics_range_categories. It is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fails to add meaning for the 4 parameters. It does not explain startDate/endDate format beyond what the schema pattern provides, nor does it clarify the optional paymentMethod and account parameters. This is a significant gap.

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 gets totals and transaction count for a date range. It uses the specific verb 'Get' and identifies the resource as a date range overview, distinguishing itself from sibling tools like analytics_period_overview which likely deals with predefined periods.

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 description provides explicit when-to-use guidance: 'Use for custom start/end date spend totals, counts, and overall range questions.' It also lists trigger words to help with selection. However, it does not explicitly state when not to use this tool or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_payment_methodsB
Read-only

Get payment method breakdown for a date range. When to use: Use for payment-method totals across a custom date range. Trigger words: payment methods, cards, cash, range payment

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes
accountNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations specify readOnlyHint=true (safe read) and openWorldHint=true. The description adds no further behavioral details (e.g., output format, limits), leaving the agent uninformed about potential constraints or results structure.

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?

Three concise sentences front-load the purpose, usage, and trigger words. No redundant or extraneous content.

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?

No output schema exists, yet the description fails to specify what the 'breakdown' contains (e.g., list of payment methods with totals). Lacks coverage of account parameter behavior and range limits, making it incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. The description implies date range parameters but does not explicitly mention startDate, endDate, or the optional account parameter. Trigger words include 'range payment' but lack account context, leaving parameter semantics vague.

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?

Description clearly states 'Get payment method breakdown for a date range', identifying the resource (payment methods) and operation (breakdown). The trigger words help differentiate from period-based analytics tools, though it does not explicitly distinguish from other range tools.

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?

Provides a 'When to use' phrase for custom date ranges, offering basic context. However, it does not explicitly state when not to use or list alternative tools (e.g., analytics_period_payment_methods).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_range_uncategorizedA
Read-only

Get uncategorized transactions for a date range. When to use: Use to find uncategorized transactions in a custom date range. Trigger words: uncategorized, missing category, unclassified

ParametersJSON Schema
NameRequiredDescriptionDefault
startDateYes
endDateYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. The description adds no further behavioral details such as pagination or limits, providing minimal additional transparency.

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 concise with three sentences: a clear purpose, a usage guideline, and trigger words, all front-loaded without unnecessary text.

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?

While adequate for a simple tool, it lacks details on return format, pagination, and explicit differentiation from the sibling analytics_period_uncategorized, leaving gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description does not explain the parameters beyond mentioning a 'date range', failing to add meaning to startDate and endDate.

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 gets uncategorized transactions for a date range, distinguishing it from siblings like analytics_period_uncategorized which targets specific periods.

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?

An explicit 'When to use' section advises using this tool to find uncategorized transactions in a custom date range, but it does not specify when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_summaries_rangeA
Read-only

Get statement period summaries over an inclusive period range. Before calling: Call analytics_periods_list first to confirm requested periods exist. If any period is missing, ask the user to choose from available periods. When to use: Use for multiple statement periods or a span of months, not a single month total. Trigger words: summary range, multiple months, period span, from period, to period

ParametersJSON Schema
NameRequiredDescriptionDefault
startPeriodYes
endPeriodYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and openWorldHint=true. The description adds that the tool requires pre-checking periods, which hints at potential failures if periods are missing. It does not contradict annotations, and the behavioral disclosure is adequate given the annotation baseline.

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 concise, with a clear structure: purpose, precondition, usage guidance, and trigger words. Every sentence adds value without unnecessary verbosity. It is well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains what the tool does, when to use it, and a necessary precondition. It does not detail what the summaries contain, but that may be domain knowledge. With many sibling tools, it effectively distinguishes itself. A small gap in parameter format prevents a perfect 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 input schema has two string params (startPeriod, endPeriod) with no schema description (0% coverage). The description implies they are period identifiers from analytics_periods_list, and mentions 'from period, to period' in trigger words, but does not specify format or acceptable values. This adds some meaning but not enough for full compensation.

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 it gets 'statement period summaries over an inclusive period range.' It explicitly differentiates from single-period tools like analytics_summary_by_period, saying 'Use for multiple statement periods or a span of months, not a single month total.' The trigger words also reinforce the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use: 'Use for multiple statement periods or a span of months, not a single month total.' Also gives a precondition: 'Before calling: Call analytics_periods_list first to confirm requested periods exist. If any period is missing, ask the user to choose from available periods.' This clearly guides correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

analytics_summary_by_periodA
Read-only

Get a persisted/live statement period summary. Before calling: Call analytics_periods_list first to confirm requested periods exist. If any period is missing, ask the user to choose from available periods. When to use: Use for a single month/statement period total, especially monthly spend questions. Trigger words: monthly spend, month total, single period, april 2026, statement summary

ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint. The description adds 'persisted/live' context, but does not elaborate on other behavioral traits like response format or potential staleness. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with structured sections (Before calling, When to use, Trigger words). However, it could be slightly more organized, e.g., bullet points. Still efficient.

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?

The tool has no output schema and only one parameter with no schema description. The description does not explain what the summary includes (e.g., total spend, breakdowns), leaving the agent uncertain about the output. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It mentions trigger words like 'april 2026' but does not specify the exact string format expected for the 'period' parameter. This leaves ambiguity.

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 'Get a persisted/live statement period summary', with a specific verb and resource. However, it does not fully differentiate from sibling tools like analytics_period_overview or analytics_summaries_range, though the trigger words help.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'Before calling: Call analytics_periods_list first to confirm requested periods exist.' Also includes when to use and trigger words, making the tool's usage very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 26 tool updatesv0.1.0
    • First observedanalytics_categories_distinct_global
    • First observedanalytics_health
    • First observedanalytics_period_accounts
    • First observedanalytics_period_categories
    • First observedanalytics_period_categories_distinct
    • First observedanalytics_period_categories_top
    • First observedanalytics_period_criticality
    • First observedanalytics_period_daily
    • First observedanalytics_period_duplicates
    • First observedanalytics_period_outliers
    • First observedanalytics_period_overview
    • First observedanalytics_period_payment_methods
    • First observedanalytics_period_uncategorized
    • First observedanalytics_periods_list
    • First observedanalytics_range_accounts
    • First observedanalytics_range_categories
    • First observedanalytics_range_categories_top
    • First observedanalytics_range_criticality
    • First observedanalytics_range_daily
    • First observedanalytics_range_duplicates
    • First observedanalytics_range_outliers
    • First observedanalytics_range_overview
    • First observedanalytics_range_payment_methods
    • First observedanalytics_range_uncategorized
    • First observedanalytics_summaries_range
    • First observedanalytics_summary_by_period

TDQS

A3.6/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, with the main differentiation being period vs. range scope. However, there is potential confusion between analytics_period_overview and analytics_summary_by_period, which both provide period totals but with slightly different semantics.

Naming Consistency5/5

All tool names follow a consistent 'analytics_<scope>_<operation>' pattern in snake_case. Scopes like period and range are used uniformly, and operations are predictable (overview, accounts, categories, etc.). No mixing of conventions.

Tool Count3/5

With 26 tools, the count is on the higher side but still reasonable for a comprehensive analytics API. The duplication of operations for period and range nearly doubles the surface area, but each tool has a distinct purpose. It's borderline heavy but not excessive.

Completeness5/5

The tool set covers a wide range of analytics queries: overall totals, accounts, categories (with distinct and top variants), criticality, daily trends, duplicates, outliers, payment methods, and uncategorized transactions. Both period and range scopes are fully supported, plus global categories and a health check. No obvious gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Seline Analytics API
    74
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server for YNAB that provides tools for budgets, accounts, categories, transactions, and financial summaries via HTTP or stdio.
    1
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    An MCP server for interacting with the Rybbit Analytics API, enabling querying analytics data, managing sites, tracking events, and more.
    57
    17
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/joshuarreid/WhatsMyBudgetMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server