Skip to main content
Glama

Banking Assistant (Metabind demo)

Server Details

Demo personal-finance MCP App: spending, subscriptions, and net worth as interactive UI.

Ownership verified
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
metabindai/metabind-demos
GitHub Stars
1

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation3/5

The set pairs data-retrieval tools (get_*) with rendering tools for the same metrics, and includes a generic trend_card that overlaps with spending_breakdown and transaction_list for period comparisons. Descriptions explicitly guide selection, but the data-vs-render split and cross-references create real misselection risk.

Naming Consistency3/5

All names use snake_case, and get_* consistently marks data tools while render tools are noun phrases. However, the render names are not uniform (net_worth_trend, spending_breakdown, subscriptions, transaction_list, trend_card), and get_transactions vs transaction_list breaks the metric-mirroring pattern.

Tool Count5/5

Nine tools is well within a reasonable range for a banking analytics demo. Each data and render tool has a defined role, and the generic trend_card fills a legitimate gap for metrics without dedicated cards.

Completeness4/5

The surface covers core personal-finance analytics: net worth, spending, subscriptions, transactions, and general trends. It lacks income, budgets, goals, and transfer/payment operations, but those are minor gaps for the apparent read-only insight/demo scope.

Available Tools

9 tools
get_net_worthget_net_worthA
Read-onlyIdempotent
Inspect

Net worth history + account balances. Numbers to reason with — to display, use net_worth_trend.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoHow far back the trend goes. Ignored when startDate/endDate are given.1y
endDateNoRange end, YYYY-MM-DD. Defaults to today.
groupByNoGranularity of the returned series. Each point carries that period's CLOSING balance. 'auto' picks a readable granularity for the span; set it explicitly to compare periods against each other — 'year' over a two-year range gives one point per year, 'month' gives one per month.auto
summaryNoOmit the `points` series and return only the headline figures and accounts. Use this when you want the numbers to comment on rather than to chart — it is a fraction of the size of a full result.
startDateNoRange start, YYYY-MM-DD. Defaults to a year before endDate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
savedNo
startNo
changeNo
incomeNo
periodNo
pointsNo
currentNo
endDateNo
groupByNo
accountsNo
spendingNo
startDateNo
change_pctNo
periodLabelNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds the meaningful behavioral trait that the output is raw numbers intended for reasoning rather than presentation, which is genuine context beyond the structured fields.

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?

Two terse sentences with the resource stated first and the routing rule second. No filler; every clause earns its place.

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?

Output schema exists and annotations are rich, so return values need not be explained. The description covers the key reasoning-vs-display decision, which is the main ambiguity for this tool; only minor pagination/size nuance in the summary parameter is left to the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (period, startDate, endDate, groupBy, summary) are already well documented in the schema, including enum behavior and defaults. The description adds no parameter guidance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States exactly what comes back — net worth history plus account balances — a specific resource and scope. It also names the sibling it is not (net_worth_trend), so an agent can route between them without opening either schema.

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?

Gives an explicit selection rule: use this tool when you need numbers to reason with, and use net_worth_trend when the goal is display. The alternatives condition is clear, though no other exclusions or prerequisites are covered.

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

get_spending_breakdownget_spending_breakdownA
Read-onlyIdempotent
Inspect

Categorized spending + prior-period comparison. Numbers to reason with — to display, use spending_breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoSpending window.mtd
summaryNoDrop each category's top_merchants list and return only the headline totals and per-category amounts. Use this when you want the numbers to comment on rather than to chart.

Output Schema

ParametersJSON Schema
NameRequiredDescription
netNo
groupsNo
periodNo
comparisonNo
periodLabelNo
total_spendNo
total_incomeNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and an output schema exists, so the remaining burden is light. The description adds that output includes a prior-period comparison and that the data is meant for reasoning rather than presentation, but says nothing about precision, rounding, or coverage gaps that an analyst would care about.

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?

Two short sentences, zero filler, with the core capability and the sibling routing stated up front. Nothing redundant with the title or annotations.

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?

