Skip to main content
Glama
fernando1501

bg-mcp

by fernando1501

bg-mcp

Servidor MCP (stdio) de solo lectura para la Zona Segura de Banco General.

Expone tus cuentas, tarjetas y pensión a un cliente MCP (Claude Code, Claude Desktop, etc.) para poder preguntar cosas como "¿cuánto gasté en julio?" o "búscame ese cargo de $250", sin que el servidor pueda mover un centavo.


Garantía de solo lectura

No es solo que no existan tools de transferencia. Hay tres capas, todas en src/http/guard.ts:

  1. Allowlist explícita. Cada request pasa por assertReadOnly(method, path) antes de que axios lo vea. Si la ruta no está en la lista, la petición nunca sale del proceso. Ojo: varios endpoints de lectura de BG son POST (find, state, statement), así que filtrar por verbo no sirve — el match es por ruta exacta y anclada.

  2. Blocklist de mutación. Se evalúa primero y rechaza sin importar la allowlist: /api/jsonws/invoke (el RPC genérico de Liferay, que llega a cualquier servicio), transferencias, pagos, pay-card, reportes de tarjeta, edición de cuentas.

  3. Nunca se manda token CSRF. Los endpoints de Liferay que cambian estado exigen x-csrf-token. Este cliente jamás lo adjunta, así que aunque las dos capas anteriores fallaran, el banco rechazaría la operación del lado del servidor.

Además, ningún tool recibe una ruta ni un body crudo del modelo: cada función de src/api/ construye el suyo a partir de argumentos validados con zod.

npm test incluye pruebas negativas que fallan la build si una ruta de escritura pasa el guard.


Related MCP server: C6 Bank MCP

Instalación

Es un servidor stdio: corre local, lo lanza tu cliente MCP y hablan por stdin/stdout. No hay nada que desplegar ni puerto que abrir. Elige según tu cliente.

Claude Desktop

Descarga bg-mcp.mcpb del último release y ábrelo. Claude Desktop lo instala como extensión: no hay JSON que editar ni dependencias que instalar, el bundle las trae adentro.

Claude Code

claude mcp add bg --scope user -- npx -y bg-mcp

npx baja el paquete la primera vez, lo cachea y lo ejecuta.

A mano

Cualquier cliente que acepte un comando stdio:

{
  "mcpServers": {
    "bg": { "command": "npx", "args": ["-y", "bg-mcp"] }
  }
}

No hay que configurar credenciales en ningún archivo — se piden al momento de iniciar sesión.

Chromium, el único paso que queda manual

El login maneja la UI real de Banco General, así que hace falta un Chromium de Playwright (~150 MB). No viaja en el .mcpb ni lo instala el bundle — vive en una caché compartida de la máquina, así que se baja una sola vez:

npx playwright install chromium

Si te lo saltas, Playwright lo dice explícitamente al intentar el primer login.

Instalando por npx hay un matiz extra: el postinstall de Playwright lo descarga solo, pero si eso ocurre mientras el cliente MCP espera el primer handshake puede pasarse del timeout y marcar el servidor como caído. Correr npx -y bg-mcp login antes de registrarlo calienta la caché y de paso te deja logueado.

Instalación global

Si prefieres no depender de la caché de npx:

npm i -g bg-mcp
claude mcp add bg --scope user -- bg-mcp

Como plugin de Claude Code

El paquete también trae un .claude-plugin/, por si lo quieres administrar como plugin (/plugin update, activar y desactivar) en vez de como servidor MCP suelto. Son dos comandos en lugar de uno, porque en Claude Code todo plugin se instala desde un marketplace:

/plugin marketplace add fernando1501/bg-mcp
/plugin install bg-mcp@bg-mcp

El plugin vive en el propio repo ("source": "./", la forma relativa que es la única que todos los clientes documentan como sincronizable) y su plugin.json arranca el servidor con npx -y bg-mcp. O sea que el repo aporta el manifiesto y npm aporta el código: no hay dist/ que versionar ni dependencias que instalar en la caché del plugin.

Desde el código

git clone https://github.com/fernando1501/bg-mcp.git && cd bg-mcp
npm install
npx playwright install chromium
npm run build
claude mcp add bg --scope user -- node "$PWD/dist/index.js"

Login

