Skip to main content
Glama

Server Details

Connect your Toro account to AI via Brazil's Open Finance: balances, statements, cards, investments.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
mcp-dir/toro-mcp
GitHub Stars
0
Server Listing
Toro MCP

Available Tools

25 tools
authenticateA
Idempotent
Inspect

MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header Authorization: Bearer <token> for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "" } after the user pastes, or with no args to get the link.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo

TDQS

A3.9/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations by explaining the difference between permanent non-expiring connections and session-only logins. It also indicates that calling with no arguments returns a link, which is useful for the agent.

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

Conciseness3/5

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

The description is two sentences but starts with an awkward parenthetical 'MCP.AI for IDE agents (Cursor, etc.)' that adds clutter. It could be more streamlined, though the core content is well-structured.

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 tool with one parameter and no output schema, the description covers the purpose, parameter semantics, and both usage modes. It does not describe the expected response, but that is not critical for an authentication flow and the annotations provide additional constraints.

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

Parameters4/5

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

The schema has one parameter 'token' with no description, but the description explains it as a JWT for session-only login and clarifies that omitting it yields a link. This compensates for the 0% schema description coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: authenticate by logging in and obtaining an access token. It distinguishes itself from siblings by focusing on the authentication workflow, though it does not explicitly compare with 'connect' or other 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 provides clear guidance on when to use which method: permanent setup via config header versus session-only login by pasting a token. It also explains the behavior when called with no arguments, giving concrete usage context.

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

connectA
Read-onlyIdempotent
Inspect

Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.

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?

The description discloses conditional outputs—authenticated:true with empty pending[] when all connected, and connect_url when credentials are missing. This adds behavioral detail beyond the readOnlyHint and idempotentHint annotations, revealing state-dependent behavior.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and includes necessary conditionals without any fluff. Every sentence earns its place, making it highly concise and well-structured.

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

Completeness5/5

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

Despite lacking an output schema, the description fully explains the return values in both connection states, which is sufficient for this simple, parameterless tool. It covers the essential behavioral context needed to invoke and interpret results.

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 no parameters, so there is nothing for the description to add beyond the already complete schema. The baseline of 4 applies because the schema covers all (zero) parameters.

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

Purpose5/5

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

The description clearly states the tool returns connection status and URLs, with specific conditional behavior. It distinguishes itself from siblings by focusing on the overall connection state rather than individual provider operations. The verb 'returns' and resource 'connection status and URLs' are specific and unambiguous.

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

Usage Guidelines3/5

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

The description provides context on when different outputs occur (all connected vs. missing credentials) but does not explicitly state when to use this tool versus alternatives like authenticate or openfinance_provider_status. Usage is implied rather than explicitly guided.

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

marketplaceAInspect

The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/ link that opens without login.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
actionNosearch
mcp_idNo
messageNo
tool_idNo
argumentsNo{}
immediateNo
tier_slugNo
prompt_bodyNo
prompt_slugNo
prompt_toolNo
prompt_varsNo{}
conversationNo[]
prompt_titleNo
request_nameNo
cancel_reasonNo
cancel_commentNo
prompt_targetsNo
report_contextNo
prompt_categoryNo
request_detailsNo
prompt_descriptionNo

TDQS

A4.6/5.0
Behavior5/5

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

The description goes beyond annotations by disclosing side effects: invoke runs a one-off install without bloating the toolkit, install makes permanent changes, and writes require owner/admin. It also explains what happens with credential paywalls (connect link) and payment issues (checkout link), and that prompt links open without login. These are critical behavioral traits not captured by the generic annotations.

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

Conciseness4/5

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

The description is dense and front-loaded, starting with the core purpose and then logically flowing through the main actions, key caveats, admin requirements, and prompt library. While it is long, each sentence adds necessary context for a complex tool. Minor improvement would be breaking into bullet points, but it remains well-structured and efficient.

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

Completeness3/5

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

Given the tool's complexity (14 actions, 23 parameters, no output schema), the description covers most actions and return behaviors (e.g., describe returns full profile, invoke returns connect/checkout links). However, it omits some actions like resume, and doesn't explain parameters such as immediate, conversation, or cancel_reason. These gaps make it incomplete, though far from inadequate.

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 0% schema description coverage, the description compensates by explaining the meaning of key actions and their associated parameters. It explains how to use action, mcp_id, tool_id, and prompt-related fields (prompt_slug, prompt_vars, etc.) through the described flows. However, not all 23 parameters are individually addressed (e.g., immediate, resume, cancel_reason), so it is not a full replacement for parameter-level documentation.

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

Purpose5/5

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

The description clearly states the tool's function: it is the official mcp.ai marketplace, a catalog of MCPs/tools and a way to run them. It lists specific actions (search, describe, invoke, install, etc.) and differentiates itself from the openfinance siblings by focusing on the platform's core catalog and execution 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?

The description provides explicit usage guidance: prefer invoke for one-off use, use install for permanent additions, and mentions that subscribe/cancel handle billing. It also gives alternative flows (list_tools for callable tools) and prerequisite conditions (writes require owner/admin), making when-to-use clear.

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

openfinance_disconnect_bankA
Destructive
Inspect

Revokes the Open Finance consent for a specific bank and deletes the connection data. The bank's data will no longer be available. Returns an add_connection_url to re-connect if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, and the description adds meaningful context: it revokes consent, deletes connection data, makes data unavailable, and returns a reconnection URL. This goes beyond the annotation by specifying the exact destructive effects and the fallback mechanism, without contradicting the annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action, and no filler. Every clause adds value: what happens, the consequence, and the return value. It is appropriately sized for the tool's simplicity.

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 tool with one parameter, no output schema, and destructive behavior, the description covers the action, effects, and return value. The only gap is the lack of explicit parameter definition, but the overall context is adequate. More detail would be needed if the tool were more complex.

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

Parameters2/5

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

The schema has one parameter 'item' with no description, and schema description coverage is 0%. The description mentions 'a specific bank' but does not explicitly explain that 'item' should be the bank/connection identifier. The agent must infer this from the tool name and context, which is insufficient for correct invocation.

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

Purpose5/5

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

The description clearly states the action: 'Revokes the Open Finance consent for a specific bank and deletes the connection data.' This uses a specific verb and resource, and the effect is unambiguous. It distinguishes itself from sibling tools by being the only one focused on disconnecting/revoking access.

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 implies the use case: when you need to revoke consent and delete connection data for a bank. It notes the consequence ('data will no longer be available') and provides a recovery path ('Returns an add_connection_url to re-connect'). It does not explicitly mention alternatives, but the purpose is distinct enough among siblings.

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

openfinance_force_syncAInspect

Forces the bank to re-sync one or more connections NOW and WAITS for it to finish (PATCH /items/:id, then polls until the item stops updating, up to ~60s). Use this when a balance or transaction list looks stale: a connection can read UPDATED yet be hours old, and this pulls fresh data WITHOUT disconnecting/reconnecting. Pass items as an array of selectors (item_id, connector_id, connector_name, or the user-set custom_label nickname); OMIT items to sync ALL linked banks. Returns { results, errors }; each result has the final status, executionStatus, lastUpdatedAt (advances when data is refreshed), and synced (true = fresh data is ready). needs_action (e.g. MFA_REINTERACTION / LOGIN_ERROR / WAITING_USER_INPUT) means the user must re-authenticate — those results include a reconnect_url that opens the widget in UPDATE mode for that exact connection (user enters credentials / MFA token, data refreshes in place, no slot consumed, no disconnect needed). timed_out: true means the sync is still running — re-check with openfinance_get_item_status. Set wait: false for fire-and-forget (returns immediately while UPDATING).