With annotations covering safety and an output schema defining the return shape, the description only needed to convey scope and the sibling split, which it does. Period semantics and the summary flag are fully documented in the schema, so no agent-relevant information is missing.

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

Parameters3/5

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

Schema description coverage is 100%, including a full enum for period and a detailed explanation of the summary flag, so the schema carries parameter meaning. The description adds no parameter-specific syntax or defaults, which is the expected baseline when the schema is complete.

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?

States the resource precisely — categorized spending plus a prior-period comparison — so the agent knows what comes back without opening the schema. It also names and distinguishes itself from the sibling spending_breakdown (analysis vs display), though it never uses an explicit verb for the retrieval action.

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?

'Numbers to reason with — to display, use spending_breakdown' gives an explicit alternative and the condition that selects it. It stops short of stating exclusions or prerequisites (e.g., when prior-period comparison is unavailable for period=all), so it is clear but not exhaustive.

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

get_subscriptionsget_subscriptionsA
Read-onlyIdempotent
Inspect

Recurring-charge detection. Numbers to reason with — to display, use the subscriptions card.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoWhich subscriptions to include.active

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
new_countNo
subscriptionsNo
total_monthlyNo

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, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the full safety profile is covered by structured data. The description adds the useful framing that the output is raw numbers for reasoning rather than a rendered view, but discloses nothing about pagination, rate limits, or permission requirements. Moderate added value against a strong annotation set.

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?

Two short sentences with zero filler; the domain statement is front-loaded and the routing hint follows immediately. Every clause earns its place.

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?

An output schema exists so return values need no explanation, and annotations cover the safety profile, leaving little for the description to carry. The remaining minor gap is that the status filter's behavior (active vs all) is never surfaced in prose, but for a zero-required-parameter read tool this is close to complete.

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

Parameters3/5

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

The single status parameter has 100% schema description coverage including an enum and a default of "active", so the schema fully documents it. The description never mentions status or the active/all distinction, adding no meaning beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

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?

"Recurring-charge detection" states the resource/domain clearly, and combined with the get_subscriptions name an agent understands it retrieves subscription data. It also implicitly distinguishes itself from the sibling "subscriptions" card, though it never uses an explicit verb like "returns" or "lists".

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?

"Numbers to reason with — to display, use the subscriptions card" explicitly routes the agent between this data tool and the display sibling, which is exactly the kind of alternative-selection guidance that matters here. It stops short of an explicit when-not for the status filter or for adjacent siblings like get_transactions.

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

get_transactionsget_transactionsA
Read-onlyIdempotent
Inspect

Raw transactions by category or merchant, ~12 months of history. Numbers to reason with — to display, use transaction_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo'recent' is newest-first and is what a plain list wants. Use 'largest' for "my biggest transactions" — a window can hold hundreds of rows, so date order buries them.recent
limitNoMax transactions to return. Pass 0 for totals and counts only — much cheaper when you need the figures to reason with rather than to list.
periodNoTime window. Ignored when startDate/endDate are given. The feed covers ~25 months, so a 1y window has a full prior year to compare against.mtd
endDateNoWindow end, YYYY-MM-DD. Defaults to today.
categoryNoCategory or plain term to filter by, e.g. 'Food & Dining', 'restaurants', 'rent', 'gas', 'income'. A merchant name here is resolved as a merchant. Omit or leave empty for all categories.
merchantNoSingle store or brand to filter by, e.g. 'Whole Foods', 'Netflix', 'Shell'. Combine with category to narrow further.
startDateNoWindow start, YYYY-MM-DD. Defaults to 30 days before endDate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
shownNo
categoryNo
standoutsNo
top_itemsNo
periodLabelNo
total_spentNo
transactionsNo
change_vs_prev_pctNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds the 'raw' vs 'aggregated' distinction and a retention claim, but nothing about pagination, cost, or precision. Note the stated '~12 months of history' conflicts with the schema's own period description ('feed covers ~25 months'), which is a description-vs-schema inconsistency rather than an annotation contradiction.

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?