El login de Banco General son tres pantallas y la pregunta de seguridad es dinámica: la elige el banco y cambia por cuenta. Por eso el flujo son tres tools encadenados, y el servidor no sabe ni asume ninguna respuesta.

  1. bg_login_start({ username }) → devuelve la pregunta de seguridad que BG pidió, tal cual.

  2. La AI te muestra esa pregunta y te pide la respuesta y la contraseña.

  3. bg_login_answer({ loginId, answer, password }) → sesión lista.

  4. Si BG manda un código de un solo uso: bg_login_otp({ loginId, code }).

La sesión queda en ~/.bg-mcp/session.json (permisos 600, directorio 700) y guarda solo cookies — nunca la contraseña ni la respuesta de seguridad.

Mientras el servidor corre, hace un ping de lectura cada 10 minutos para que Liferay no expire la sesión por inactividad.

Mantener la sesión entre reinicios

bg_login_answer acepta remember: true, que guarda las credenciales en el Keychain de macOS (security add-generic-password) para poder re-loguear solo cuando el banco expire la sesión. Está apagado por defecto. bg_logout borra sesión y entrada del Keychain.

CLI de respaldo

Si el dispositivo no está registrado o BG pide OTP repetidamente, el flujo headless puede no completar. Para eso:

npx -y bg-mcp login      # abre un browser visible
npx -y bg-mcp status
npx -y bg-mcp logout

Escribe el mismo archivo de sesión que consume el servidor.


Tools

Sesión

Tool

Qué hace

bg_session_status

¿Hay sesión? ¿de quién? ¿qué tan fresca? Llamar antes de pedir credenciales

bg_login_start

Paso 1: usuario → devuelve la pregunta de seguridad

bg_login_answer

Paso 2: respuesta + contraseña → sesión (o otp_required)

bg_login_otp

Paso 3: código de un solo uso, si aplica

bg_logout

Borra sesión y credenciales guardadas

Datos

Tool

Qué hace

bg_list_accounts

Todos los productos con saldos y el portalId que usan los demás tools. Empieza aquí

bg_get_account

Detalle de un producto; despacha según sea ahorro, tarjeta o pensión

bg_list_transactions

Movimientos de una cuenta de ahorro por rango de fechas (paginación interna)

bg_list_card_transactions

Cargos y pagos de una tarjeta por período de estado de cuenta

bg_get_card_statement

Estado de cuenta: saldo, pago mínimo, fechas de corte y pago, planes

bg_get_card_categories

Desglose por categoría según el banco (Comida, Transporte, …)

bg_get_pension

Saldos y estado mensual del fondo Pro-Futuro

Analítica

Tool

Qué hace

bg_search_transactions

Busca en todas las cuentas y tarjetas a la vez por texto, monto, tipo y fechas, incluidas las compras en proceso

bg_spending_summary

Resumen de un mes: ingresos, gastos, neto, desglose por cuenta y mayores gastos. Las compras en proceso van aparte, en pendingNotCounted


Notas sobre los datos

  • Todas las fechas son hora de Panamá (UTC-5, sin horario de verano). BG entrega epochs UTC; sin el corrimiento, un movimiento de las 23:30 aparecería al día siguiente y descuadraría cualquier total de fin de mes.

  • Los saldos son al lastSyncDate del banco, no del momento exacto.

  • Un período de estado de cuenta no es un mes calendario — empieza en la fecha de corte anterior. bg_list_card_transactions acepta clampToMonth para recortar al mes calendario.

  • Las transferencias entre cuentas propias aparecen de los dos lados y bg_spending_summary no las excluye. Revisa las descripciones (p. ej. ENTRE CUENTAS) antes de leer los totales como flujo de caja neto.

  • Las "Compras en proceso" llegan con source: "pending" y posted: false. Ojo con la palabra "pendiente": la plata ya salió del saldo disponible, ya no la tienes. Lo único que falta es que el cargo postee como movimiento; hasta entonces no aparece en la lista de movimientos ni en los totales que se calculan de ella, y cuando postee volverá a aparecer como movimiento normal.

    Por eso quedan fuera de los totales — sumarlas contaría dos veces la misma compra — pero se reportan con su monto en pendingNotCounted, porque son gasto real y omitirlas te subestima lo gastado. Si el saldo disponible no te cuadra con los movimientos, la diferencia suele ser exactamente esto.

    bg_search_transactions sí las busca, porque la compra más reciente —la que uno pregunta— casi siempre sigue en tránsito.

Variables de entorno