ParametersJSON Schema
NameRequiredDescriptionDefault
waitNo
itemsNo

TDQS

A5/5.0
Behavior5/5

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

The description richly details side effects and runtime behavior: polling until completion (~60s timeout), return structure with status/executionStatus/lastUpdatedAt/synced, needs_action states with reconnect_url, and timed_out semantics. It even explains the UX implication (user re-auth in UPDATE mode). Annotations are minimal (readOnly=false, destructive=false) but consistent; the description adds far more than annotations could convey.

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 dense but every sentence earns its place. It opens with the core action, then usage, then parameters, then response format, then error states, then timeout handling. No filler or repetition; the structure flows logically from action to details.

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 the tool's complexity (waiting, polling, re-authentication, multiple result states), the description covers all essential aspects: return shape, failure modes, timeout behavior, and relationship to sibling tools. No output schema exists, so the explicit description of results and fields is necessary and complete.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully explains both parameters: items as an array of selectors (item_id, connector_id, connector_name, custom_label nickname) with the option to omit for all banks, and wait as a boolean controlling synchronous vs fire-and-forget. This adds substantial meaning beyond the bare schema types.

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+resource: 'Forces the bank to re-sync one or more connections NOW and WAITS for it to finish.' It clearly states the tool's action and scope, and distinguishes it from siblings like openfinance_get_item_status (polling status) and openfinance_disconnect_bank (no disconnection involved). The mention of the HTTP method (PATCH /items/:id) further grounds its purpose.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use this when a balance or transaction list looks stale' and explicitly states what it does NOT do: 'WITHOUT disconnecting/reconnecting.' It also gives an alternative for timeout cases: 're-check with openfinance_get_item_status.' The wait parameter's fire-and-forget behavior is explained, making usage conditions unambiguous.

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

openfinance_get_account_balanceA
Read-onlyIdempotent
Inspect

Returns the latest available balance per account id (GET /accounts/:id/balance). This is the freshest balance the provider can serve, but it is a SNAPSHOT anchored to the connection's last upstream sync: the updateDateTime/updatedAt in each row is that sync instant, NOT a to-the-second live read. If a movement that just happened is not reflected yet, or the balance disagrees with the sum of openfinance_list_transactions, run openfinance_force_sync to pull fresh data and then re-read. Pass account_ids as an array (1–50). CREDIT accounts may return Pluggy BALANCE_FETCH_ERROR (provider could not fetch it) or BALANCE_CONSENT_ERROR (the institution refused it because the consent lacks the balance permission — reconnecting the bank restores it) — those rows include a structured warning instead of throwing. When the financial institution is temporarily unavailable upstream (5xx) or the connector is not Open Finance, the row DEGRADES to the last-synced balance with realtime: false, updatedAt and a warning instead of an error. Response shape: { results: [...], errors: [{ id, status, message }] }.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idsYes

TDQS

A4.9/5.0
Behavior5/5

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

The description goes far beyond annotations, disclosing that updatedAt is the sync instant rather than a live read, that errors may be embedded as warnings, and that rows can degrade to last-synced balances with realtime:false. Nothing is hidden.

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 long but dense, front-loading the core behavior and then layering necessary caveats about freshness, errors, and degradation. Every sentence adds actionable information rather than 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?

With no output schema, the description supplies the response shape, error structure, degraded behavior, and parameter constraints. It fully equips an agent to call the tool and interpret results 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?

Although schema coverage is 0%, the description compensates by stating that account_ids must be an array with 1–50 items. It doesn't spell out where the account IDs come from, but for a single parameter this is enough to invoke correctly.

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: 'Returns the latest available balance per account id', and cites the endpoint. This clearly distinguishes the tool from list/transaction/sync siblings.

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 explains the snapshot nature, tells the agent to call openfinance_force_sync if data seems stale or disagrees with openfinance_list_transactions, and describes degraded responses. This gives concrete when-to-use and when-to-use-alternative guidance.

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

openfinance_get_accounts_detailA
Read-onlyIdempotent
Inspect

Returns full account objects including extended creditData (additional cards, limits) per id (GET /accounts/:id). Pass account_ids as an array (1–50). { results, errors } batch shape. May include a provider_incident block when the Open Finance provider has an OPEN incident affecting a connected bank: credit limits and balances may be unreliable (e.g. a limit near 1,00) until the provider recovers. Do not present those values as real.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idsYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and idempotent, and the description adds valuable context: the {results, errors} batch shape, the provider_incident block, and a warning about unreliable credit limits/balances during an open provider incident, with explicit instruction not to present those values as real. This goes beyond annotations and significantly helps the agent handle edge cases.

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

Conciseness4/5

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

The description is structured with the main purpose first, then usage, then batch shape, then the incident caveat. Every sentence adds value, but the last sentence on provider_incident is a bit long with a potentially confusing example ('limit near 1,00'). It's still concise overall.

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 tool with one parameter and no output schema, the description covers the return shape, batch behavior, and important data reliability caveats. It provides enough for the agent to use the tool correctly and interpret results safely, leaving no major gaps.

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 has no descriptions (0% coverage), but the description directly explains the only parameter: account_ids is an array, accepts 1–50 items, and is used per id. It also clarifies the batch result shape. This compensates well for the missing schema descriptions, though it doesn't go into exhaustive detail about array item formatting or edge cases.

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 returns full account objects including extended creditData, which is specific and differentiates from simpler listing/balance tools. It references the endpoint and scopes by id, but doesn't explicitly name sibling tools to distinguish, so it falls 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 description indicates how to pass account_ids (array of 1-50) and mentions batch behavior, implying use for detailed account retrieval. However, it doesn't explicitly state when to use this tool versus alternatives like openfinance_get_account_balance or openfinance_list_accounts, nor does it exclude any use cases.

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

openfinance_get_credit_card_billA
Read-onlyIdempotent
Inspect

Returns bill-level detail for one or more credit card bills by id (GET /bills/:id): dueDate, billClosingDate (when the cycle closed — the boundary that defines which purchases belong to this bill), totalAmount, financeCharges and payments[] (id, paymentDate, amount, valueType, paymentMode). ITEMIZED PURCHASES (OPT-IN): the bank's bill payload has no transactions in it — they live on the card ACCOUNT. Pass include_transactions:true (plus account_id of the credit card, since the bill itself carries no account reference) and each row also gets transactions[], transactions_count, transactions_sum and reconciles_with_total, already matched to that bill. Always check transactions_basis: bill_id = exact (the bank tagged each transaction with this bill — the normal case for CLOSED bills), date_window = ESTIMATE (confidence:'low', window echoed in transactions_window) used when the connector tags no billId or the bill is still open (PENDING lines get no billId until the cycle closes), unavailable = no link possible. Opt-in because it costs an extra full transaction scan of the account. Whatever the basis, the bill's own totalAmount is authoritative — do NOT rebuild it by summing transactions. Without the opt-in the response carries a transactions_hint; you can also fetch them yourself via openfinance_list_transactions with the credit card account_id and a from/to range ending at billClosingDate. Pass bill_ids as an array — use openfinance_list_credit_card_bills first to discover ids. { results, errors } batch shape. NOTE: Pluggy does NOT return a paid/status field. In Brazilian Open Finance, payments[] reflects payments registered during THIS bill's billing cycle — typically the payment of the PREVIOUS bill (do NOT assume this bill was paid just because payments[] is non-empty). To check paid status, prefer openfinance_list_credit_card_bills which derives payment_status via cross-bill match.