Two terse fragments with zero filler; the core capability leads and the routing hint is front-loaded rather than buried. Every clause carries 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?

An output schema exists, so return structure need not be described. However, the description's history claim (~12 months) contradicts the schema's ~25-month feed, which can mislead an agent planning an 'all' or 1y window, and the description omits that the tool also serves count/total-only requests. Usable but not fully trustworthy for planning.

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

Parameters3/5

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

Schema description coverage is 100%, with sort, limit, period, category and merchant all richly documented in-schema (including the limit=0 totals trick and date precedence). The description only echoes the category/merchant filters, adding essentially nothing the schema has not already said — baseline 3 is correct.

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?

States a specific verb and resource ('Raw transactions'), the two filter axes (category or merchant), and explicitly routes display-oriented callers to the sibling transaction_list. An agent can distinguish this from transaction_list without opening either schema.

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?

Gives an explicit when/when-not pair: use this for 'numbers to reason with', use transaction_list 'to display'. It does not distinguish this tool from the other analytical siblings (spending_breakdown, subscriptions, net_worth_trend), so it stops short of fully disambiguating the tool set.

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

net_worth_trendNet Worth TrendA
Read-onlyIdempotent
Inspect

Render net_worth_trend: Net worth: current total, change over the period, a trend chart, and the account balances behind it. It loads its own data. To compare periods against each other pass chartStyle:'bar' plus groupBy ('year' for this-year-vs-last-year, 'month' for month-by-month) — each bar is that period's closing balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoUsually omit this. Optional one-line insight rendered inside the card. Only pass it when you ALREADY have the figures in hand from a call you made for another reason — never make an extra tool call just to write a note, because that round trip delays the card itself. When you do add one, say something the card does not already show (what drove a change, what to watch), in one sentence, and never guess a number.
periodNoWindow: 7d, 30d, mtd (this month so far), lastMonth (the whole previous calendar month), 3mo, 6mo, ytd, 1y or all. Ignored when startDate/endDate are given. Defaults to 1y.
endDateNo
groupByNoOne bar/point per period, carrying that period's closing balance. Set it to compare periods: 'year' for "this year vs last year", 'month' for "month by month", 'quarter' for "by quarter". Leave auto for a plain trend.auto
nextStepsNoOne short follow-up the user might ask next, in the form icon|question — 'calendar|Show me last month'. Phrase the question the way the user would say it, and take the icon from the table in the app instructions; any other name renders blank. Always supply 2-3. The card itself ignores them.
startDateNo
chartStyleNo'bar' compares periods against each other as closing balances; 'line' is the continuous history.line

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety is covered. The description adds a genuinely useful behavioral fact beyond them: 'It loads its own data,' telling the agent no prerequisite data call is needed. It stops short of describing pagination or rendering constraints.

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?

Two sentences, tightly front-loaded: what it renders, then the comparison recipe. The opening 'Render net_worth_trend:' slightly restates the tool name, a minor redundancy, but nothing else is wasted.

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 7-parameter, no-required-args card tool with no output schema, the description covers the output content, the comparison workflow, and the self-loading behavior. The detailed note/nextSteps guidance lives in the schema, which is acceptable; the description is complete enough to call correctly.

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?

Schema coverage is 71%, so structured fields carry much of the load (period, groupBy, note, chartStyle all have descriptions). The description nonetheless adds value by explaining the chartStyle+groupBy interaction — that each bar is that period's closing balance — which neither schema field states alone.

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 names a specific verb (render) and resource (net worth trend) and enumerates what the card shows: current total, change over the period, a trend chart, and account balances. It distinguishes this card-rendering tool from data tools only implicitly, but the output content is concrete enough for an agent to select it.

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?

It gives one clear usage rule — pass chartStyle:'bar' plus groupBy to compare periods — with examples ('year' for this-year-vs-last-year). However it never says when to prefer this over siblings like get_net_worth or trend_card, so the routing guidance is incomplete.

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

spending_breakdownSpending BreakdownA
Read-onlyIdempotent
Inspect