Solo una, opcional: BG_MCP_HOME cambia dónde vive el archivo de sesión (por defecto ~/.bg-mcp).

Desarrollo

npm run build      # compila a dist/
npm test           # guard + normalización (sin red)
npm run inspect    # MCP Inspector contra el servidor compilado
npm run bundle     # arma build/bg-mcp.mcpb para Claude Desktop

npm run bundle monta un directorio aparte con dist/, el manifest.json y solo las dependencias de producción, y lo empaqueta con el CLI de @anthropic-ai/mcpb. Tiene que ser autocontenido porque Claude Desktop descomprime el bundle y ejecuta node dist/index.js sin instalar nada.

Publicar

Publica GitHub Actions al empujar un tag de versión:

npm version patch      # sube package.json y arrastra plugin.json
git push --follow-tags

El workflow (.github/workflows/publish.yml) corre las pruebas, verifica que package.json, los manifiestos y el tag digan la misma versión, publica a npm, y arma el .mcpb y lo cuelga del release de GitHub.

Necesita un secreto NPM_TOKEN en el repo (Settings → Secrets and variables → Actions). Que sea un granular access token de npm, limitado al paquete bg-mcp y con permiso de escritura — no un token clásico de cuenta, que puede publicar cualquier cosa a tu nombre. Se puede prescindir del secreto configurando trusted publishing en npmjs.com, que autentica por OIDC contra este repo y este workflow.

Para publicar a mano el flujo sigue siendo npm publish.

Las versiones

La versión vive repetida en tres archivos y ninguno la hereda de otro. El hook version de npm corre scripts/sync-version.mjs, que la copia a .claude-plugin/plugin.json y a manifest.json y los deja en el mismo commit; scripts/check-version.mjs vuelve a comprobarlo en CI por si alguien editó a mano. La lista está en scripts/manifests.mjs — un archivo nuevo que repita la versión se agrega ahí. La que reporta el servidor en src/index.ts sigue suelta, pero solo se ve en el handshake MCP.

Hubo una versión de esto que publicaba un npm-shrinkwrap.json para que Claude Code pudiera instalarle dependencias al plugin. Ya no hace falta: el plugin arranca el servidor con npx, que resuelve el paquete y sus dependencias por su cuenta. Se quitó también porque un shrinkwrap publicado le fija el árbol de dependencias a todo el que instale el paquete, no solo a quien lo use como plugin.

Available Tools

14 tools
bg_get_accountGet account detailA

Full detail for one product, dispatching on its type: savings accounts return balances and associated debit cards, credit cards return limit/cutoff/payment dates, and the pension returns fund balances. Get the portalId from bg_list_accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
portalIdYesThe account portalId from bg_list_accounts.
includeTransitNoSavings only: also fetch transactions accepted but not yet posted.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden and it pays off by revealing type-dispatching behavior and product-specific results (balances/cards, credit dates, pension balances). It does not describe auth, errors, or response shape, but for a read-style account-detail call the disclosed behavior is meaningful and not merely a paraphrase of 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?

Two sentences with no filler; the scope is front-loaded before the type-specific details and the source of the key parameter. The type-specific list is dense but each clause distinguishes a branch of behavior.

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?

The description gives enough to call the tool for a chosen product: what it returns per type, that portalId comes from bg_list_accounts, and that it is a single-account full-detail retrieval. It is not a 5 because there is no output schema and the description omits any mention of response structure or the includeTransit behavior beyond what the schema already states.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both portalId and includeTransit. The description only restates the portalId source in the last sentence and adds no additional meaning for includeTransit, so it earns the baseline 3.

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 the resource ('one product') and the verb ('Full detail... dispatching on its type'), and enumerates type-specific return fields, so an agent can form a concrete model of the call. It does not explicitly differentiate from the sibling bg_get_pension even though pension is covered here, so it stops short of a 5.

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 instruction to get portalId from bg_list_accounts gives a clear prerequisite, and 'Full detail for one product' implies the main use case. However, it does not state when to prefer an alternative such as bg_get_pension, bg_list_accounts, or bg_list_transactions, nor any exclusions, leaving usage conditions mostly implied.

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

bg_get_card_categoriesGet credit card spending by categoryA