ParametersJSON Schema
NameRequiredDescriptionDefault
bill_idsYes
account_idNo
transactions_detailNo
include_transactionsNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint/idempotentHint annotations, the description discloses extensive behavioral details: the transactions_basis field with three possible values and their implications, the authoritative totalAmount (don't sum transactions), the cost of the opt-in, and the subtle fact that payments[] typically refers to the previous bill's payment. It also notes Pluggy does not return a paid/status field. This goes far beyond what annotations provide.

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

Conciseness3/5

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

The description is very long, but it is structured with bolded section headers (e.g., 'ITEMIZED PURCHASES (OPT-IN)') and uses inline code formatting for clarity. It front-loads the core purpose in the first sentence. However, it is far from concise; each sentence carries critical caveats, but the sheer volume may overwhelm an agent. The structure helps but is not enough to overcome the length.

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 tool with 0% schema coverage and no output schema, the description is remarkably complete. It explains the response batch shape, the transactions basis logic, the need for account_id, the alternative to opt-in, and the paid-status caveat. It even provides query hints (using billClosingDate as range end). There is no obvious missing information that an agent needs to call it correctly.

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

Parameters3/5

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

The schema has no descriptions (0% coverage), so the description must compensate. It explains bill_ids (array, discover via list), account_id (needed for include_transactions), and include_transactions (opt-in for transactions). However, it completely omits the 'transactions_detail' parameter with its enum values (compact, rich, raw), leaving that parameter's semantics unexplained. This is a gap given the zero schema coverage.

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

Purpose5/5

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

The description clearly states the tool returns bill-level detail for credit card bills via a specific endpoint (GET /bills/:id), listing exact fields. It distinguishes itself from sibling tools by explicitly mentioning openfinance_list_credit_card_bills for discovery and openfinance_list_transactions for self-fetching transactions, so an agent knows exactly what this tool does and what it doesn't.

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?

The description gives explicit when-to-use guidance: use the opt-in for transactions only when needed, and notes it costs an extra scan; it says to use openfinance_list_credit_card_bills first to get ids; it also advises against assuming paid status from payments[] and recommends the listing tool for payment_status. This clearly differentiates from alternatives and provides exclusions.

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

openfinance_get_item_statusA
Read-onlyIdempotent
Inspect

Returns the current status of a bank connection (UPDATED, UPDATING, LOGIN_ERROR, etc.), its executionStatus, connector metadata, and a reconnect_url that reopens the widget in UPDATE mode for that connection (re-authenticate / enter MFA token in place, without disconnecting and without consuming a connection slot). Omit item to get the status of ALL linked banks at once (returns { count, items }); pass item for a single bank.

Bulk support: accepts item_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemNo
item_idNo
item_idsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive. The description adds meaningful behavioral context: reconnect_url reopens the widget in UPDATE mode without disconnecting or consuming a connection slot, and returns various status values. This exceeds what annotations provide, though it does not cover all edge cases.

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 well-structured with the main behavior, then usage patterns, then bulk support. Every sentence adds useful information without redundancy. It is appropriately concise given the tool's complexity.

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 covers the main return values (status, executionStatus, connector metadata, reconnect_url) and the bulk response shape. It lacks details on `item_id` semantics and any error conditions, but is otherwise complete for a read-only tool with no output 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 coverage is 0%, so description must compensate. It explains `item` (single bank) and `item_ids` (batch), but does not explain `item_id` or its relationship to `item`. This is a partial gap in parameter 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?

The description clearly states it returns the current status of a bank connection, including specific fields like executionStatus, connector metadata, and reconnect_url. It distinguishes from sibling tools by describing a unique resource and operation, and mentions bulk support via item_ids.

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

Usage Guidelines4/5

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

Provides clear context on when to omit or pass `item` for single vs. all banks, and mentions bulk support. However, it does not explicitly compare with alternatives like openfinance_list_connections or openfinance_provider_status, so no exclusions or when-not-to-use guidance.

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

openfinance_get_loan_detailA
Read-onlyIdempotent
Inspect

Returns full loan contract detail by id (GET /loans/:loanId): interestRates[] (taxType, ratePercentage, indexer), contractedFinanceCharges[], balloonPayments[], warranties[], installments schedule (installmentsCount, paidInstallments, numberOfInstallmentsRemaining, installmentFrequency), amortizationScheduled, CET, ipocCode and dates. Use after openfinance_list_loans to deep-dive on a specific contract. Pass loan_ids as an array (1-50). { results, errors } batch shape.

ParametersJSON Schema
NameRequiredDescriptionDefault
loan_idsYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate a safe read operation (readOnlyHint, idempotentHint, non-destructive). The description adds behavioral context by listing the response fields, the batch shape '{ results, errors }', and the endpoint path, which goes beyond annotation information.

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, information-dense sentence that front-loads the purpose, then uses a colon to enumerate return contents, includes usage guidance, parameter constraints, and batch shape—all without any redundant words.

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 the tool has only one parameter and no output schema, the description thoroughly covers the return values, usage context, and parameter constraints. It is self-sufficient for an agent to select and invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0% for the only parameter, but the description compensates fully by explaining 'loan_ids' as an array with 1-50 items and implying they are loan IDs obtained from the list tool. This gives the agent complete understanding of the parameter.

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

Purpose5/5

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

The description clearly states the tool's function: 'Returns full loan contract detail by id' with a specific verb and resource. It also differentiates from the sibling openfinance_list_loans by indicating this is for a deep-dive on a specific contract.

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

Usage Guidelines4/5

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

Provides explicit usage guidance: 'Use after openfinance_list_loans to deep-dive on a specific contract.' It also specifies the parameter format ('Pass loan_ids as an array (1-50)'). However, it does not mention any when-not-to-use scenarios or alternatives among the many sibling tools.

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

openfinance_list_accountsA
Read-onlyIdempotent
Inspect

Returns accounts for a bank connection: BANK (checking/savings) and CREDIT (credit card) with balance, number, type, subtype, bankData, and creditData. Also returns bank (the brand/connector name like 'Nubank Empresas' — same shown in the dashboard UI) and connector_id. Note: each account's name is the legal entity that issues the account (e.g. 'Nu Pagamentos S.A. - Instituição de Pagamento'), which is not the same as the brand — when referring to the bank in user-facing text, use bank. OMIT item to list accounts across ALL linked banks at once — the response aggregates every connection's accounts into results, each row tagged with its own bank/connector_id/item_id (use this when the user asks for 'my accounts/cards' without naming a bank). Pass item to target a single bank (response carries bank/connector_id/item_id at the root). CREDIT (credit card) balance: its meaning is CONNECTOR-DEPENDENT — some banks report the current open-bill partial, others the full revolving/installment debt — so do NOT treat balance as 'this month's bill'. The open billing cycle is defined by creditData.balanceCloseDate (when it closes) / balanceDueDate (when it's due). For a standardized open-bill amount and total debt that mean the same across connectors, use openfinance_list_credit_card_bills (open_bill + total_pending_debt, derived from PENDING transactions); closed bills come from that same tool's results. A CREDIT row may carry creditData.usedAmount (how much of THIS card's limit the bank reports as consumed) and a balance_notice. balance_notice means balance came back 0,00 while the bank's own payload indicates an outstanding amount — some issuers never fill the card's consolidated balance field. When it is present, do NOT tell the user the card has nothing to pay: read the amount from openfinance_list_credit_card_bills instead. bankData.closingBalance and automaticallyInvestedBalance are provider-reported extras that can LAG right after a connection is first created: the bank may publish the connection as UPDATED before those derived fields converge, so they can briefly carry a stale/phantom value that a force sync (openfinance_force_sync) reconciles. The account's own balance is authoritative — treat those two as hints until they agree with it. May include a provider_incident block when the Open Finance provider has an OPEN incident affecting a bank in this response: balances and credit limits may be unreliable (incomplete or wrong, e.g. a credit limit near 1,00) even with the connection UPDATED, until the provider recovers. Do not present those values as real. May include an identity_notice when the SAME account (same number) arrives via two connections stamped with DIFFERENT owner/taxNumber: in Open Finance those fields reflect each connection's CONSENT HOLDER (e.g. a joint account consented by both holders), so dedupe by account number before summing balances and do not attribute ownership by owner/taxNumber for those accounts.