Render spending_breakdown: Spending split by category for a period: a composition bar plus a ranked category list. It loads its own data — pass the period alone for the whole picture, which is what a broad 'where did my money go' question wants. Use highlight only on a follow-up about particular categories; it dims everything else, so on an opening question it hides most of the answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoUsually omit this. Optional one-line insight rendered inside the card. Only pass it when you ALREADY have the figures in hand from a call you made for another reason — never make an extra tool call just to write a note, because that round trip delays the card itself. When you do add one, say something the card does not already show (what drove a change, what to watch), in one sentence, and never guess a number.
periodNoWindow: 7d, 30d, mtd (this month so far), lastMonth (the whole previous calendar month), 3mo, 6mo, ytd, 1y or all.mtd
highlightNoOMIT THIS unless the user asked about specific categories. Leaving it empty is the normal, correct view: the whole picture, nothing dimmed. A broad opening question — 'where did my money go', 'show me my spending', 'how did I do this month' — wants the whole picture, so pass period alone. Only emphasise on a FOLLOW-UP that is genuinely about particular categories ('what should I cut', 'is dining out of hand', 'why is it higher than last month'), where you name them: ['Food & Dining','Subscriptions']. Everything else then dims and the hero reports their combined total. Matching is forgiving ('dining' finds 'Food & Dining').
nextStepsNoOne short follow-up the user might ask next, in the form icon|question — 'calendar|Show me last month'. Phrase the question the way the user would say it, and take the icon from the table in the app instructions; any other name renders blank. Always supply 2-3. The card itself ignores them.
drillPromptNoWhat tapping a category should ask, when the question had an angle worth carrying. Write it as the user would say it and put {category} where the name goes: 'Show me the odd {category} transactions', 'Where can I cut back on {category}?'. Set it when the card answers something pointed — unusual spending, what to cut, why something moved — so the follow-up inherits that instead of resetting to a plain list. Omit it for a broad 'where did my money go', where a plain list is what a tap should give.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds genuinely non-obvious behavior: the card 'loads its own data', passing highlight dims everything else, matching of category names is forgiving, and the card ignores nextSteps. This is real context an agent cannot get from the schema.

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?

Front-loaded with the card's purpose, then the usage rule, then the highlight caveat. Roughly three dense sentences with no filler. Slightly heavy in the middle sentence (a long appositive clause), but every clause earns its place.

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?

No output schema exists, but the description explains what the card renders (composition bar plus ranked list) and how its interactive parts behave, which is what an agent needs. Combined with full schema coverage and annotations, nothing required to call it correctly is missing.

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?

Schema description coverage is 100% and the parameter descriptions are themselves rich, so the baseline is 3. The tool description reinforces and prioritizes the highest-stakes semantic — that highlight solves a different question than the default period-only call — adding a small amount of meaning on top of 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?

It states a concrete verb-plus-resource: render a spending breakdown card made of 'a composition bar plus a ranked category list' for a period. That is specific and far better than restating the title. It does not, however, distinguish itself from the sibling get_spending_breakdown, which an agent could plausibly confuse with this rendering tool.

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 when-to-use guidance: pass period alone for a broad opening question, use highlight only on a follow-up about specific categories. It also names the failure mode (highlight dims the rest and hides the answer on an opening question) and even routes the note/drillPrompt behavior. Nothing is left to inference.

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

subscriptionsSubscriptionsA
Read-onlyIdempotent
Inspect