Banco General's own spend-by-category breakdown for a card statement period (Comida y Bebida, Transporte, Supermercados, etc.), with transaction counts and totals. Omit month/year for the current period. This is the bank's categorization, not a computed one.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFour-digit year.
monthNo1-based month.
portalIdYesCredit card portalId from bg_list_accounts.

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It adds useful context beyond the schema: the result includes 'transaction counts and totals,' and omitting month/year returns the current period. It does not mention login prerequisites, error behavior, or response format, but for a read-only lookup this is a reasonable disclosure level.

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 with no filler: the first states the purpose and contents, the second gives the key omission instruction, and the third clarifies the distinction from computed categorizations. Every sentence earns its place and the most important usage note is 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?

For a simple read-only tool with no output schema and no annotations, the description covers purpose, result contents, current-period behavior, and the bank-vs-computed distinction. It lacks an explicit mention of the return structure or what happens with invalid inputs, but these are minor gaps given the schema already documents the portalId source.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the optional month/year semantics with 'Omit month/year for the current period,' which is not fully captured in the schema's simple field descriptions. This is a modest enhancement beyond the schema, not a substantial one.

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

Purpose5/5

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

The description clearly states a specific verb and resource: retrieving credit card spending by category for a card statement period. It also distinguishes itself from computed alternatives by noting this is 'Banco General's own' categorization, separating it from sibling tools like bg_spending_summary.

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 provides an implicit usage context by contrasting with a computed categorization, suggesting when the bank's own breakdown is appropriate. However, it never explicitly names an alternative tool or states conditions like 'use X for computed categories,' so the guidance remains implied rather than direct.

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

bg_get_card_statementGet credit card statementA

Statement for a credit card: balance, minimum payment, cutoff and due dates, credit plans and rates. Pass month/year for a past statement, or omit both for the current period. Also returns the history of past cutoff dates so you can pick another period.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFour-digit year.
monthNo1-based month.
portalIdYesCredit card portalId from bg_list_accounts.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It reveals what data is returned, including the history of past cutoff dates, and implies a read-only statement retrieval. It doesn't cover error cases or auth, but the core behavior is well disclosed.

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 compact sentences with no filler. The primary output is stated first, then parameter behavior, then the extra return value. Every sentence 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?

For a three-parameter tool with no output schema, the description names the key return fields and explains optional parameters. It doesn't specify exact response format or error behavior, but it provides enough for an agent to call it 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 description coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining the relationship between month/year and current versus past statements, and how cutoff-date history helps select another period.

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 identifies a specific resource ('credit card statement') and lists concrete contents: balance, minimum payment, cutoff/due dates, credit plans and rates. This distinguishes it from sibling tools that handle transactions, categories, or account details.

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 gives clear context for when to pass month/year versus omit them, explicitly covering past and current statements. It doesn't name alternative tools for exclusions, but the usage guidance is unambiguous.

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

bg_get_pensionGet Pro-Futuro pension detailA

Balances and fund breakdown for the Pro-Futuro pension product, plus the monthly statement (contributions, interest, commissions, withdrawals) when month and year are given.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFour-digit year.
monthNo1-based month for the statement.
portalIdYesPension portalId from bg_list_accounts.

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure itself. It does disclose the conditional statement behavior and enumerates statement components, but it does not describe response structure, edge cases, or what happens when only one of month/year is provided. Nothing contradicts the annotations because there are none.

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

Conciseness5/5

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

A single sentence that front-loads the primary result, then adds the conditional statement clause and its components. Every clause contributes information, and there is no filler or redundant restatement.

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?

Without an output schema, the description reasonably explains the return content at a high level. However, it leaves ambiguity around partial month/year inputs and does not describe the response shape or behavior when only one of the two optional parameters is supplied.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The schema already documents portalId as coming from bg_list_accounts and month/year as statement selectors; the description reinforces the conditionality but adds little semantic 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 clearly identifies the specific resource (Pro-Futuro pension product) and the two kinds of data returned: balances/fund breakdown and an optional monthly statement. It is specific enough to set the tool apart from generic account tools like bg_get_account, though it does not explicitly name sibling alternatives.

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 gives a clear conditional usage rule: the monthly statement is included only when month and year are given. However, it does not state when to prefer this tool over bg_get_account, bg_list_accounts, or other siblings, and it offers no exclusion criteria.

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

bg_list_accountsList all accounts and productsA

Lists every Banco General product on the dashboard — savings accounts, credit cards and the Pro-Futuro pension — with balances and the portalId other tools need. Start here. Balances are as of BG's lastSyncDate, not live.

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?