Bulk support: accepts item_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemNo
typeNo
item_idNo
item_idsNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only and idempotent, but the description goes far beyond that by explaining connector-dependent balance meanings, balance_notice, stale bankData fields, provider_incident unreliable data, and identity_notice duplicates. These are precisely the behavioral caveats an agent needs to avoid misinforming users. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is long but front-loaded with the core return value and bank/brand distinction before diving into caveats. Every major paragraph covers a distinct, decision-relevant edge case, though a little trimming could make the critical flow from normal usage to cautionary notes even clearer.

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 there is no output schema, the description does an excellent job of covering response fields, root vs. aggregate shapes, edge cases, and alternative-tool routing. It also warns against common misinterpretations such as treating CREDIT balance as the current bill or presenting stale provider-reported values as real. This is as complete as an agent needs to invoke the tool 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 0%, so the description carries the full burden. It explains `item` omission vs. presence and the bulk `item_ids` behavior very well. However, the singular `item_id` parameter is not explicitly differentiated from `item`, and `type` is only implicitly covered through the BANK/CREDIT discussion rather than as a filter parameter.

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 clearly that it returns bank and credit accounts with their balances, types, and associated banking metadata. It also distinguishes itself from sibling tools by naming openfinance_list_credit_card_bills and explaining how it differs from that tool. The description makes the tool's scope immediately actionable.

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

Usage Guidelines5/5

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

Provides explicit when-to-use guidance: omit `item` to list all banks, pass `item` to target a single bank, and use item_ids for bulk execution. It also tells the agent when NOT to use this tool's CREDIT balance and instead call openfinance_list_credit_card_bills for standardized bill data. This is exceptional routing guidance.

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

openfinance_list_categoriesA
Read-onlyIdempotent
Inspect

Returns Pluggy's transaction category taxonomy (GET /categories), cached for the adapter session. Each entry has id (the categoryId used by openfinance_update_transaction_category), description (English), descriptionTranslated (Portuguese — prefer this for pt-BR users), parentId and parentDescription (the tree parent). Single aggregated response — no batch ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds valuable behavioral traits: caching for the adapter session, the exact response fields including `descriptionTranslated` with a language preference, and the lack of batch ids. This exceeds annotation coverage, so a high score is warranted.

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 three sentences, front-loaded with the main purpose, then detailing entry fields, and ending with a note about the response format. No redundant or vague language; every sentence contributes.

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 no output schema present, the description compensates by fully disclosing the response structure (each entry's fields), the caching behavior, and the cross-link to the update tool. For a low-complexity read-only tool with no parameters, this is complete.

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 the input schema is empty. With no parameters to explain, the description appropriately omits parameter details, and the baseline for zero-parameter tools is 4.

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 the specific verb 'Returns' and identifies the exact resource: Pluggy's transaction category taxonomy, with the endpoint GET /categories. It distinguishes itself from sibling tools by detailing the field structure and linking to openfinance_update_transaction_category, making its unique purpose clear.

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

Usage Guidelines4/5

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

The description provides clear context: it is cached for the adapter session, implying no real-time data, and it explicitly references openfinance_update_transaction_category for which the returned `id` serves as categoryId. However, it does not explicitly state 'use this when...' or mention when not to use, so it lacks explicit exclusions.

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

openfinance_list_connectionsA
Read-onlyIdempotent
Inspect

Returns the saved bank connections for this install: connector_id, item_id, bank name, a per-connection reconnect_url, and an add_connection_url to link additional banks via the Open Finance widget. The reconnect_url reopens the widget in UPDATE mode for that EXISTING connection (user re-enters credentials / MFA token and the data refreshes in place) — use it when a connection needs re-authentication (MFA connectors, LOGIN_ERROR, stale non-Open-Finance data). It does NOT consume a connection slot and does NOT require disconnecting first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare this as a safe read (readOnlyHint=true, destructiveHint=false). The description adds valuable behavioral context beyond annotations: the widget opens in UPDATE mode, data refreshes in place, and reconnect does not consume a slot. No contradictions with annotations.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the primary function, followed by concise yet informative details about the URLs. Every sentence earns its place with no fluff 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?

Despite having no output schema, the description sufficiently explains the return fields and the conditions for using the included URLs. It covers the tool's purpose, usage, and edge cases, making it fully adequate for an agent to select and invoke 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?

The tool has zero parameters, so the baseline is 4. The description doesn't need to explain parameter semantics; instead it clarifies the return payload, which is more relevant. No parameter documentation is required.

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

Purpose5/5

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

The description clearly states the tool returns saved bank connections with specific fields (connector_id, item_id, bank name, reconnect_url, add_connection_url), making it distinct from sibling tools that handle accounts, transactions, or disconnection. The verb 'Returns' is specific and the resource is well-defined.

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?

The description explicitly explains when to use the reconnect_url (re-authentication for MFA connectors, LOGIN_ERROR, stale non-Open-Finance data) and what add_connection_url is for, providing clear context and distinguishing between use cases. It also advises that reconnect does not consume a connection slot or require disconnecting first.

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

openfinance_list_credit_card_billsA
Read-onlyIdempotent
Inspect

Returns CLOSED credit card bills for a CREDIT-type account: dueDate, totalAmount, minimumPaymentAmount, allowsInstallments, plus payments[] (id, paymentDate, amount, valueType, paymentMode), payments_count, payments_total, finance charges aggregates, and a derived payment_status per bill. IMPORTANT — Brazilian Open Finance semantics: Pluggy does NOT return a paid/status field. The payment goes into the payments[] of the bill whose CYCLE contains the paymentDate (closing ≈ dueDate − 7d): pre-payment before close stays on the bill being paid; payment between close and due, or after due, lands on the NEXT bill. So payments[] on a bill commonly carries the previous bill's payment, NOT the current one's — do NOT assume this bill was paid just because payments[] is non-empty. Use the derived payment_status (PAID | OPEN | PAST_DUE_UNCONFIRMED | PAST_DUE_UNPAID): a bill is PAID when its OWN payments[] (early pre-payment) or ANY newer bill in the payload contains a payment with amount ≈ this bill's totalAmount (±R$0.50). The MOST RECENT bill that's past-due, with no own pre-payment match, cannot be confirmed via cross-bill (the next cycle hasn't closed yet) — it returns PAST_DUE_UNCONFIRMED. NEVER call such a bill 'vencida' categorically; flag that the payment may have been made between close and due and not yet reflected upstream. The full payment_status_legend is returned alongside the results. OPEN BILL & TOTAL DEBT (standardized, derived — OPT-IN): pass include_open_bill:true to ALSO get open_bill (the current not-yet-closed bill, próxima a vencer) and total_pending_debt (saldo devedor total = all pending installments), BOTH derived from PENDING transactions so they mean the same thing across connectors — use these instead of the CREDIT account's balance, whose meaning VARIES by connector (some report the open-bill partial, others the full installment debt). open_bill = { available, method (cycle_dates = real close/due dates | calendar_month_fallback = estimated, confidence:'low'), close_date, due_date, total_amount (net charges − credits), transaction_count }; plus a future_bills[] breakdown per month — LOW-confidence forward projections of PENDING installments (confidence:'low', basis), NOT authoritative bills (for closed months trust the results totalAmount). CONNECTOR ASYMMETRY: where the bank does NOT expose the open bill before closing (only closed bills, no reliable cycle dates), open_bill.available is false with a reason (connector_exposes_no_pending or open_bill_not_published) — that bill isn't retrievable by any endpoint until it closes (upstream limit of the institution's Open Finance feed, not our filter); check the bank app for the current open bill. When per-transaction billId grouping does not reconcile with the bills' totals, a bill_grouping_reliability warning is attached (trust totalAmount, do not sum by billId). Default false (the projection runs an extra accounts+transactions scan, so it's opt-in). The response opens with an account echo block ({ account_id, bank, name, number, type, item_id }) identifying WHICH card/bank these bills belong to. When more than one bank is connected, ALWAYS cross-check the echo against the card you intended to query and name the bank when presenting results — never attribute one bank's bills to another. This tool's results are bill-level summaries — NOT individual transactions, and each bill's totalAmount (from the bank) is the AUTHORITATIVE amount. To see itemized purchases/charges, use openfinance_list_transactions with the CREDIT account_id — but note creditCardMetadata.billId is a per-connector hint that can be sparse/inconsistent (e.g. Nubank), so do NOT reconstruct a bill total by summing transactions by billId. Returns a warning instead of failing if the CREDIT_CARDS product is not enabled.