Render subscriptions: Recurring charges: total monthly cost and a row per subscription with its cadence, next charge date, and New / price-increase flags. It loads its own data.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoUsually omit this. Optional one-line insight rendered inside the card. Only pass it when you ALREADY have the figures in hand from a call you made for another reason — never make an extra tool call just to write a note, because that round trip delays the card itself. When you do add one, say something the card does not already show (what drove a change, what to watch), in one sentence, and never guess a number.
viewNoWhich cut to open on. 'all' is every recurring charge, biggest first — the answer to 'what am I paying for'. 'repriced' is only the ones whose price moved, which is what 'which went up' asks. 'new' is only the recently started. 'unusual' is both of those together, for a general 'anything odd'. Match the cut to the question: a price question answered with the full list makes the user hunt for the answer. The header keeps reporting the full count, so narrowing hides nothing.all
viewsNoWhich cuts to offer as segments. Omit and the card offers All alongside whichever cut you opened on. Pair the specific cut with 'all' so the user can get back to the full picture — ['all','repriced'] for a price question, ['all','new'] for a what's-new one.
statusNo'active' lists current subscriptions; 'all' also includes recently cancelled ones.active
nextStepsNoOne short follow-up the user might ask next, in the form icon|question — 'calendar|Show me last month'. Phrase the question the way the user would say it, and take the icon from the table in the app instructions; any other name renders blank. Always supply 2-3. The card itself ignores them.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds one genuinely behavioral fact beyond them — that it self-loads its data, sparing the agent an unnecessary prerequisite call — and describes the rendered output shape. It stops short of stating side effects on the host UI (e.g., whether the card replaces or stacks).

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?

Two sentences, front-loaded with the verb and the card's payload, with no filler. The stacked-colon phrasing ('Render subscriptions: Recurring charges: ...') is slightly awkward but not wasteful.

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?

Sibling tools suggest a render-card family, and with no output schema the description does the work of telling the agent what the card surfaces (monthly total, per-row cadence, next charge, flags). Combined with the exhaustive schema, an agent has enough to call it correctly; only explicit sibling routing is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the parameter descriptions are unusually thorough, so the baseline of 3 applies. The description body adds no parameter-level detail (no mention of view cuts, status, note, or nextSteps) beyond what the schema already supplies.

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?

States a specific verb ('Render') and resource (subscriptions), and enumerates the card's contents: total monthly cost, per-row cadence, next charge date, and New/price-increase flags. It implicitly separates itself from data-fetch siblings like get_subscriptions by saying it 'loads its own data', though it never names that sibling directly.

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 phrase 'It loads its own data' implies the agent should call this instead of first fetching via get_subscriptions, which is useful implied routing. However, there is no explicit when-to-use/when-not statement or named alternative in the description; the rich view-selection guidance lives entirely in the schema, not the description body.

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

transaction_listTransaction ListA
Read-onlyIdempotent
Inspect

Render transaction_list: Individual purchases for a category or a merchant: the window total plus the matching transactions. It loads its own data. Plain terms like 'restaurants', 'groceries' or 'gas' resolve to categories; omit both filters for all spending. Do NOT use this when the user asks how much they spent over the last 3, 6 or 12 months — that is a period comparison, so use trend_card with chartStyle:'bar' instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoUsually omit this. Optional one-line insight rendered inside the card. Only pass it when you ALREADY have the figures in hand from a call you made for another reason — never make an extra tool call just to write a note, because that round trip delays the card itself. When you do add one, say something the card does not already show (what drove a change, what to watch), in one sentence, and never guess a number.
viewNoWhich cut of the window to open on. 'recent' is newest-first, the plain list. 'largest' leads with the biggest charges. 'unusual' shows only the charges well above what that merchant or category normally costs — this is the answer to "anything odd this month", not a spending breakdown. The user can switch between the offered cuts on the card without asking again, so pick the one that answers the question and leave the rest to them. Use `views` to change which cuts are offered.recent
limitNoMax transactions to load. Raise past the default 20 only if the user wants the full list.
viewsNoWhich cuts to offer as segments on the card. Omit for all three, which is usually right — the user can then explore without asking again. Narrow it only when a cut would be meaningless for what was asked: a single-merchant list has little to call unusual, and a one-week window has little to rank. Listing a single cut drops the control entirely and renders a plain list, so use that when the question has exactly one sensible answer.
periodNoWindow: 7d, 30d, mtd (this month so far), lastMonth (the whole previous calendar month), 3mo, 6mo, ytd, 1y or all. Ignored when startDate/endDate are given. Defaults to mtd.
endDateNoWindow end, YYYY-MM-DD.
categoryNoCategory or plain term, e.g. 'Food & Dining', 'restaurants', 'rent', 'gas'. Omit for all categories.
merchantNoSingle store or brand, e.g. 'Whole Foods', 'Netflix'.
nextStepsNoOne short follow-up the user might ask next, in the form icon|question — 'calendar|Show me last month'. Phrase the question the way the user would say it, and take the icon from the table in the app instructions; any other name renders blank. Always supply 2-3. The card itself ignores them.
startDateNoWindow start, YYYY-MM-DD.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the description's job is to add beyond that. It does: 'It loads its own data' discloses that this tool self-fetches rather than requiring a prior query, which is real behavioral information. It stops short of richer detail (rendering latency, whether the card persists state) so it lands at 4 rather than 5.

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?