With no annotations, the description carries the full burden. It discloses important behavioral traits: balances are as of lastSyncDate (not live), and it returns the portalId that other tools need. While it doesn't explicitly state read-only, the wording ('Lists') implies a non-mutating operation. The given caveat and dependency note add genuine value beyond the tool 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?

Two sentences with no wasted words. The primary purpose is front-loaded, examples of products are given in a parenthetical, and the critical caveat about data freshness is included without bloating. Every sentence 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?

For a zero-parameter, no-output-schema tool, the description is complete. It tells the agent what it returns (balances, portalId), why it matters (needed by other tools), and the freshness caveat. The 'Start here' guidance sets context for the overall workflow. Nothing needed for correct invocation 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?

The tool has zero parameters, so schema coverage is 100% by default. The description doesn't need to elaborate on parameters, and it correctly omits any param-related discussion. Baseline 4 applies since there is nothing to clarify.

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

Purpose5/5

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

The description uses a specific verb ('Lists') and resource ('every Banco General product on the dashboard'), enumerating the types (savings accounts, credit cards, Pro-Futuro pension). It clearly distinguishes from siblings like bg_get_account by implying a full list, and the phrase 'Start here' positions it as the entry point. No ambiguity about what the tool does.

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 'Start here', which is a clear directive on when to use this tool (as the first call). It also provides a caveat about data freshness ('not live'), which guides expected usage. However, it does not explicitly name alternatives or state when not to use it, leaving some inference to the agent.

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

bg_list_card_transactionsList credit card transactionsA

Charges and payments on a credit card for a statement period. Pass month/year for a specific period, or omit both for the current one. A BG statement period is not a calendar month — it runs from the previous cutoff date — so set clampToMonth to restrict results to the calendar month.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFour-digit year.
limitNoCap the number returned.
monthNo1-based month. Omit (with year) for the current statement period.
portalIdYesCredit card portalId from bg_list_accounts.
clampToMonthNoDrop transactions outside the given calendar month. Requires month and year.

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It usefully exposes a key behavioral quirk: BG statement periods are not calendar months and run from previous cutoff dates. It does not mention return structure or pagination, but the core behavioral nuance is well covered.

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, each earning its place: the resource and scope, the period selection rule, and the critical statement-period nuance. It is front-loaded with the core purpose and wastes no words.

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 low-complexity read-only list tool, the description plus fully documented schema is sufficient to select and call the tool correctly. It covers period semantics and filtering behavior, though the lack of an output schema means return shape is not described.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds value by explaining the combined behavior of omitting month/year and the relationship between clampToMonth and the calendar-month restriction, but it does not add syntax-level detail 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 it lists charges and payments on a credit card for a statement period, and it distinguishes statement periods from calendar months. However, it does not explicitly differentiate itself from sibling tools like bg_list_transactions or bg_search_transactions, so sibling differentiation is absent.

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 gives concrete invocation guidance: pass month/year for a specific period, omit both for the current period, and use clampToMonth to restrict to the calendar month. It does not mention when to prefer this tool over alternatives, but the usage context is clear.

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

bg_list_transactionsList savings account transactionsA

Transactions for one savings account over a date range, with pagination handled internally. Dates are Panama local time. For credit-card charges use bg_list_card_transactions instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoCap the number of transactions returned. Omit to return all.
toDateYesDate in YYYY-MM-DD, interpreted in Panama local time.
fromDateYesDate in YYYY-MM-DD, interpreted in Panama local time.
portalIdYesSavings account portalId from bg_list_accounts.

TDQS

A4.4/5.0
Behavior4/5

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

There are no annotations, so the description carries the behavioral burden. It discloses two non-obvious traits: pagination is handled internally and dates are interpreted in Panama local time. It does not describe the return structure, but the list operation's read-only nature is clear from the wording.

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 two tightly written sentences. Core scope and behavior come first, followed by the sibling redirect, with no redundant filler.

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?

All invocation-critical details are present: single-account scope, date range, internal pagination, timezone handling, and the card-transactions alternative. Since there is no output schema, a note about the returned transaction shape would improve completeness, but this does not seriously hinder selection or invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters, including the Panama timezone and portalId provenance. The description only reinforces the account and date-range concepts without adding parameter-level detail, so the baseline score applies.

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

Purpose5/5

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