Bulk support: accepts account_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
account_idYes
account_idsNo
include_open_billNo

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses the absence of a paid/status field, explains the non-obvious payment cycle semantics, introduces the derived payment_status and PAST_DUE_UNCONFIRMED case, and covers connector asymmetry, opt-in open_bill, and reliability warnings. This is extensive context beyond what annotations provide.

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

Conciseness4/5

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

The description is long but information-dense, with clear paragraph breaks and a front-loaded core purpose. Some redundancy exists but nearly every sentence carries operational importance, though the length may be slightly overwhelming.

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 no output schema and high complexity, the description defines the response structure, derived fields, payment_status legend, account echo, warnings, and failure behavior. It is sufficiently complete for an agent to invoke correctly and interpret results.

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 0% schema description coverage, the description compensates by explaining include_open_bill's default/meaning, bulk account_ids support, and the required account_id. However, page and page_size are not described, leaving pagination semantics assumed.

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 'Returns CLOSED credit card bills for a CREDIT-type account', immediately specifying the verb, resource, and scope. It enumerates the returned fields and later clarifies these are bill-level summaries, not transactions, which distinguishes it from transaction-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 Guidelines5/5

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

The description explicitly directs users to openfinance_list_transactions for itemized charges and warns against using the CREDIT balance for total debt, recommending derived open_bill/total_pending_debt instead. It also notes when the tool returns a warning instead of failing, providing clear operational guidance.

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

openfinance_list_investmentsA
Read-onlyIdempotent
Inspect

Returns the investment portfolio for a connection (broker or bank with INVESTMENTS product enabled): FIIs, stocks, ETFs, fixed income (CDB/LCI/LCA/Tesouro), mutual funds, retirement (previdência) and COE. Each row carries balance, amount, amountOriginal, amountProfit, lastMonthRate / annualRate / lastTwelveMonthsRate (when available), dueDate, issuer, ISIN, etc. Returns { total:0, results:[], warning } instead of throwing when INVESTMENTS isn't enabled (403) or other upstream errors. DATA INTEGRITY: when MULTIPLE positions come back as TOTAL_WITHDRAWAL with balance/quantity 0 at once (mass zeroing), the tool cross-checks each position's own transaction history upstream; if the zeroing is contradicted (BUY with no sale/redemption/transfer) the response carries data_integrity_warning and the affected rows are flagged integrity:'suspect_zeroed' — treat those balances as UNAVAILABLE (likely a temporary connector failure publishing zeros), never as real R$0, and do NOT sum them into the portfolio.

Bulk support: accepts item_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemNo
pageNo
typeNo
item_idNo
item_idsNo
page_sizeNo

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already indicate read-only/idempotent, but the description adds substantial behavior: it returns { total:0, results:[], warning } instead of throwing, performs cross-checks for mass zeroing, and flags suspect_zeroed rows with instructions to treat them as unavailable. This goes well beyond the annotations and provides crucial guidance.

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

Conciseness4/5

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

The description is well-structured: a concise opening statement of purpose, a detailed data-integrity section, and a note on bulk support. It is longer than average but the complexity of the tool warrants the detail; no fluff.

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 complex tool with no output schema, the description covers return fields, error handling, and data-integrity warnings comprehensively. It omits pagination/filter behavior details, but overall it is complete enough for correct use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It only mentions item_ids for bulk execution; other parameters (item, page, type, item_id, page_size) are left undefined or only inferable from context, which is insufficient.

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

Purpose5/5

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

The description clearly states the tool returns the investment portfolio for a connection, enumerating asset types (FIIs, stocks, ETFs, etc.) and fields. This distinguishes it from sibling tools like openfinance_list_investment_transactions and openfinance_get_account_balance.

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

Usage Guidelines4/5

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

The description says it applies to connections with the INVESTMENTS product enabled and explains the fallback when that product isn't available. It does not explicitly name alternatives or state 'use this instead of X', but the scope is clear enough for most use cases.

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

openfinance_list_investment_transactionsA
Read-onlyIdempotent
Inspect

Returns the movement history for a specific investment position: BUY / SELL / TAX / INTEREST / AMORTIZATION / TRANSFER. Each row carries quantity, value, amount, netAmount, agreedRate (treasury), brokerageNumber, and itemized expenses (brokerageFee, incomeTax, settlementFee, custodyFee, stockExchangeFee, etc.). Use after openfinance_list_investments to get the investment_id.

Bulk support: accepts investment_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
investment_idYes
investment_idsNo

TDQS

A4.4/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. The description adds behavioral context beyond annotations by noting bulk execution support ('accepts investment_ids for batched execution') and describing the return fields (agreedRate, brokerageNumber, itemized expenses). No contradiction with annotations.

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

Conciseness5/5

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

The description is two short paragraphs. The first sentence states purpose and scope, followed by return detail and prerequisite usage. Every sentence adds value, with no redundancy or fluff.

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

Completeness4/5

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

Given there is no output schema, the description compensates by listing key return fields and transaction types. It also covers the main usage flow and bulk option. It lacks details like pagination defaults or error scenarios, but for a read-only list tool, this is reasonably complete.

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 has 0% description coverage, so the description must compensate. It does so by explaining that investment_id comes from openfinance_list_investments and that investment_ids enables bulk execution. It doesn't elaborate on page/page_size, but these are standard pagination parameters with self-explanatory names.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Returns the movement history for a specific investment position' and enumerates transaction types (BUY/SELL/TAX/etc.). It distinguishes from siblings by emphasizing the investment-specific scope and listing return fields, making it unambiguous.

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 instructs to 'Use after openfinance_list_investments to get the investment_id', providing a clear prerequisite and chaining context. It does not explicitly contrast with alternative tools like openfinance_list_transactions, but the investment-specific scope is evident, and bulk support is mentioned.

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