Three sentences, front-loaded with what is rendered, then the filter-resolution rule, then the hard exclusion and alternative. No padding. It is dense but every clause carries routing or behavior information; it falls just short of the two-line ideal seen in the top example.

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?

There is no output schema, so the description must orient the agent on what comes back — it does ('the window total plus the matching transactions'). With 10 parameters all fully documented in the schema and safety fully covered by annotations, the only unaddressed area is any failure/empty-result behavior, which is minor for a read-only render tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3 and the schema already carries per-parameter detail. The description's plain-term resolution ('restaurants', 'groceries', 'gas' resolve to categories) and the 'omit both filters' rule add marginal value on top of what category/merchant already document, but it introduces no parameter syntax the schema lacks.

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?

States a precise verb+resource ('Render transaction_list'), and the scope ('Individual purchases for a category or a merchant: the window total plus the matching transactions'). It explicitly distinguishes itself from sibling trend_card by name and function, so an agent can route between them without opening either schema.

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?

Names the exclusion condition outright ('Do NOT use this when the user asks how much they spent over the last 3, 6 or 12 months') and names the alternative (trend_card with chartStyle:'bar'). It also tells the agent how to get 'all spending' by omitting both filters, closing the main usage ambiguity.

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

trend_cardTrend CardA
Read-onlyIdempotent
Inspect