The description states a specific verb and resource: listing transactions for one savings account over a date range. It clearly distinguishes itself from the card-transactions sibling, so an agent can tell what this tool does without opening the 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?

It explicitly says to use bg_list_card_transactions instead for credit-card charges, and the savings-account/date-range wording defines when this tool is appropriate. The sibling routing is concrete and actionable.

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

bg_login_answerAnswer security question and submit passwordA

Step 2 of 3. Completes the login with the security answer and password. Returns { status: "authenticated" } on success, or { status: "otp_required" } if BG sends a one-time code — in that case ask the user for the code and call bg_login_otp.

ParametersJSON Schema
NameRequiredDescriptionDefault
answerYesThe user's answer to the security question.
loginIdYesThe loginId returned by bg_login_start.
passwordYesThe user's Banco General password.
rememberNoStore credentials in the macOS Keychain so the server can re-login silently when BG expires the session. Only set this if the user explicitly asks to stay logged in.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are present, so the description carries the burden of behavioral disclosure. It reveals both possible response statuses and the follow-up branch, which is meaningful context beyond the bare action. It does not mention failure/error responses or side effects of the remember flag, but the core login behavior is transparent.

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 compact sentences, with the step context front-loaded before the success/OTP branch. Every sentence contributes useful information and there is no filler.

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?

Since there is no output schema, the description properly supplies the key response shapes and the OTP branch instruction. It also anchors the tool in the 3-step login sequence. Minor omissions around error responses keep it from being fully complete.

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

Parameters3/5

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

The input schema already documents all four parameters, including the remember flag's Keychain behavior, so the baseline is 3. The description adds only that the security answer and password are what completes the login, without adding extra parameter-level meaning.

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 the specific action: complete the login with the security answer and password, and labels it as Step 2 of 3. This clearly distinguishes it from bg_login_start and bg_login_otp, so an agent can tell where it fits in the auth flow.

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 says what to do when the response is otp_required: ask the user for the code and call bg_login_otp. This gives the agent a direct rule for choosing the correct next tool, with no ambiguity.

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

bg_login_otpSubmit one-time codeA

Step 3 of 3, only needed when bg_login_answer returned status "otp_required". Submits the code Banco General sent to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe one-time code the user received.
loginIdYesThe same loginId used in the previous steps.

TDQS

A4.1/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden of behavioral disclosure. It usefully communicates sequencing and an OTP-required precondition, but it does not disclose success/failure behavior, whether the OTP is consumed, session effects, or expected outputs after submission.

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 tightly written sentences. The conditional trigger is front-loaded, and every clause contributes actionable information without repetition.

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

Completeness3/5

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

The description clearly positions the tool within the login sequence but omits post-submission behavior and error handling. Without an output schema or annotations, an agent might not know what statuses to expect or how to react after sending the code.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds slight context by noting that loginId is the same one used in previous steps, but code is already described well in the schema. No major extra meaning is provided.

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: 'Submits the code Banco General sent to the user.' It also anchors the tool within the login flow as 'Step 3 of 3,' clearly distinguishing it from related login tools like bg_login_start and bg_login_answer.

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 an explicit trigger condition: 'only needed when bg_login_answer returned status "otp_required".' This tells an agent exactly when to invoke the tool and ties it to a prior step's output.

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

bg_login_startStart Banco General loginA

Step 1 of 3. Submits the username and returns the security question BG asks for. Relay that question to the user, then call bg_login_answer with their answer and password. The login expires after 5 minutes if not completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesThe user's Banco General username (usuario de Zona Segura).

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it reveals that login expires after 5 minutes if not completed, that the tool returns a security question, and that this is only the first step. It does not mention failure modes like invalid username, but the disclosed expiry and step sequencing provide meaningful behavioral context.

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, all useful: the step number, the action and return value, the user relay instruction, and the expiry warning. The most important information is front-loaded and every sentence 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?

For a one-parameter tool with no annotations and no output schema, the description explains the flow, the next step, and the time limit well. A minor gap is that it does not describe the exact shape or content of the returned security question, but 'returns the security question BG asks' is sufficient for an agent to act.

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 single 'username' parameter already has a clear description in the schema. The tool description adds only that the username is submitted, which reinforces but does not expand on the schema's meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states a specific action ('submits the username') and a specific resource (Banco General login), plus the expected return ('the security question BG asks'). It explicitly identifies itself as 'Step 1 of 3' and names bg_login_answer as the continuation, which distinguishes it from sibling login 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?