openfinance_list_loansA
Read-onlyIdempotent
Inspect

Lists loan contracts per bank connection (GET /loans). Pass items as an array of connection selectors (item_id uuid, connector_id, or connector_name) — one entry per connection to fetch; multiple connections are queried sequentially with rate-limit spacing. OMIT items to list loans across ALL linked banks. Returns { results, errors } per connection.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNo

TDQS

A4.8/5.0
Behavior5/5

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

Adds significant behavioral context beyond annotations: multiple connections are queried sequentially with rate-limit spacing, and the return structure is `{ results, errors }` per connection. This informs the agent about performance and error handling.

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 first states the core function, the second explains parameter usage, and the third covers the alternative mode. No filler or redundancy.

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

Completeness5/5

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

With only one optional parameter and no output schema, the description covers all needed aspects: both usage modes, return shape, and per-connection behavior. The agent can invoke and interpret results correctly without additional information.

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

Parameters5/5

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

The input schema only shows `items` as a string array with no description. The description fully compensates by explaining valid selector types (item_id uuid, connector_id, or connector_name), the one-entry-per-connection rule, and the omitting behavior, providing complete semantic 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?

Clearly states 'Lists loan contracts per bank connection' with a specific verb and resource. The description also distinguishes between listing for specific connections and all banks, making the scope explicit and differentiating from sibling tools like openfinance_get_loan_detail.

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

Usage Guidelines4/5

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

Provides clear usage context: pass `items` for specific connections or omit for all linked banks. However, it does not explicitly mention alternative tools or when not to use this tool, so it lacks explicit exclusions.

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

openfinance_list_transactionsA
Read-onlyIdempotent
Inspect

Returns transactions for a bank account (BANK or CREDIT type). For CREDIT (credit card) accounts, this is the ONLY way to get itemized transactions (purchases, subscriptions, etc.). Each credit card transaction MAY carry creditCardMetadata.billId pointing at a bill from openfinance_list_credit_card_bills, but this is a per-connector HINT, not authoritative: some connectors (e.g. Nubank) populate it sparsely (many transactions and installments arrive with no billId) or inconsistently (the same payment tagged to more than one bill). Do NOT reconstruct a bill's total by summing transactions by billId — the bill's own totalAmount from openfinance_list_credit_card_bills is the source of truth. CREDIT PENDING vs POSTED varies by connector: where the bank exposes future-dated status:'PENDING' installments, those represent the OPEN bill plus future bills (future months); where it does NOT, only the last closed bill's POSTED items appear until ~closing. Same query, different coverage per bank (upstream). To get a standardized open-bill total / total debt regardless, use openfinance_list_credit_card_bills (open_bill / total_pending_debt). SCHEDULED (future-dated) ROWS: results are ordered by date DESCENDING, and on a card with long installment plans the TOP of the list is the FUTURE — rows dated months ahead are scheduled installments of purchases already made, not new purchases. Every such row is flagged scheduled:true, the response carries scheduled_count and a notice naming the most recent row that actually happened. NEVER read the first row as 'the latest purchase' without checking scheduled. To list only what already happened, pass to = today. Supports from/to date filters (ISO YYYY-MM-DD) and an optional keyword filter via search_queries (case- and accent-insensitive substring match against description and merchant name, OR semantics across multiple terms). When search_queries is set the tool aggregates up to 5000 transactions within from/to before filtering — narrow from/to if truncated:true is returned. PAGINATION: OMIT both page and page_size (the default) to get ALL transactions in the from/to range in one call — the tool auto-paginates the upstream and returns them under a single logical page (page:1, totalPages:1), up to a 5000 ceiling (truncated:true + warning if exceeded, then narrow from/to). Passing page and/or page_size switches to MANUAL pagination: you get one page (page_size items, default 50, max 500; page defaults to 1) with the REAL total/totalPages, so page_size:5 alone returns the first 5 with totalPages telling you how many pages remain. On upstream errors, returns { total:0, results:[], warning, error } instead of throwing. detail controls how much per-row data you get (default 'compact' = slim, cheap). Use detail:'rich' to enrich each row (when the bank connector provides it) with merchantInfo (estabelecimento: businessName/razão social, cnpj, cnae, category — useful for auto-classifying spending) and extra creditCardMetadata fields: billId (a per-connector HINT toward the transaction's bill — sparse/inconsistent on some connectors like Nubank, so do NOT sum by it to get a bill total; use the bill's totalAmount instead), billForecastDate, cardNumber, purchaseDate, payeeMCC, feeType/feeTypeAdditionalInfo, otherCreditsType/otherCreditsAdditionalInfo. billForecastDate ("YYYY-MM") is the counterpart of billId for the OPEN cycle: PENDING transactions have NO billId (the bank only mints it once the bill closes), so this is the only field telling you which bill a pending purchase will land in — its month OFFSET is per-connector (some banks month+1, others month+0), so surface it as-is and do not derive a due date from it. cardNumber (last 4 digits) separates the primary cardholder's charges from an additional card's when several cards share one account_id. Use detail:'raw' to get the FULL untouched Pluggy transaction object (everything Pluggy returns, un-normalized — heaviest, for when you need a field we don't project). 'rich'/'raw' add tokens per row and coverage varies by bank/Open Finance, so keep the default for normal listings. For the card's statement closing/due dates use openfinance_list_accounts (creditData.balanceCloseDate / balanceDueDate). The response opens with an account echo block ({ account_id, bank, name, number, type, item_id }) identifying WHICH account/bank these transactions belong to. When more than one bank is connected, ALWAYS cross-check the echo against the account you intended to query and name the bank when presenting results — never attribute one bank's transactions to another. If total is 0 for a CREDIT account, check the connection health via openfinance_get_item_status — statusDetail.creditCards.isUpdated: false means the credit card sync failed and a force sync (openfinance_force_sync) or reconnection may be needed. May include a provider_incident block when the Open Finance provider has an OPEN incident affecting a connected bank: transactions may come back incomplete or wrong until the provider recovers, and reconnecting does not fix it.

Bulk support: accepts account_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
pageNo
detailNo
page_sizeNo
account_idYes
account_idsNo
search_queriesNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint/idempotentHint and non-destructive behavior, so the description carries the real burden. It discloses many non-obvious behaviors: auto-pagination, 5000-row ceiling, descending future-dated scheduled rows, per-connector PENDING/POSTED variation, sparse billId hints, error return shape, account echo block, provider_incident block, and detail mode response differences. No contradiction with annotations exists.

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

Conciseness4/5

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

The description is very organized with clear paragraphs on pending, scheduled, rows, pagination, detail, and account echo. However, it is long and slightly repetitive: the 5000 truncation guidance appears twice, and the billId minimization is repeated in both the credit-card section and the rich-detail section. The length is largely justified by a high-complexity tool, but has room for refinement.

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?

There is no output schema, so the description must assume an enormous explanatory burden. It covers request filters, pagination and truncation, row-level detail modes, credit card metadata semantics, zero-result diagnostics, multi-bank attribution, provider incidents, and related tool usage. For a tool this complex, the documentation is effectively complete.

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

Parameters5/5

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

Schema description coverage is 0%, so all parameter meaning must come from the description. It thoroughly explains from/to format, search_queries term and OR-substring semantics, page/page_size manual mode vs auto-pagination behavior, detail enum values, and the controlling requirement to cross-check the account echo. Even account_ids is reasonably covered by the account ownership guidance.

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 precise verb-resource statement: 'Returns transactions for a bank account (BANK or CREDIT type)' and explicitly distinguishes this tool as the ONLY way to get itemized credit card transactions. It also names sibling tools like openfinance_list_credit_card_bills and openfinance_list_accounts to clarify scope boundaries.

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?