Render trend_card: Any metric over time that has no dedicated card — one category's spend by month, a series you computed. Points are {label, value} in display order. Set upIsGood=false for cost-like metrics. Use chartStyle:'bar' whenever the user compares periods — month by month, or over the last 3/6/12 months; give each point a series name (repeating the label once per series) to stack them with a legend. Pass items to list the composition behind the number.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoUsually omit this. Optional one-line insight rendered inside the card. Only pass it when you ALREADY have the figures in hand from a call you made for another reason — never make an extra tool call just to write a note, because that round trip delays the card itself. When you do add one, say something the card does not already show (what drove a change, what to watch), in one sentence, and never guess a number.
itemsNoOptional rows under the chart — the composition behind the number (accounts behind a net worth, categories behind a month's spend). Each is { name, detail, value, color?, prompts? }. `color` is a named colour for the dot ('blue', 'green', …); omit it and rows are coloured in order. `prompts` are follow-up questions offered when the row is tapped — each string is shown as the menu label AND sent to the assistant verbatim, so keep them short and self-contained ('How has my Brokerage changed?', not 'changed?'). OMIT `prompts` unless a row needs something its name cannot imply: left out, the card builds its own drill-down from `name`, which saves you writing the same sentence once per row.
startNo
titleNoTrend
changeNoThe change over the period, in the same unit as `current`. Send it together with `start` whenever you have them: the card leads with this figure, and left out it has to work back from `change_pct`, which is close but not the real number.
pointsNo
currentNo
upIsGoodNofalse for cost-like metrics: an increase renders red, a decrease green.
nextStepsNoOne short follow-up the user might ask next, in the form icon|question — 'calendar|Show me last month'. Phrase the question the way the user would say it, and take the icon from the table in the app instructions; any other name renders blank. Always supply 2-3. The card itself ignores them.
change_pctNo
chartStyleNo'bar' draws discrete bars on a labelled x axis — better for comparing periods against each other, and the only style that stacks series. 'line' is the continuous trend.line
periodLabelNoPast 12 months
valueFormatNoHow the hero value and change are formatted.currency
valueSuffixNoOptional unit appended to values, e.g. ' subs' or '/mo'.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already establish the safe read-only, idempotent profile, and the description goes well beyond them: the note parameter explains the round-trip cost of an extra call and forbids guessed numbers, `prompts` explains that omission triggers an auto-built drill-down from `name`, and nextSteps documents the icon table constraint and 'card itself ignores them'. This is unusually rich behavioral context for a render tool.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, and the dense follow-up sentences each carry a distinct rule (upIsGood, bar-for-comparison, series stacking, items). It is a single long paragraph, so a small structural cost, but little is wasted.

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 14-param, no-required-param card renderer with no output schema, the description covers the decisions that matter (chart style, polarity, stacking, composition, note discipline). It stops short of tying start/current/change/change_pct together, which the schema descriptions only partially cover.

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?

With 14 params and 57% schema coverage, the description meaningfully supplements the schema: it explains point ordering, the `series` repetition convention for stacking, the difference between line and bar, and the role of `items` as composition rows. A few params (start, current, periodLabel, change_pct interplay) are left mostly to schema defaults, so not a full 5.

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?

States a specific render verb and resource ('Render trend_card: Any metric over time') and defines scope precisely with 'has no dedicated card — one category's spend by month, a series you computed.' This scope clause is what separates it from dedicated siblings like net_worth_trend and spending_breakdown.

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?

Gives clear context: use this for metrics without a dedicated card, set upIsGood=false for cost-like metrics, and use chartStyle:'bar' whenever the user compares periods. It does not, however, name the specific sibling cards it should yield to, leaving the agent to infer which metrics already have dedicated cards.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updates
    • Changedget_net_worth1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedget_spending_breakdown1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedget_subscriptions1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedget_transactions1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changednet_worth_trend1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedspending_breakdown1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedsubscriptions1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedtransaction_list1 field changed
      • addedInput schema / required
        Added value: +[]
    • Changedtrend_card1 field changed
      • addedInput schema / required
        Added value: +[]
  2. 9 tool updates
    • First observedget_net_worth
    • First observedget_spending_breakdown
    • First observedget_subscriptions
    • First observedget_transactions
    • First observednet_worth_trend
    • First observedspending_breakdown
    • First observedsubscriptions
    • First observedtransaction_list
    • First observedtrend_card

Related MCP Connectors

  • Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.

  • Personal finance for AI agents — onboard, import statements, categorize & budget over MCP.

  • Public read-only Précis Finance MCP demo with synthetic data; no account or credentials required.

  • SmartMoney77 MCP v0.6.0 — 14 public tools that turn financial questions into exact numbers and citable links. New: historical_investment_return and compare_investments, which compute "what if I had invested" results from real yearly price data. Also compound interest, FIRE number, credit-card payoff, emergency fund, inflation, latte factor, investment fees, cost of waiting, plus discovery/deep-link/share-pack tools for a catalog of calculators in 6 languages (he/en/ar/es/pt/in). Public, no login. Endpoint: https://smartmoney77.com/mcp

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    open-source personal finance app with a first-party MCP server. 91 HTTP tools (OAuth 2.1 + DCR) and 87 stdio tools cover transactions, budgets, accounts, portfolio analytics, FX conversion, loans, subscriptions, goals, importers, and rules. Users self-host with Docker + PostgreSQL or use the managed cloud
    89
    22
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying personal financial data such as balances, expenses by category, upcoming bills, transactions, and credit card summaries through any MCP client, using a SQLite database with fictional seed data.
    62 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Exposes personal-finance tools like accounts, transactions, spending analysis, budgets, bills, reminders, portfolio, and goals via MCP, enabling any MCP client to query financial data.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides tools for managing personal finances via MCP, including accounts, transactions, debts, savings, budgets, and asset tracking, with summaries and reporting capabilities.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.