The description gives clear sequential guidance: submit the username, relay the returned question to the user, then call bg_login_answer. It does not explicitly state when not to use this tool versus alternatives, but the step-based flow and named next step make the intended usage unambiguous.

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

bg_logoutLog out of Banco GeneralA

Deletes the stored session and any credentials kept in the Keychain, and closes any login in progress.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden, and it does disclose the destructive side effects: it deletes stored session data and Keychain credentials, and closes an in-progress login. It could add idempotency or failure behavior (e.g., behavior when already logged out), but the key side effects are clearly stated.

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

Conciseness5/5

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

The description is a single, well-structured sentence that names the primary effect first ('Deletes the stored session') and then the additional side effects. Every phrase earns its place; no filler or repetition.

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?

Given that this is a parameterless logout operation with no output schema, the description is sufficient for an agent to invoke it correctly: it identifies the action and the important side effects. There is no missing information that would affect how the tool is called.

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

Parameters4/5

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

The tool has zero parameters and schema coverage is nominally 100%, so there is nothing for the description to add about parameters. Baseline 4 is appropriate for a parameterless tool.

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 identifies the action ('Deletes', 'closes'), the resources affected (stored session, Keychain credentials, login in progress), and the overall purpose of logout. This distinguishes it from sibling tools like bg_session_status (which only checks state) and the various bg_login_* 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?

Usage is implied rather than explicitly stated: the description makes it obvious that this tool ends a banking session and aborts in-progress logins. However, it does not explicitly say when to use it versus checking session state with bg_session_status, nor does it mention any preconditions such as being logged in.

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

bg_search_transactionsSearch transactions across all accountsA

Searches every savings account and credit card at once over a date range, optionally filtering by description text and amount. Use this for questions like "how much did I spend at X" or "find that $250 charge in March" — it saves calling the per-account tools one by one.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoRestrict to income (Ingreso) or spending (Gasto).
limitNoCap results.
queryNoCase-insensitive substring matched against the transaction description.
toDateYesEnd date, YYYY-MM-DD (Panama time).
fromDateYesStart date, YYYY-MM-DD (Panama time).
maxAmountNoOnly transactions of at most this amount.
minAmountNoOnly transactions of at least this amount.

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description bears the behavioral burden. It reveals the operation is an aggregate read/search over every savings account and credit card, which is meaningful scope information. However, it doesn't mention ordering, pagination, response shape, or how limit/defaults behave beyond what the schema already says.

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 sentences with the core scope and filters front-loaded. Every clause earns its place; the examples are illustrative rather than redundant.

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 search tool with no output schema and no annotations, the description is reasonably complete for selection and invocation: all parameters are documented in the schema, and the description clarifies aggregate scope. It could still be stronger by stating that results are a list of transactions and noting default result limits or ordering, but these gaps are minor.

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

Parameters3/5

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

All seven parameters already have schema descriptions, so the baseline is 3. The description reinforces that 'query' filters by description text and 'minAmount'/'maxAmount' apply to amounts, and the examples may help an agent map natural-language requests to parameters, though it adds no syntax or constraints 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 opens with a specific verb and resource: 'Searches every savings account and credit card at once over a date range.' It clearly distinguishes this aggregate tool from the per-account siblings by emphasizing all-accounts scope and optional filters.

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?

'Use this for questions like "how much did I spend at X" or "find that $250 charge in March"' gives concrete invocation triggers. It also contrasts with 'per-account tools one by one,' identifying the alternative class, though it doesn't name a specific sibling or state a hard when-not-to-use condition.

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

bg_session_statusCheck session statusA

Reports whether there is a usable Banco General session, who it belongs to, and how fresh it is. Call this before asking the user for credentials — they may already be logged in.

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?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does explain the report contents (usable session, owner, freshness) but does not explicitly state that calling it is side-effect-free or describe what happens when no session exists. This is adequate for a simple status check 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.

Conciseness5/5

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

Two concise sentences with no wasted words. The most important outcome—whether a usable session exists—is front-loaded, and the actionable guidance follows directly.

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?

The description gives enough context for an agent to know when to call the tool and what kind of information to expect, even without an output schema. It could be more explicit about the exact return format, but the semantics are sufficiently clear for deciding the next step in a login flow.

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 input schema has zero parameters, so there is nothing to document. The baseline of 4 applies because there are no parameter semantics to convey and the description does not need to compensate for any missing parameter details.

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