The text gives explicit when-to-use vs alternatives guidance: use this for itemized transactions, but openfinance_list_credit_card_bills for standardized open-bill totals; use openfinance_list_accounts for closing/due dates; check openfinance_get_item_status when a CREDIT account returns 0. It also explains when to pass `to=today`, when to use manual pagination, and how to react to `truncated:true`.

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

openfinance_list_transactions_by_itemA
Read-onlyIdempotent
Inspect

Consolidated cash-flow analysis for a whole bank CONNECTION over a period, in ONE call. Resolves the connection's accounts internally and fans out their transactions, so you do NOT need to call openfinance_list_accounts first nor carry account_id uuids between calls. Pass item (connector_id, connector_name or item_id) to target one bank, or OMIT it to analyze ALL linked banks at once. from/to are ISO dates (YYYY-MM-DD). Default granularity:'monthly' returns a COMPACT summary (no raw rows): total entradas, saídas, saldo_liquido, monthly evolution (por_mes), and top_despesas/top_recebimentos (largest N each), plus a per-account breakdown (by_account). Use this for 'análise anual/mensal', 'fluxo de caixa', 'entradas e saídas', 'maiores gastos/recebimentos'. Set granularity:'raw' to ALSO get every consolidated transaction (heavier — only when itemized rows are needed); combine with detail:'rich' to enrich those rows with merchantInfo (cnpj/cnae/businessName/category) + extra creditCardMetadata (billId, purchaseDate, fees), or detail:'raw' for the full untouched Pluggy object per row, when the connector provides them. type filters BANK or CREDIT accounts. On a connection with many transactions the scan caps at 5000/account and flags truncated:true. May include a provider_incident block when the Open Finance provider has an OPEN incident affecting a connected bank: the totals/rows may be incomplete or wrong until the provider recovers, and reconnecting does not fix it.

Bulk support: accepts item_ids for batched execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
itemNo
typeNo
top_nNo
detailNo
item_idNo
item_idsNo
granularityNo

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint=false), the description discloses critical behavioral traits: the 5000/account scan cap with truncated flag, the provider_incident block and its implications on data completeness, and the difference between compact monthly summary and raw granularity. It also explains the default behavior and enrichment options.

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?

Although long, every sentence earns its place by adding operational detail, defaults, caveats, and usage examples. The text is front-loaded with the main purpose, then logically flows through parameters, granularity, and edge cases. It avoids repetition and is structured for quick scanning.

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 no output schema, the description fully explains return values: total entradas/saídas/saldo_liquido, monthly evolution (`por_mes`), top receipts/expenses, per-account breakdown, optional raw rows, and the `truncated` and `provider_incident` flags. It also covers connection-level behavior and bulk execution, making the tool's full behavior understandable.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden for parameter meaning. It explains `item` as connector_id/name/item_id, `from`/`to` as ISO dates, `granularity` and `detail` enums with concrete values, `type` filtering, and bulk support via `item_ids`. It also implies `top_n` via 'largest N each' and covers all key parameters.

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: 'Consolidated cash-flow analysis for a whole bank CONNECTION over a period, in ONE call.' It clearly distinguishes itself from siblings by noting you do not need to call openfinance_list_accounts first and that it resolves accounts internally, which differentiates it from openfinance_list_transactions and other item-specific tools.

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

Usage Guidelines5/5

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

Explicit guidance is provided: use for 'análise anual/mensal', 'fluxo de caixa', 'entradas e saídas', 'maiores gastos/recebimentos', and it tells when to use the raw granularity ('only when itemized rows are needed'). It also contrasts with the alternative of calling openfinance_list_accounts first, making the decision clear.

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

openfinance_provider_statusA
Read-onlyIdempotent
Inspect

Checks the LIVE operational status of the Open Finance provider (its public status page) — this is the PROVIDER's health, separate from your own connection's openfinance_get_item_status. Use it whenever data looks incomplete or stale even though a connection shows UPDATED (accounts/transactions/balances missing, a bank not returning everything): it reveals an upstream outage or a known incident on a specific bank/connector, so you can tell a provider-side problem apart from a connection that just needs reconnecting. Returns the global indicator (none/minor/major/critical), degraded components, open incidents, and — when you have banks connected — flags the incidents that affect YOUR connected banks in your_banks_affected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds context about the live public status page and the specific outputs (global indicator, incidents, your_banks_affected), which is useful beyond annotations. No contradiction.

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

Conciseness5/5

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

Every sentence earns its place: it states the action, distinguishes from a sibling, explains when to use it, and lists output fields. The description is dense but not bloated, and it is front-loaded with the primary purpose.

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 no output schema, the description fully explains what is returned (global indicator, degraded components, incidents, your_banks_affected) and provides enough context for an agent to understand the operational meaning. It is complete for a simple read-only tool.

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

Parameters4/5

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

The tool has zero parameters, so the description correctly implies a no-input read operation. The schema provides 100% coverage trivially, and the description adds no parameter info because none is needed.

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

Purpose5/5

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

The description clearly states the tool 'Checks the LIVE operational status of the Open Finance provider' and explicitly differentiates it from the sibling tool `openfinance_get_item_status`, making the resource and scope unmistakable.

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 gives explicit when-to-use guidance ('Use it whenever data looks incomplete or stale even though a connection shows UPDATED') and names the alternative (openfinance_get_item_status), helping the agent choose correctly between provider-side and connection-side diagnostics.

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

openfinance_search_bank_connectorsA
Read-onlyIdempotent
Inspect

Searches the available bank connectors by name (pass keywords[], e.g. ['nubank','btg']) and returns, per match: the connector id, whether it's Open Finance or API (access), PF/PJ (audience), the user's already-linked connections (and accounts when include_accounts=true), and a ready connect_url with the bank pre-selected. Some non-Open-Finance credential connectors carry a caveat warning that they don't auto-update (needs periodic manual reconnection) — surface it so the user can prefer the institution's Open Finance connector for automation. Honors the user's plan (a PF plan hides PJ banks; a PJ plan covers BOTH — PF and PJ banks connect and count under the same plan). Call this BEFORE connecting to hand the user a one-click link to the right bank. keywords[] is REQUIRED — without it returns a hint (never dumps the whole catalog).

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordsNo
include_accountsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent, and the description adds substantial behavioral context: caveat warnings for non-Open-Finance connectors, plan-based filtering (PF vs PJ), the requirement for keywords with a hint fallback, and that it never returns the full catalog. These go beyond what annotations provide and are critical for correct use.

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

Conciseness4/5

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

The description is a single dense paragraph but every sentence carries unique information. It is front-loaded with the core purpose and return details, followed by caveats and usage instructions. Slightly long but not wasteful; the structure could be improved with breaks, yet each 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?

For a two-parameter tool with no output schema, the description covers all essential aspects: what it returns (id, access, audience, connections, connect_url), edge cases (caveat, plan restrictions, missing keywords), and how to invoke it. It is self-contained and leaves no major gaps for an agent to determine correct usage.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully explains both parameters: keywords[] with an example ('nubank','btg') and requiredness, and include_accounts with the effect 'returns accounts when true'. It also clarifies the keyword requirement's behavioral consequence (returns a hint if absent), adding meaning 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?

The description clearly states the tool's function: 'Searches the available bank connectors by name' and lists specific return fields (connector id, access, audience, connections, connect_url). It distinguishes from sibling tools like 'connect' by positioning it as a pre-connect search step, and from 'marketplace' by explicitly noting it never dumps the whole catalog.

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

Usage Guidelines4/5

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

Explicitly directs when to use the tool: 'Call this BEFORE connecting to hand the user a one-click link to the right bank.' It also provides contextual guidance on caveats and plan behavior. It does not explicitly name alternative tools for other scenarios, but the 'before connecting' instruction and search-filtered nature give strong usage context.

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

openfinance_update_transaction_categoryAInspect

Corrects the category of one or more transactions (PATCH /transactions/:id). Pass items as an array of { transaction_id, category_id } — transaction_id comes from openfinance_list_transactions, category_id from openfinance_list_categories. This overrides Pluggy's automatic categorization AND teaches Pluggy: recategorizing a transaction automatically creates a Category Rule for this client (case-insensitive exact match on the transaction's data), so FUTURE similar transactions are categorized the same way — use this to fix miscategorized transactions and improve categorization accuracy going forward. Batch shape: returns { updated, results: [{ transaction_id, category, categoryId }], errors: [{ id, status, message }] } — per-item errors do not fail the whole batch.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false), the description discloses a non-obvious side effect: recategorizing creates a Category Rule that affects future transactions. It also explains batch error semantics ('per-item errors do not fail the whole batch') and the override of Pluggy's automatic categorization.

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

Conciseness4/5

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

The description is dense but every sentence carries value: endpoint, parameter structure, side effects, return shape. It is front-loaded with the core action. Slightly long, but justified by the multiplicity of important details.

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 no output schema and sparse annotations, the description covers all necessary context: purpose, parameters, side effects, return shape with nested fields, and error handling. It is fully self-contained for an agent to invoke correctly.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by explaining the `items` array shape, the exact fields ({ transaction_id, category_id }), and where each ID comes from. This adds meaning beyond the raw 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+resource: 'Corrects the category of one or more transactions (PATCH /transactions/:id)', immediately distinguishing it from sibling list/read tools. It states the operation clearly and unambiguously.

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 tells the agent when to use it ('to fix miscategorized transactions and improve categorization accuracy going forward') and references sibling tools for required IDs (openfinance_list_transactions, openfinance_list_categories). It doesn't explicitly mention when not to use it, but the context is clear.

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

report_bugA
Idempotent
Inspect

Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.

ParametersJSON Schema
NameRequiredDescriptionDefault
contextNo
messageYes
conversationNo[]

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide basic safety hints (idempotent, non-destructive), and the description adds useful behavioral context by instructing to include the conversation array for reproduction. It does not contradict the annotations. The description could disclose what happens after submission (e.g., ticket creation), but with annotations covering the safety profile, this is acceptable.

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 no fluff. The most important instruction (include conversation) is front-loaded and easy to parse. Every word 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 simple 3-parameter tool with no output schema, the description adequately covers the tool's purpose and the main usage nuance (including conversation). It does not explain the 'context' parameter, but the overall complexity is low, so the description is reasonably complete. Slightly more detail on the expected response would improve it.

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 0%, so the description carries the burden. It explains the 'conversation' parameter's purpose but does not clarify the 'context' parameter or provide details about the 'message' parameter beyond its role in reporting. This partially compensates for the missing schema descriptions but leaves gaps.

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 uses the verb 'Report' with explicit targets (bug, missing feature, feedback). It distinguishes itself from all sibling tools, which focus on OpenFinance data operations. 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 implies when to use this tool (whenever a bug, feature request, or feedback is needed) and gives a specific instruction to include the conversation array. It does not explicitly mention alternatives or exclusions, but no competing sibling tool exists for reporting, so the context is sufficiently clear.

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

show_versionA
Read-onlyIdempotent
Inspect

Show the current MCP platform and adapter versions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context beyond the word 'current', but there are no side effects or complex behaviors to disclose for a zero-parameter read-only version tool.

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

Conciseness5/5

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

The description is a single, concise sentence that directly states the tool's function without any filler or redundancy. It is front-loaded and easily scannable.

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, read-only version query tool, this description is fully complete. It clearly communicates what versions are shown ('MCP platform and adapter'), and there is no output schema to elaborate on. No additional context seems necessary given the trivial nature of the tool.

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

Parameters4/5

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

The tool has zero parameters, so the schema fully covers parameter semantics (vacuously). The description adds no parameter-specific information, but none is needed. Baseline 4 applies per the rubric for 0-parameter tools.

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 'Show the current MCP platform and adapter versions' clearly specifies a verb ('Show') and a concrete resource ('current MCP platform and adapter versions'). However, it does not explicitly distinguish this tool from sibling tools like 'toolkit_info', which might also provide version-related information.

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 tool is self-explanatory for checking versions, so usage is implied. However, there is no explicit statement about when to use this versus alternatives, no exclusions, and no mention of prerequisites or context like requiring authentication.

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

toolkit_infoA
Read-onlyIdempotent
Inspect

Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to repeat safety traits. It adds value by enumerating exactly what the returned state includes (installed MCPs, connection status, accounts, catalog tool counts), which is useful beyond 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.

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the action ('Returns') and packs all key return elements into a tidy list. No wasted words.

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 tool with no parameters and no output schema, this description fully explains what the tool returns and covers the essential aspects of toolkit state. The listed items are comprehensive and leave no major ambiguity.

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 the schema has no properties. Per the rubric, a zero-parameter tool gets a baseline of 4, and the description correctly avoids inventing 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 that the tool returns the current toolkit state, listing specific components (installed MCPs, connection status, accounts, catalog tool counts). This is a specific verb-resource pairing that distinguishes it from sibling tools focused on finance operations.

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 makes it clear this tool is for retrieving toolkit state, which provides clear context for when to use it. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

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

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Brazilian banks (Itaú, Bradesco, Nubank, etc.) to AI agents, enabling natural language queries about expenses, statements, investments, and credit cards via regulated Open Finance.
    19
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects your Rico bank account to AI assistants via Open Finance Brasil, allowing natural language queries for balances, statements, credit card bills, and investments in read-only mode.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connect your Clear bank account to AI assistants like Claude and ChatGPT via Open Finance Brasil to query balances, statements, credit card bills, and investments in natural language (read-only).
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects your Ágora bank account via Open Finance Brasil to AI agents like Claude and ChatGPT, enabling natural language queries about balances, statements, credit card bills, and investments in read-only mode.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.1/5.0
Disambiguation4/5

Each Open Finance resource has a clearly named list/get pair, and connection status vs provider status vs force sync are distinct. The main ambiguity is between list_accounts (which already carries balances) and get_account_balance, and between list_transactions and list_transactions_by_item, which requires reading the descriptions carefully.

Naming Consistency4/5

The openfinance_* tools follow a consistent verb_noun pattern (list_*, get_*, update_*, force_sync, search_*). Exceptions like marketplace, toolkit_info, and openfinance_provider_status break the pattern slightly, but the two logical groups are predictable internally.

Tool Count3/5

At 25 tools this is on the heavy end of the scale. Most tools have a real purpose, but several list/get pairs and the multi-purpose marketplace mega-tool could be consolidated without losing functionality, making the overall surface feel larger than strictly necessary.

Completeness4/5

The Open Finance surface is impressively broad: connections, accounts, balances, transactions, credit-card bills, loans, investments, categorization, sync, provider health, and connector search are all covered. Minor gaps like a single-transaction getter or a consolidated statement export force agents to assemble data with extra calls, but no critical workflow is blocked.