Purpose5/5

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

The description clearly states a specific verb and resource: it reports whether a usable Banco General session exists, its owner, and freshness. This strongly distinguishes it from the login and account-list siblings.

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 gives explicit when-to-use guidance: call this before asking the user for credentials, because they may already be logged in. It does not explicitly say when not to use it or name an alternative, but the unique purpose makes that less necessary.

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

bg_spending_summarySummarize income and spending for a periodA

Aggregates every account for a month (or an explicit date range): total income, total spending, net, a per-account breakdown and the largest transactions. Use this for "how did I do this month".

ParametersJSON Schema
NameRequiredDescriptionDefault
topNNoHow many largest transactions to include.
monthNoTarget month as YYYY-MM. Defaults to the current month if no range is given.
toDateNoExplicit end date; overrides month.
fromDateNoExplicit start date; overrides month.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavior disclosure. It clearly says the tool aggregates across all accounts over a month or date range and returns a financial summary, which implies a read-only analytical operation. It doesn't explicitly state 'does not modify data' or discuss authorization, but the behavioral scope is reasonably transparent.

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 only two sentences, front-loads the core aggregation behavior, and includes a compact usage example at the end. Every phrase contributes meaning and there is no redundant padding.

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?

Although there is no output schema, the description lists the key return components: total income, total spending, net, per-account breakdown, and largest transactions. The period-selection behavior is clarified between month and explicit date range, making the tool fully invocable without missing critical context.

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

Parameters3/5

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

The input schema already documents all four parameters with 100% coverage, so the description is not required to repeat parameter details. It does add the high-level notion of 'month (or an explicit date range)' and 'largest transactions', but these align with the schema rather than revealing new semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

The description names a specific verb ('Aggregates') and resource ('every account'), and clearly enumerates the produced outputs: total income, total spending, net, per-account breakdown, and largest transactions. This makes it easy to distinguish from sibling transaction-listing and account-detail 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?

It gives an explicit usage cue: 'Use this for "how did I do this month"', which clearly frames when this summary tool is appropriate. It does not name specific alternatives or state when not to use it, so it stops short of a full when/when-not comparison.

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. 14 tool updatesv0.1.1
    • First observedbg_get_account
    • First observedbg_get_card_categories
    • First observedbg_get_card_statement
    • First observedbg_get_pension
    • First observedbg_list_accounts
    • First observedbg_list_card_transactions
    • First observedbg_list_transactions
    • First observedbg_login_answer
    • First observedbg_login_otp
    • First observedbg_login_start
    • First observedbg_logout
    • First observedbg_search_transactions
    • First observedbg_session_status
    • First observedbg_spending_summary

TDQS

A4.1/5.0

Scored across 14 tools

Disambiguation4/5

Tools are generally well-separated by resource and action, with login steps and account vs. transaction queries clearly delineated. The main overlap is between bg_get_account and bg_get_pension, since both can return pension fund balances, though bg_get_pension adds a monthly statement.

Naming Consistency4/5

All tools share the bg_ prefix and use clear snake_case, mostly following a get_/list_/search_ action pattern. Minor deviations like bg_session_status, bg_spending_summary, and bg_logout break the verb_noun convention but are still readable and predictable.

Tool Count5/5

14 tools is well within the ideal range and each one maps to a necessary capability for a personal banking MCP: login lifecycle, account overviews, transaction queries, card statements, and cross-account search/summary. No tool feels redundant or extraneous.

Completeness5/5

The surface covers the full read-side lifecycle: authentication, session checks, account/balance retrieval, detailed transactions for savings and cards, card statements and categories, pension details, and cross-account aggregation. There are no obvious dead ends for common personal-finance questions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding assistants to interact with MonCashConnect payment data read-only, including checking balances, listing transactions, and viewing payment details, without moving money.
    3 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables reading C6 Bank account balances, statements, credit card bills, and investments via Open Finance Brasil. It is read-only and regulated by the Central Bank of Brazil.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to securely read balances, statements, credit card bills, and investments from Safra accounts via Open Finance Brasil. Read-only, regulated by the Central Bank of Brazil.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables financial data access from connected bank accounts via MCP tools, allowing natural language queries about balances, transactions, subscriptions, investments, and more, with a focus on privacy and read-only access.
    -