agentcard
Server Details
Prepaid virtual cards for AI agents: one-time cards, spend caps, human approvals.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.6/5 across 50 of 50 tools scored. Lowest: 2.9/5.
Most tools have clearly distinct purposes, especially in areas like card management and shopping. However, the KYC flow has multiple overlapping tools (start_kyc, get_kyc_status, check_kyc_document, submit_kyc_document, submit_kyc_fields) that could confuse an agent despite detailed descriptions.
Tool names consistently use snake_case with a verb_noun pattern (e.g., add_funds, create_card, list_cards). A few exceptions like surprise_me and whoami break the pattern but are still intuitive overall.
50 tools is on the high side for a single server, but the broad domain (cards, shopping, KYC, support, settings) partially justifies it. Some tools could be merged (e.g., KYC flow tools) without losing clarity.
The tool surface covers core workflows: CRUD for cards, transactions, KYC, support, shopping, and account management. Minor gaps exist (e.g., no update_card general, no cancel order in shopping), but overall the set is comprehensive for the stated purpose.
Available Tools
51 toolsadd_cardAIdempotentInspect
Add the user's OWN Visa card to Agentcard so purchases charge that card directly — no identity verification (KYC) and no balance funding needed. Two-phase and conversational: the first call returns a secure link the user opens (about a minute: a one-time code from their bank plus a passkey); call add_card again to check whether they finished. Once added, create_card automatically issues against the added card. If the card is not eligible (for example a Chase-branded, business, or non-US card), fall back to create_card, which issues an Agentcard funded from the user's cash balance.
| Name | Required | Description | Default |
|---|---|---|---|
| restart | No | Set true ONLY when the user lost or never received a pending add-card link — starts a fresh link. Never needed on the first call or for normal status checks. | |
| additional | No | Add ANOTHER card while one is already active (multi-card). Default false: with a card already added the tool answers already_attached instead of starting a new enrollment. Unless the user chose a default card (update_settings default_payment), the newest active card becomes the default for new cards; create_card can pick a specific one via connected_card_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| card | No | Display details of the added card (brand, last4). Present on "attached" and "already_attached". |
| reason | No | Why the card cannot be added (e.g. "issuer_excluded", "commercial_card"). Present only when status is "attach_ineligible". |
| status | No | Outcome discriminator: "attach_started" (send attachUrl to the user, then call add_card again to check), "pending" (user has not finished the link yet — check again after they do), "attached" (done; create_card now uses the added card), "already_attached", "attach_ineligible" (this card cannot be added — fall back to create_card), "byoc_unavailable" (adding a card is not available — use create_card), or "user_info_required" (check missingFields: phone/terms are collected via submit_user_info; consent must be recorded by the connecting platform, not in this conversation). |
| message | Yes | Human-readable result or guidance for the next step. |
| attachUrl | No | The secure link the user opens to add their card. Present only when status is "attach_started". |
| expiresAt | No | When the add-card link expires (ISO 8601). Present only when status is "attach_started". |
| missingFields | No | What is missing when status is "user_info_required" (e.g. "termsAccepted", "consent"). |
| connectedCardId | No | The connected-card id. Present on "attach_started", "attached", and "already_attached". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description reveals the tool's non-obvious two-phase behavior, the need for user to open a secure link, and the fact that repeated calls are used for status checks. It also clarifies that created cards will automatically use this added card, providing valuable operational context not available in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently packed with necessary details without redundancy. It front-loads the primary purpose and flows logically through behavior, eligibility, and fallback instructions. Every sentence adds value, making it concise for the complexity involved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the interactive nature of this tool, the description explains the complete flow, fallback conditions, and the relationship with create_card. With an output schema present, the description correctly focuses on behavioral and contextual guidance, providing a complete picture for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with detailed descriptions for both optional parameters (restart and additional). The tool description adds no new parameter-specific information beyond what the schema defines, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool adds the user's own Visa card to Agentcard, distinguishes from siblings by noting no KYC/balance funding needed, and explicitly contrasts with fallback to create_card. It concisely conveys both the action and the outcome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool (adding a personal Visa card) and when to fall back to create_card (ineligible cards). It also explains the two-phase conversational flow and how to use the second call to check status, making usage boundaries clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_fundsAInspect
Generate a secure checkout link the user opens to add cash to their own balance (the money that funds new cards) via Apple Pay or Google Pay, in USD. Calling this tool moves NO money and initiates NO transfer: it only prepares a single-use hosted payment page — the exact equivalent of the user clicking 'Add funds' in the dashboard. The user personally reviews, authorizes, and completes (or abandons) the payment in their own browser with their own payment method; you never see or handle payment credentials. If a one-time phone verification is needed first, this tool automatically sends the user a code and tells you where it went: ask the user for the code, call verify_phone with it, then call add_funds again.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_cents | Yes | Amount to add in cents (e.g. 5000 = $50.00). Typical range: $20.00 to $10,000.00 (2000 to 1000000 cents); the exact range depends on the active funding provider and is returned by the API when the amount is invalid. | |
| payment_method | No | Payment method for the checkout. Defaults to apple_pay. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
| amountUsd | No | Amount of the created checkout in USD. |
| checkoutUrl | No | Single-use payment link to hand the user verbatim (present when a checkout was created). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses that no money moves, the user completes payment in their browser, payment credentials are never seen/handled, and automatic phone verification may occur. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the main action, then clearly explains boundaries, user role, and a conditional workflow. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description need not cover return values. It sufficiently explains purpose, parameter semantics, usage flow, and behavioral traits, including the phone verification contingency. Comprehensive for a checkout-link generation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds meaning: amount is in cents with a typical range ($20–$10,000) and notes that exact range depends on funding provider. It also clarifies the default for payment_method (apple_pay).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate a secure checkout link') and resource ('add cash to user balance'), and distinguishes itself from siblings by clarifying it does not move money or initiate transfers, only prepares a hosted payment page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides context for when to use (to add funds via Apple/Google Pay) and a conditional workflow (phone verification needed → call verify_phone then add_funds). However, it does not explicitly state when not to use this tool, though the contingency covers a common alternative step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_requestAInspect
Resolve a pending approval request (approve or deny) once the USER has decided. Use this after get_card_details or create_card returns a 202 requiring approval, or for a row from list_pending_approvals. For card_details and transaction, approval automatically completes the follow-up action and returns the result. For cross_app actions (asks from another app: close/pause/resume a card, change a limit, view details), approval records the user's consent and the REQUESTING app completes the action from its side when it retries with the approval id.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The original action type from the approval prompt (list_pending_approvals rows carry it as action). | |
| decision | Yes | Whether to approve or deny the request | |
| approval_id | Yes | The approval request ID | |
| resource_id | Yes | Card ID (for card_details and cross_app actions) or approval ID (for transaction) |
Output Schema
| Name | Required | Description |
|---|---|---|
| card | No | The card resource returned by the approved follow-up action, when applicable. |
| action | No | The original action type from the approval prompt: 'card_details' or 'transaction'. |
| status | No | Outcome of the request: 'denied', 'card_details', 'card_created', 'resolved' (cross_app approvals: consent recorded, the requesting app completes the action), 'personal_surface_only' (company-connected session; the user resolves personally), or 'unknown_action'. |
| message | Yes | Human-readable summary of the approval outcome and any follow-up action. |
| decision | No | The decision that was applied: 'approved' or 'denied'. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the two different outcomes: for card_details/transaction, approval completes the action and returns result; for cross_app, it records consent and the requesting app retries. This goes beyond annotations (readOnlyHint=false, destructiveHint=false) and fully discloses the behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, using a few well-structured sentences. Front-loaded with purpose, followed by usage contexts, and ends with specific behavior details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple action types with different outcomes), the description covers all necessary aspects: when to use, how each action type behaves, and parameter hints. The existence of an output schema means return details are covered elsewhere, so the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond the 100% schema coverage: explains that resource_id is card ID for most actions but approval ID for transaction, and that list_pending_approvals rows carry the action field. This enhances understanding of parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves pending approval requests (approve or deny) and specifies the contexts (202 responses, list_pending_approvals). It distinguishes between card_details/transaction and cross_app actions, which differentiates it from sibling tools like close_card or pause_card.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool: after get_card_details or create_card returns a 202, or for rows from list_pending_approvals. It also contrasts the behavior for card_details/transaction (auto-complete) vs cross_app (record consent), providing clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buyADestructiveInspect
Shop and check out, in natural language, across the merchants the user has linked (DoorDash, etc.). Pass the whole ask as request — e.g. "order a caesar salad from Zuni on DoorDash" — and this tool runs the shopping flow for you. It is CONVERSATIONAL: this tool RETURNS a conversation_id; pass that SAME conversation_id back on every follow-up (your reply to a question, "add a coke", "yes, check out") so it continues the SAME order. Omit it (or set new_order=true) only to start a fresh order. It will ask for the delivery address and have you confirm the cart and total. CHECKOUT (which charges a one-time card) happens ONLY after the user explicitly confirms in a later message — relay the confirmation through request ("yes, place the order") on the SAME conversation_id. RELAY REPLIES VERBATIM: when the user answers a question from this tool ("yes", "the 16 oz one", "use my other card"), pass their reply through request as-is on the same conversation_id — do NOT rewrite it into a fresh full order command; a rewritten command reads as a NEW ask and the confirmation never lands. NEVER use new_order (or drop the conversation_id) to recover from an error or a refused checkout — that discards the cart and any pending confirmation. Stay on the same conversation_id and follow the error's instruction instead; new_order is ONLY for the user starting an unrelated order. If it hands out a merchant login link (hosted connect), just reply on the SAME conversation_id once the user finishes (e.g. "done — I logged in") and it verifies the link itself. Logins started here have no pending_id, so the buy_connect / buy_connect_status pair does not apply to them. Call get_instructions FIRST for the current usage guide before your first buy.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | The natural-language ask or follow-up, e.g. "order a caesar salad from Zuni on DoorDash", "deliver to 123 Main St", or "yes, place the order". | |
| new_order | No | Start a fresh shopping conversation instead of continuing the current one. Use when beginning an unrelated order (ignores any conversation_id). | |
| conversation_id | No | The conversation_id returned by a previous buy call. Pass it to continue the SAME order (keeps the cart + confirmation). Omit to start a new order. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Discriminator for the outcome. 'assistant_turn' when the buy loop replied; 'conversation_start_failed' or 'request_failed' on errors. |
| message | Yes | The assistant's conversational turn (it may ask for the delivery address, show the cart + total, confirm, or report a placed order), or an error explanation. |
| messages | No | The same turn split into ordered messages for multi-bubble surfaces (each narration segment, then the final reply/confirmation). `message` is the same content consolidated; clients that show one bubble should use `message` and ignore this. |
| conversation_id | No | The conversation id to thread back as conversation_id on the next buy call to continue the SAME order. Present on a successful assistant turn. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavioral traits beyond annotations: the tool returns a conversation_id that must be reused, checkout 'charges a one-time card' only after explicit user confirmation, replies must be relayed verbatim, and using new_order/timeout 'discards the cart and any pending confirmation.' This is exactly the kind of context an agent needs to avoid dangerous mistakes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every paragraph addresses a distinct critical aspect: conversational flow, checkout confirmation, error recovery, login links, and prerequisite guidance. It is front-loaded with purpose and uses capitalization/emphasis effectively. Dense but justified for a complex, potentially destructive tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity and the presence of an output schema, the description fully covers the flow, prerequisites, alternative tools, safety rules, and error handling. An agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant semantics: request can be a follow-up or full ask with concrete examples, conversation_id must be 'the SAME conversation_id' for continuity, and new_order 'ignores any conversation_id' and is only for unrelated orders. The prose meaningfully clarifies all three parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool 'Shops and checks out, in natural language, across the merchants the user has linked' and 'runs the shopping flow for you.' This clearly distinguishes it from siblings like buy_connect or buy_list_merchants, which handle narrower aspects of the shopping lifecycle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable: 'Call get_instructions FIRST for the current usage guide before your first buy.' It also explains when buy_connect/buy_connect_status do not apply ('Logins started here have no pending_id') and details when new_order is appropriate versus when it must never be used for error recovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_connectAInspect
Connect a merchant for shopping. For merchants that need a real login (e.g. DoorDash) this opens a secure hosted browser session and returns a URL the user opens to log in; after they finish, call buy_connect_status with the pending_id to confirm. Merchants that need no login (e.g. Agentcard Flights) come back ready immediately. Use this instead of buy_link_merchant for hosted-login merchants. This tool pairs only with buy_connect_status and only tracks logins it started itself; a login link handed out by the conversational buy tool has no pending_id and is verified inside that same buy conversation (the user replies there, e.g. "done — I logged in").
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | Yes | merchant slug (e.g. doordash) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Outcome: 'pending' (hosted login started), 'ready'/'linked' (auto-link merchant — no login needed), or 'error'. |
| message | Yes | Human-readable next step. |
| loginUrl | No | URL the user must open to log in to the merchant. Absent for auto-link merchants. |
| merchant | No | The merchant slug, present when an auto-link merchant needs no login. |
| pendingId | No | Session id to pass to buy_connect_status. Absent for auto-link merchants. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes that it opens a hosted browser session for some merchants, returns a URL, and requires calling buy_connect_status for confirmation. Mentions that non-login merchants are ready immediately. Also notes that it only tracks logins it started itself. Adds significant context beyond annotations (readOnlyHint=false, destructiveHint=false). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value. Could be slightly more concise but still effectively communicates key points without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, existing annotations, and presence of output schema (implied), the description covers purpose, usage flow, alternatives, pairing, and specific behavioral notes. Complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'merchant' has schema description 'merchant slug (e.g. doordash)'. Description adds behavioral context: behavior varies by merchant type. Since schema coverage is 100%, description adds meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it connects a merchant for shopping, distinguishes between merchants needing login and those that don't, and explicitly contrasts with buy_link_merchant. This provides a specific verb+resource with sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this instead of buy_link_merchant for hosted-login merchants.' Explains pairing with buy_connect_status and contrasts with conversational `buy` tool. Clear when to use and when not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_connect_statusARead-onlyIdempotentInspect
Check the status of a hosted merchant login started with buy_connect. Returns linking (still in progress — call again in a few seconds), linked (success — the merchant is ready to shop), expired, or error. Pass the merchant and the pending_id from buy_connect. ONLY for logins started by the buy_connect tool: a login link handed out by the conversational buy tool has no pending_id — for those, reply to the same buy conversation ("done — I logged in") instead of calling this.
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | Yes | merchant slug (e.g. doordash) | |
| pending_id | Yes | The pending_id returned by buy_connect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Connect state: 'linking', 'linked', 'expired', or 'error'. |
| message | Yes | Human-readable status / next step. |
| merchant | No | The merchant slug, present when linked. |
| cart_carried_over | No | True when a cart built anonymously before linking was moved onto the linked account — re-show it (buy_view_cart) and re-confirm the total before checkout. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, idempotent read. Description adds polling behavior and return states, no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and tool is simple, description covers all necessary context for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description covers parameters fully (100%). Description restates that pending_id comes from buy_connect, providing marginal extra context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool checks the status of a hosted merchant login started with buy_connect, lists return values, and distinguishes from sibling tool 'buy'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (after buy_connect) and when not to use (for logins from 'buy' tool), and provides alternative action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_list_merchantsARead-onlyIdempotentInspect
List merchants available for agent commerce (Rappi, Good Eggs, DoorDash) and whether this user has linked each one. Link a merchant before shopping it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of merchants returned. |
| status | No | Outcome: 'ok', 'empty', or 'error'. |
| message | Yes | Human-readable merchant list (or an error / empty note). |
| merchants | No | Available commerce merchants and this user's link status for each. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, which matches the listing nature. The description adds that the tool shows whether each merchant is linked, and that linking is required before shopping, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose and usage. No wasted words, front-loaded with core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters), the description covers the main points: listing merchants and linking status. The presence of an output schema means return values are handled separately. Slight deduction for not specifying the output structure, but schema compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is 100%. The description does not need to add parameter meaning, and baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists merchants available for agent commerce and indicates linking status, with specific examples (Rappi, Good Eggs, DoorDash). This distinguishes it from sibling tools that perform purchases or other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises to link a merchant before shopping, providing context for when to use the tool. While it doesn't explicitly exclude alternatives, the context of listing vs. other actions is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_unlink_merchantADestructiveIdempotentInspect
Disconnect a merchant — drops the saved session + link. The user must re-link (e.g. hosted connect) before shopping it again.
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | Yes | Merchant slug to disconnect (e.g. doordash). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Outcome: 'unlinked', 'not_linked', or 'error'. |
| message | Yes | Human-readable unlink outcome. |
| merchant | No | The merchant slug that was unlinked (or attempted). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context beyond annotations: explains that the session and link are dropped and that re-linking is required. Aligns with destructiveHint=true without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise—one sentence that conveys purpose, effect, and required follow-up. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple disconnect tool with one parameter and an output schema, the description fully covers purpose, behavior, and post-conditions. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'merchant' has schema description. Description adds a concrete example ('e.g. doordash'), providing clarity beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (disconnect a merchant) and the resource (merchant). Explains what happens: drops saved session and link, distinguishing it from other merchant-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the consequence and the need to re-link, guiding the agent on when to use. Lacks explicit when-not-to-use or comparative alternatives, 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.
check_kyc_documentARead-onlyIdempotentInspect
Check the conversational verification state — use after the user uploads their ID via the browser upload link (or any time you need to re-orient). Returns the current step and the fields still missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| nextStep | No | |
| uploadUrl | No | |
| missingFields | No | |
| verificationUrl | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, indicating safe read operation. The description adds value by stating it returns the current step and missing fields, and confirms the tool is non-destructive. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence states the action and usage context, the second describes the return value. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, clear annotations, and an output schema that presumably defines the return format), the description sufficiently covers purpose, usage, and behavioral context without missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema coverage, the tool's schema already conveys all parameter info. The description does not need to add parameter details, meeting the baseline for no-param tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks conversational verification state, specifies when to use it (after ID upload or for re-orientation), and distinguishes from siblings like 'get_kyc_status' and 'submit_kyc_document' by focusing on the verification state and missing fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises use after ID upload and for re-orientation, providing clear context. It does not mention exclusions or alternatives, but the guidance is sufficient for a simple read-only check tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_cardADestructiveInspect
Permanently close a virtual card. This is irreversible — the card cannot be reopened. Safe to call on an already-closed card (idempotent). The user's rewards card (the card their tokenback redeems onto) is close-protected: closing it returns its balance to the wallet but retires the card number the user may have on file at AI labs, so it requires confirm_rewards_card — set it ONLY after the user explicitly confirms they want the rewards card closed.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The card ID to close | |
| confirm_rewards_card | No | Required to close the rewards card. Only set after the user explicitly confirms; never set it preemptively. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cardId | No | The ID of the card that was closed. |
| status | No | Outcome discriminator; always "closed" on success. |
| message | Yes | Human-readable confirmation that the card was closed. |
| approvalId | No | Present when status is approval_required: pass it back as approval_id after the user approves. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims the tool is idempotent ('Safe to call on an already-closed card (idempotent)'), but annotations explicitly set idempotentHint to false. This is a direct contradiction, warranting a score of 1 per guidelines.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core action. Every sentence adds value, but it could be slightly more concise. Structure is logical: purpose, irreversibility, idempotence, special case for rewards card.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (rewards card protection, idempotence, approval flow), the description covers key scenarios. It explains the special case for rewards card and the need for user confirmation. It does not detail what happens to card balances or refunds, but the output schema likely covers return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters have descriptions). The description adds significant context for confirm_rewards_card ('only set after user confirms, never preemptively') and clarifies the rewards card protection. It also mentions approval_id, which is documented in schema but the description provides usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Permanently close a virtual card', specifying the verb (close) and resource (virtual card). It distinguishes from sibling tools like pause_card and resume_card by emphasizing permanence and irreversibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: safe to call on already-closed cards (idempotent), and for rewards cards requires explicit user confirmation via confirm_rewards_card. It also mentions the approval flow for cards from another app. However, it does not explicitly compare to alternatives like pause_card or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cardAInspect
Create a new virtual debit card. Cards are live and charged for real when used. Money source: the user's saved default decides (get_settings default_payment — their chosen added card, or the wallet balance); with no saved default, an active ADDED card wins when the user has one (add_card), otherwise the cash balance. Per-call overrides: connected_card_id issues against a specific added card, source "issued" forces the cash balance. If the balance is short, top up with add_funds. Connections through a company OAuth client have NO card count or amount limits; only first-party personal accounts have per-plan caps. Call get_plan for the limits in effect.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Card behavior. 'single_use' (default) closes after its first approved charge — right for one-off purchases. 'multi_use' stays open across charges until its total limit is spent — right for subscriptions and recurring merchants. Multi-use cards can be paused (pause_card), resumed (resume_card), and resized (update_card_limit). | |
| source | No | Force the card to be funded from the user's cash balance even when they have an added card. Omit for the default (an active added card wins). | |
| expires_at | No | Optional hard expiry for a multi-use card (ISO-8601 with timezone, e.g. "2027-01-01T00:00:00Z"). Must be in the future, at most 365 days out. The card closes automatically when it passes. | |
| amount_cents | Yes | Card funding amount in CENTS, not dollars (minimum 100). 100 = $1.00 and 2500 = $25.00 — a value like 25 would be $0.25. Company-governed connections have no maximum; personal accounts are capped by their plan — call get_plan for the limits in effect. | |
| funds_source | No | Where the card funds come from. OMIT unless instructed: the server applies the right default (company-connected accounts use the company wallet automatically when the company enables it). company_flow = the company's wallet funds the card; onramp_flow = the user's own wallet. | |
| scope_preset | No | Create an AI card: a multi-use card restricted to AI-lab merchants (OpenAI, Anthropic, Gemini); charges anywhere else are declined at authorization. AI cards earn boosted tokenback on eligible spend. Implies type 'multi_use'. | |
| connected_card_id | No | Multi-card BYOC: issue against a SPECIFIC added card (an id from the user's added cards) instead of the newest active one. Omit for the default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| last4 | No | Last four digits of the new card. Present only when status is "created". |
| cardId | No | The new card ID. Present only when status is "created". |
| expiry | No | Card expiry (MM/YY). Present only when status is "created". |
| reason | No | Why the previous identity-verification attempt failed (e.g. "document_unverified_other"). Present only when status is "kyc_required" and a prior attempt was rejected. |
| source | No | "connected" when the card was created against the user's added card (see add_card). Absent for wallet-funded cards. |
| status | No | Outcome discriminator: "created" (card issued), "approval_required" (human approval needed), "approval_pending" (BYOC passkey approval — send approvalUrl to the user, then retry with the same arguments in ~10s), "payment_method_required", "kyc_required", "user_info_required", "beta_capacity_reached", "issuing_balance_insufficient", "payment_method_declined", "limit_reached", "funding_in_progress" (company wallet funding underway — retry with the same arguments in ~10s), "funding_not_approved", "org_wallet_funding_required", "org_wallet_unavailable" (the company wallet backing this account is not active — the company must finish setup; do not retry immediately), or "rate_limited" (wait ~1 minute, then retry). |
| message | Yes | Human-readable result or guidance for the next step. |
| approvalId | No | The approval request ID to pass to approve_request. Present only when status is "approval_required". |
| cardStatus | No | Card status, e.g. "active". Present only when status is "created". |
| approvalUrl | No | The passkey approval link to send to the user. Present only when status is "approval_pending". |
| balanceCents | No | Card balance in cents. Present only when status is "created". |
| balanceDollars | No | Card balance formatted as USD dollars, e.g. "12.50". Present only when status is "created". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing that cards are immediately active and incur real charges, the default funding hierarchy, the effect of connected_card_id and source overrides, and the difference between company and personal account limits. This adds critical behavioral context not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured, with each sentence providing necessary information: definition, funding resolution, overrides, fallback, and limit context. No filler or redundant phrasing; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the complexity of 7 parameters, the description covers all key contextual aspects: immediate activation, funding source decision logic, overrides, top-up path, and limit variations. An output schema exists, so return-value details are not needed. This is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds some cross-parameter context (e.g., how source and connected_card_id interact with funding choices), but this information is largely redundant with the schema descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Create a new virtual debit card'), immediately distinguishing it from siblings like add_card, close_card, and pause_card. It also clarifies that the card is live and charged for real, reinforcing its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains the context for using create_card, including how funding sources are selected, when to use per-call overrides, and when to top up with add_funds. It does not explicitly contrast with sibling tools like 'add_card' (which might be for adding an external card), but the virtual debit card focus provides enough context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_withdrawal_recipientAInspect
Save a bank account as a withdrawal destination for the user's cash balance. Supports US bank accounts (ACH: routing + account number) and international bank accounts (SWIFT wire: IBAN + BIC). Ask the user for their bank details conversationally, then call this once. After saving, use withdraw to request a payout.
| Name | Required | Description | Default |
|---|---|---|---|
| iban | No | International only: IBAN (e.g. DE89370400440532013000). | |
| type | Yes | ach for US bank accounts; international_wire (SWIFT) for everywhere else. | |
| nickname | No | A label for this account (e.g. 'My checking'). | |
| bank_name | No | The recipient bank's name (recommended). | |
| swift_code | No | International only: 8 or 11 character SWIFT/BIC. | |
| account_type | No | ACH only: account type. | |
| country_code | Yes | Two-letter country code of the account holder (e.g. 'US', 'DE'). | |
| account_number | No | ACH only: US account number (4-17 digits). | |
| routing_number | No | ACH only: 9-digit US routing number. | |
| beneficiary_name | Yes | The account holder's full legal name, exactly as the bank knows it. | |
| country_specific | No | Extra banking fields some countries require: {"ifsc": "..."} for India, {"clabe": "..."} for Mexico, {"bsb": "..."} for Australia. Required for those countries; the validation error names the missing key. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a creation (write) operation. The description adds context about supported bank types and required fields. No contradictions. Moderate additional behavioral disclosure beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, clearly separating US and international cases. No wasted words. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the richness of sibling tools, the description is complete. It explains the tool's role in the withdrawal flow and covers all necessary behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the relationship between parameters (e.g., US vs international fields) and giving examples for country_specific. This extra context warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool saves a bank account as a withdrawal destination. It explicitly mentions support for US ACH and international SWIFT, and distinguishing from sibling tools like 'withdraw' and 'list_withdrawal_recipients'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear workflow guidance: ask the user for bank details conversationally, call this once, then use 'withdraw' for payout. It lacks explicit when-not-to-use or alternatives but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceAIdempotentInspect
The user's cash balance: the money that funds new cards. Provisions the balance account on first use. Users add cash with Apple Pay or Google Pay in USD; funds are held as USDC. (Their wallet, meaning the cards themselves, is list_cards.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Balance account status. |
| message | Yes | Human-readable balance summary. |
| balanceUsd | No | Spendable cash balance in USD (string decimal). |
| confirmingUsd | No | Deposit clearing on-chain, not yet spendable (present only mid-deposit). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool provisions the balance account on first use, a behavioral trait beyond annotations. Explains fund flow (Apple Pay/Google Pay to USDC). Annotations are consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with primary purpose, efficient and waste-free.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete description for a simple read tool with no params and an output schema. Explains balance nature, provisioning, and sibling differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so baseline 4. Description adds value by explaining what the returned balance represents and its source, compensating for lack of params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool returns the user's cash balance for funding cards. Differentiates from list_cards by specifying that cards themselves are listed elsewhere, providing clear sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context that balance account is provisioned on first use and describes funding sources. However, lacks explicit when-to-use vs alternatives like get_card_balance, though differentiation is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_card_balanceARead-onlyIdempotentInspect
The live balance of ONE virtual card (the user's overall cash balance is get_balance). Prefer this over get_card_details when you only need to verify available funds: it is faster and does not expose sensitive card credentials.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The card ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| cached | No | Whether the balance was served from a short-lived cache rather than fetched live. |
| message | Yes | Human-readable balance summary. |
| balanceCents | No | Available balance in cents. |
| balanceDollars | No | Available balance formatted as USD dollars, e.g. "12.50". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Aligns with annotations (readOnlyHint, idempotentHint, destructiveHint) and adds useful behavioral context: live balance, faster, no credential exposure. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each purposeful: first states purpose with resource specificity, second provides usage guidance. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for its purpose: explains what it does, when to use, and key benefits. Output schema exists but not shown; description covers all needed context for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter card_id with basic schema description 'The card ID'. Description adds 'of ONE virtual card' but doesn't elaborate on format or constraints. Schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the live balance of a single virtual card, distinguishing it from get_balance (overall cash balance) and get_card_details (which exposes sensitive credentials).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises preferring this tool over get_card_details when only verifying available funds, citing speed and credential safety. Also contrasts with get_balance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_card_detailsARead-onlyIdempotentInspect
Get decrypted PAN, CVV, expiry, and current balance for a specific card. Use this only when you need to fill in a payment form — prefer get_card_balance if you only need the balance. May require human approval before returning credentials. If approval is required, prompt the user and then call approve_request. Card details are encrypted at rest with AES-256-GCM.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The card ID | |
| approval_id | No | Approval id from a prior approval_required response, once the user has approved. Only for cards created through ANOTHER app: first call without it (the user is emailed an approve link), then retry with it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| last4 | No | Last four digits of the card number. Present only when status is "details". |
| cardId | No | The card ID. |
| expiry | No | Card expiry (MM/YY). Present only when status is "details". |
| status | No | Outcome discriminator: "details" when credentials were returned, "approval_required" when human approval is needed first, "not_accessible" when the card exists outside this connection's scope, "managed_by_organization" for org-issued read-only cards. |
| message | Yes | Human-readable card details (or an approval-required prompt). |
| approvalId | No | The approval request ID to pass to approve_request. Present only when status is "approval_required". |
| cardStatus | No | Card status, e.g. "active" or "closed". Present only when status is "details". |
| balanceCents | No | Card balance in cents. Present only when status is "details". |
| balanceDollars | No | Card balance formatted as USD dollars, e.g. "12.50". Present only when status is "details". |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool requires human approval before returning credentials and that card details are encrypted at rest with AES-256-GCM. Annotations already declare read-only and non-destructive, so this adds valuable behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler: front-loaded purpose, alternatives, approval, and encryption. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (sensitive data, approval flow, two params, output schema exists), the description covers all necessary aspects: what data is returned, when to use, approval process, and encryption. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with basic descriptions, but the description explains the approval_id parameter workflow (first call without, then retry with it), adding meaning beyond schema. This warrants a score above baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns decrypted PAN, CVV, expiry, and balance, and distinguishes from get_card_balance, citing specific use cases. This is a specific verb+resource with sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (for filling payment forms) and when not (prefer get_card_balance for just balance). Also describes the approval workflow, including when to call approve_request, providing complete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instructionsARead-onlyIdempotentInspect
Call this BEFORE using buy; returns the latest usage guide for shopping and checking out with AgentCard.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | The latest buy usage guide / instructions text. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. The description adds that it must be called before `buy`, which is a behavioral prerequisite beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loading the critical prerequisite and purpose, with no extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and output schema present, the description fully covers what the agent needs to know: its role as a pre-step and what it returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a usage guide for shopping and checkout, and explicitly ties it to the `buy` tool, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Call this BEFORE using `buy`', providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_kyc_statusARead-onlyIdempotentInspect
Check the user's identity verification (KYC) status. Returns whether they are verified and, if not, the current state plus the conversational next step. Use this to poll after the user does the face scan, or any time create_card reports kyc_required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | Failure reason from the verification provider when one exists. |
| status | No | Raw KYC state: "verified", "pending", "requires_input", "duplicate_identity", "canceled", or null if never started. |
| message | Yes | Human-readable status / next step. |
| nextStep | No | Conversational next step when the flow is in progress. |
| verified | No | True when identity verification has passed. |
| missingFields | No | |
| verificationUrl | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. Description adds useful behavioral info (returns state and next step), but is not essential beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with purpose, followed by usage. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema, the description fully covers the tool's purpose, usage, and behavior. Complete for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters, so schema coverage is 100% automatically. Description adds no parameter info, but none is needed. Baseline 4 for 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool checks KYC status, returns verification state and next step. It clearly distinguishes from sibling tools like start_kyc or submit_kyc_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: poll after face scan or when create_card reports kyc_required. Offers clear context for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planARead-onlyIdempotentInspect
Show the user's current subscription plan, card limits, and this month's usage. Call this before create_card when you need the per-card amount cap or remaining monthly quota, or whenever the user asks about their plan, limits, billing, or upgrading. To cancel a paid plan, the gated tool cancel_plan also exists; call it by name even though it isn't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | Raw plan id, e.g. 'free', 'basic', or 'pro'. |
| message | Yes | Human-readable plan + usage summary. |
| planName | No | Display label of the plan, e.g. "Basic ($15/mo)". |
| ordersPlaced | No | Orders placed (counts toward the free-order quota on Free). |
| cardsRemaining | No | Cards remaining this month; null means unlimited. |
| cardsThisMonth | No | Number of cards created this month. |
| currentPeriodEnd | No | ISO date the current billing period ends, or null. |
| maxCardsPerMonth | No | Max cards allowed per month; null means unlimited (connections through a company OAuth client or organization have no card limits). |
| cancelAtPeriodEnd | No | Whether the subscription cancels at the end of the current billing period. |
| maxLifetimeOrders | No | Lifetime free-order quota; null means unlimited (paid plans). |
| maxCardAmountCents | No | Maximum funding per card, in cents; null means no per-card cap. |
| subscriptionStatus | No | Stripe subscription status (e.g. 'active', 'past_due'), or null on Free / when unavailable. |
| maxCardAmountDollars | No | Maximum funding per card, formatted as USD dollars, e.g. "500.00"; null means no per-card cap. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds context about the specific data returned (plan, limits, usage), which is useful but not beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, every sentence provides value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 an existing output schema, the description fully explains what it does, when to use it, and what it returns. Complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters so baseline is 4. Description does not need to add param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows the user's current subscription plan, card limits, and monthly usage, using specific verbs and resources. It distinguishes itself from siblings like cancel_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call before create_card for per-card amount cap or remaining quota, and for user queries about plan, limits, billing, or upgrading. Also mentions cancel_plan as an alternative for cancellation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rewardsARead-onlyIdempotentInspect
Show the user's tokenback: balance, lifetime earned, and recent activity. Tokenback pays tokens (1 token = 1¢ of credit value) on settled card spend. AI cards (create_card scope_preset: 'ai_labs') earn a boosted rate on AI-lab purchases, and companies can route a share of their earnings to their users as tokenback. Redeem with redeem_rewards.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable summary. |
| balanceTokens | No | Current token balance (1 token = 1 cent). |
| redeemedTokens | No | Tokens redeemed all-time. |
| minRedeemTokens | No | Minimum tokens per redemption. |
| lifetimeEarnedTokens | No | Tokens earned all-time. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds valuable context: what data is shown (balance, lifetime, recent activity) and explains tokenback mechanics (rate, AI card boost). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (3 sentences, ~55 words). Every sentence serves a purpose: describes output, explains tokenback value, and provides cross-reference to redeem_rewards. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, existing output schema, and annotations, the description fully covers what the tool does, what it returns, and how it fits with sibling tools. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline 4 is appropriate. Schema is empty, so description adds no parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Show the user's tokenback' with specific components (balance, lifetime earned, recent activity). Distinguishes from sibling tools like redeem_rewards, so agents know this is the read-only view.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use this tool vs. alternatives: 'Redeem with redeem_rewards' for redemption. Also implies use for viewing reward details, not for other actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingsARead-onlyIdempotentInspect
View the user's notification preferences (which email alerts they receive), their default payment source (which card or balance agents charge — check it before picking a funding source for them), their default delivery address (the wallet-level shipping address to use when buying physical goods for them — check it before asking them to dictate an address), and authorization settings (whether viewing card details or making transactions requires explicit approval). Authorization settings are read-only here; change the rest with the gated tool update_settings, calling it by name even though it isn't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable settings summary. |
| authorization | No | Authorization (approval) settings — read-only. |
| notifications | No | Email notification preferences. |
| default_payment | No | The wallet-level default payment source: { source: 'balance' } or { source: 'connected', connected_card_id }. null = auto (an active added card wins, else the balance). |
| delivery_address | No | The wallet-level default delivery address (street/city/state/zip + optional address2/phone/name), or null when unset. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds valuable behavioral detail by specifying which settings are read-only (authorization settings) and that the rest can be changed via update_settings. It does not contradict annotations, and the practical guidance on using the returned data goes beyond what annotations provide, though it stops short of disclosing rate limits or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence with multiple clauses, but every clause adds substantive value: it enumerates the data returned, explains the practical importance of each, and points to the update tool. It is dense but not bloated, and the front-loaded 'View the user's notification preferences' immediately orients the reader.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not enumerate return fields. It provides rich context about the meaning and use of each data category, states that authorization settings are read-only, and references the update tool. For a zero-parameter, read-only tool, this description is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty. According to the rubric, a baseline of 4 applies. The description appropriately does not attempt to document nonexistent parameters; it focuses on the content of the read operation instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'View' and precisely enumerates the four categories of information returned: notification preferences, default payment source, default delivery address, and authorization settings. This clearly distinguishes it from sibling tools like get_balance or get_plan, and the additional context on how to use each piece of data reinforces the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to consult the tool ('check it before picking a funding source for them', 'check it before asking them to dictate an address') and names the alternative update_settings for modifying settings. This provides both concrete triggering conditions and an explicit alternative, fully satisfying the when-to-use vs. alternatives criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_linkAInspect
The user's hosted wallet, as one shareable URL. Opens their Agentcard wallet in the browser: every card in one place, attach a debit/credit card, apply for an Agentcard card (identity verification runs right in the page). Mint it whenever the user needs a browser step — adding or seeing cards, finishing verification when in-chat photos fail — and send them the URL. Pass merchant + amount_cents to open the wallet ON the payment-approval sheet (the user picks a card and approves that exact charge) instead of the card list. Multi-use but short-lived (about 15 minutes — the exact moment is in expiresAt); mint a fresh one when it expires. Only works for app connections (OAuth); unavailable on personal logins.
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | No | Merchant name shown on the payment-approval sheet (with amount_cents). | |
| amount_cents | No | Amount in cents. When present, the link opens on the payment-approval sheet for this charge. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | The hosted wallet URL to share with the user. |
| message | Yes | Ready-to-send sentence containing the URL. |
| sandbox | No | True when the connection is in test mode. |
| expiresAt | No | ISO time the link stops working. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false and provide no safety profile, so the description carries full burden. It discloses that the link is multi-use, short-lived (~15 minutes with expiresAt), and should be re-minted after expiry. It also clarifies that identity verification runs in-page, and that the OAuth-only constraint applies. This is rich, non-obvious behavioral context beyond what any schema field captures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but every sentence contributes: purpose, capabilities, when to use, param mode, expiry, and OAuth constraint. No repetition or filler. Despite its length, it remains tightly structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two modes, optional params, time-limited links, platform restrictions), the description covers all essential aspects: what it does, when to use, how params modify behavior, operational details (expiry, OAuth), and what to do when expired. The output schema handles return values, so no omission there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameters are described in the schema, so baseline is 3. The description adds meaning by explaining that merchant and amount_cents must be passed together to open the payment-approval sheet for that exact charge, versus the default card-list view. This clarifies the combined behavior and optional nature, going slightly beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool produces a shareable URL for the user's hosted wallet, with specific detail on what it opens in the browser. It distinguishes itself from sibling tools by being a link generator rather than a card or KYC action, and explains the two usage modes (card list vs. payment-approval sheet).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use the tool ('whenever the user needs a browser step'), gives examples (adding/seeing cards, finishing verification), describes how to trigger the payment-approval sheet with merchant + amount_cents, and notes the limitation to app connections (OAuth) and unavailability on personal logins. This is strong when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_accountADestructiveInspect
Link or merge another Agentcard account that belongs to the same person. Use when the user says they already have an account under a DIFFERENT email or phone number — most often after identity verification (KYC) is rejected as a duplicate, which means that person already verified on another account. Two steps: (1) call with { type, identifier } to send a one-time code to that email/phone; (2) call again with the { ticket, code } to verify. If the identifier belongs to a different account, the two accounts are MERGED (the identity-verified account survives and gains the other's email/phone, so both sign in to one account); if no account has it, it is simply added to the current account.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Step 2: the one-time code the user received. | |
| type | No | Step 1: which kind of identifier the OTHER account uses. | |
| ticket | No | Step 2: the ticket returned by step 1. | |
| identifier | No | Step 1: the email address or phone number of the other account to verify. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint: true, and the description goes beyond by explaining that accounts are merged (the identity-verified account survives) or the identifier is simply added if no account exists. It also details the two-step process and code verification, adding significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but front-loaded with the core purpose, then structured into two steps. It is slightly lengthy but every sentence adds value; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two-step process, conditional outcomes), the description covers all necessary context: when to use, steps, possible results (merge vs. add). Output schema exists but return values are not explained; however, that is acceptable per rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds substantial meaning beyond schema by grouping parameters into steps (Step 1: type, identifier; Step 2: ticket, code) and explaining their purpose in the flow, aiding correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool links or merges accounts belonging to the same person, with specific verb ('link or merge') and resource ('Agentcard account'). It distinguishes from sibling tools by describing a unique operation (merging accounts) not available in other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'when the user says they already have an account under a DIFFERENT email or phone number — most often after identity verification (KYC) is rejected as a duplicate'. It provides step-by-step guidance but does not mention when not to use or alternatives, slightly reducing score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_added_cardsARead-onlyIdempotentInspect
List the user's ADDED cards (their own Visa cards enrolled via add_card — the BYOC funding source), with ids, brand, last4, expiry, and status. The row marked isDefault is what create_card charges when no connected_card_id is given — the user's chosen default card (set with update_settings default_payment), falling back to the newest active one. Not the same as list_cards (the virtual cards Agentcard issues).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of non-revoked added cards. |
| message | Yes | Human-readable list (or an empty-state note). |
| attachedCards | No | Added-card enrollments, newest first. The row with isDefault true is the default for new cards; none is marked when the default payment is the wallet balance. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/destructive, but the description adds substantial behavioral context: the list of returned fields (ids, brand, last4, expiry, status), the meaning of isDefault, and the fallback to the newest active card. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each purposeful: the first defines the tool's scope, the second explains the isDefault behavior, and the third differentiates from a sibling tool. No redundancy or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and no parameters, the description adequately covers the tool's purpose, selection criteria, output semantics, and behavioral nuances. It is complete without being overly verbose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds semantic value by explaining what the output fields mean and how the default card is chosen, but there is no parameter semantics to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'List the user's ADDED cards' and specifies the resource as 'their own Visa cards enrolled via add_card — the BYOC funding source'. It also explicitly distinguishes from list_cards, making it unambiguous which tool to use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance by contrasting with list_cards ('Not the same as list_cards (the virtual cards Agentcard issues)') and explaining how the isDefault row relates to create_card, giving clear context for when to use this tool and how its output is used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cardsARead-onlyIdempotentInspect
The user's wallet: every live card they hold, with IDs, last four digits, expiry, balance, and status. Start here to find available cards; if none are returned, call create_card to issue one. When the shared wallet is enabled, wallet lists every card across all connected apps and companies, each tagged with its source (kind personal/company, the issuing app, and the company where applicable) — cards created by another app or company are read-only from this session: get_card_details and close_card will not work on them.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cards | No | The user's own virtual cards. |
| count | No | Total number of cards across the user's own cards and any connected-account cards. |
| wallet | No | One-wallet view (present when the shared wallet is enabled): every LIVE card across personal and company sources, each tagged with its provenance. Closed cards are excluded; transactions carry history. |
| message | Yes | Human-readable list of cards (or an empty-state message). |
| connectedAccounts | No | Read-only cards issued and managed by an organization the user is linked to. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnlyHint and destructiveHint annotations by detailing the shared wallet mode, cross-app source tagging, and the read-only restriction for cards issued by other apps/companies. This is valuable behavioral context not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each delivering essential information: purpose, first-step usage, and shared wallet behavior. No filler or redundancy; it is well-structured and front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main use case, edge cases for shared wallets, and cross-app restrictions. Since an output schema exists and there are no parameters, no additional return value or parameter documentation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters and schema description coverage is 100%, so the description is not required to add parameter details. With no parameters, baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: listing the user's live cards with IDs, last four digits, expiry, balance, and status. It also distinguishes from siblings by noting that cards from other apps are read-only and that get_card_details and close_card won't work on them, and points to create_card as a follow-up.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Start here to find available cards' and directs to call create_card if no cards are returned. It also explains the shared wallet behavior and clarifies which operations are not supported on read-only cards, providing clear when-to-use and 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.
list_connectionsARead-onlyIdempotentInspect
List the third-party apps the user has connected to their Agentcard account via OAuth (e.g. Kilo), including when each was connected and whether it is still active. Read-only. To revoke an app, call revoke_connection with its clientId.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of connected apps. |
| status | No | Result status: "no_connections" when none are connected, otherwise "ok". |
| message | Yes | Human-readable summary of the connected apps. |
| connections | No | The third-party apps connected to the user's account via OAuth. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds details beyond readOnlyHint: includes 'when each was connected and whether it is still active'. Also explicitly states 'Read-only', consistent 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded purpose, no waste. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete description for a parameterless tool with output schema. Covers purpose, data returned, and alternative tool for revocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; baseline 4 per guidelines. Schema coverage is 100% trivially, no additional param info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists third-party apps connected via OAuth, with specific example (Kilo). It distinguishes from revoke_connection by directing to that sibling for revocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (to list connected apps) and when not to (to revoke, use revoke_connection). Provides clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_payment_methodsARead-onlyIdempotentInspect
List the saved payment methods (used only to pay for flight bookings, not for cards or adding funds). Returns each method with its id, brand, last 4 digits, and expiry, and marks the default one. Use setup_payment_method to add a new one. The gated tools set_default_payment_method and remove_payment_method also exist; call them by name even though they aren't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of saved payment methods. |
| status | No | Whether any payment methods are saved. |
| message | Yes | Human-readable summary of the saved payment methods. |
| defaultId | No | The id of the payment method marked as default, if any. |
| paymentMethods | No | The saved payment methods. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds context that this is for flight bookings only and that the default method is marked. No contradictions. Could add more on behavior like order or pagination, but currently sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first explains purpose and return structure, second provides usage alternatives. Front-loaded with key information, no redundant phrases, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (0 params, output schema exists), the description covers the tool's purpose, what it returns, and related tools. No gaps in required information for agent selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description does not need to explain parameters, and it does not repeat schema info. The context that it returns specific fields is helpful and goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved payment methods used only for flight bookings, lists the returned fields (id, brand, last 4 digits, expiry, default), and explicitly excludes cards and adding funds, distinguishing it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use this tool (listing payment methods) and when to use alternatives: setup_payment_method for adding, and set_default_payment_method/remove_payment_method for modifying. Also mentions that gated tools can be called by name despite not being in the tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_approvalsARead-onlyIdempotentInspect
List the user's PENDING approval requests: asks from connected apps (create a card, view full card details, close/pause/resume a card, change a limit) waiting on the user's decision. Surface each one to the user and let THEM decide; after the user answers, resolve with approve_request. NEVER approve or deny on your own — an approval is the user's consent, not yours. Personal sessions only; company-connected sessions have no personal inbox.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of pending approvals. |
| status | No | Present only when the list is unavailable: "personal_surface_only" for company-connected sessions. |
| message | Yes | Human-readable list of pending approvals (or an empty-state note). |
| approvals | No | Pending, unexpired approval requests, newest first. Each is waiting on the user's decision. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond annotations by emphasizing that approvals require user consent and the agent must not act on its own. Also discloses session scope. The readOnlyHint/idempotentHint align with 'list pending approvals', with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. Each sentence adds either scope, usage rule, or session constraint; the most critical consent rule is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero params and an output schema present, the description fully covers what the tool does, when to use it, and important guardrails. No gaps remain for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has zero parameters, so the schema is empty and there is nothing to document. Baseline for 0 params is 4; description correctly omits parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool lists the user's PENDING approval requests from connected apps with specific examples (create a card, view full card details, close/pause/resume a card, change a limit). It distinguishes from sibling approve_request by framing this as the listing step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: surface each request and let the user decide, resolve with approve_request afterward. Also states session limitation ('Personal sessions only; company-connected sessions have no personal inbox') and the rule 'NEVER approve or deny on your own'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsARead-onlyIdempotentInspect
Transactions with amount, merchant, status, and timestamps. Pass card_id for one card's transactions; OMIT it for every card in the account (newest first, each row tagged with its card). Use limit and status to filter. The gated views list_all_transactions and list_transactions_by_payment_method also exist; call them by name even though they aren't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of transactions to return (default 20) | |
| offset | No | Skip this many (all-cards view pagination; ignored for a single card). | |
| status | No | Filter by transaction status (e.g. PENDING, SETTLED, DECLINED, REVERSED, EXPIRED, REFUNDED) | |
| card_id | No | A card ID for that card's transactions; omit for all cards in the account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of transactions returned. |
| message | Yes | Human-readable list of transactions (or a "no transactions" note). |
| transactions | No | The transactions for the card, newest first. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: transactions are returned newest first, each row tagged with card when all cards, and offset is ignored for single-card queries. No contradictions with readOnlyHint and idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each purposeful: content summary, card_id usage, filtering advice, and alternative views. No redundant or unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and schema covers all parameters, the description adequately covers behavior, filtering, pagination, and alternatives. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining the semantic difference for card_id (one vs all) and advising use of limit/status. However, it does not elaborate on offset behavior beyond the schema note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists transactions with specific fields (amount, merchant, status, timestamps) and distinguishes behavior with/without card_id. It differentiates from siblings by mentioning alternative gated views, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage guidance on filtering via limit and status, and explains when to include or omit card_id. It references alternative views but does not explicitly state when to prefer them over this tool, slightly reducing clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_withdrawal_recipientsARead-onlyIdempotentInspect
List the user's saved bank accounts for withdrawals, masked (bank name and last four only). Use a recipient's id as recipient_id with withdraw. If the list is empty, collect the user's bank details and call create_withdrawal_recipient first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of saved bank destinations. |
| message | Yes | Human-readable list (or an empty-state note). |
| recipients | No | Saved bank destinations, masked. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds that data is masked (bank name and last four only), providing transparency beyond annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, followed by workflow guidance. No wasted words, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and an output schema existence (not shown but present), the description covers what the list contains, how to use results, and fallback action. Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, achieving 100% coverage. Baseline for 0 params is 4, and the description doesn't need to add parameter info. It focuses on output behavior, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists saved bank accounts for withdrawals, with masking of details. It distinguishes itself from siblings like create_withdrawal_recipient and withdraw by explaining the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides context: use the returned id as recipient_id for withdraw, and if empty, call create_withdrawal_recipient. This guides the agent on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_subscriptionAInspect
Manage a recurring meal/grocery SUBSCRIPTION (e.g. Locale) — NOT a one-time purchase, and no payment is taken (the subscription auto-bills the card on file at the merchant). action: 'menu_search' (browse the recurring menu; items flagged inPlan are covered by the plan), 'get_skip_dates' (list skipped/paused deliveries), 'skip'/'unskip' (one upcoming delivery date), 'set_skip_dates' (replace the full skip set; [] resumes all), 'update_setting' (change a setting). Locale settings: subscription_size (meals, e.g. 8), calorie_preference (low_calorie|both|moderate), diets (array), longevity_allergens (array), ingredient_allergies (array), default_window ('9am - 6pm'|'3pm - 7pm'|'9am - 12pm'), delivery_instructions (text). Link the merchant first.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | skip/unskip: one ISO delivery date (YYYY-MM-DD) | |
| dates | No | set_skip_dates: FULL set of ISO dates to skip ([] resumes all) | |
| limit | No | menu_search: max items | |
| query | No | menu_search: term over the recurring menu (e.g. 'salmon'); '' lists everything | |
| value | No | update_setting: the new value (number, string, or array of strings) | |
| action | Yes | the management action | |
| setting | No | update_setting: the setting key (see description) | |
| merchant | Yes | merchant slug (e.g. locale) |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds key behavioral details: no payment taken, auto-billing, actions like skip/unskip affecting deliveries, and the need to link the merchant first. This fully compensates for minimal annotation info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise given the complexity, with front-loaded purpose. Every sentence earns its place, though it could be slightly more structured (e.g., bullet lists). Still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, various actions), and existence of an output schema, the description covers all necessary context: actions, settings, prerequisite linking. It is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds significant value by explaining the action enum values and providing a detailed list of settings for 'update_setting', which goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages recurring meal/grocery subscriptions (e.g., Locale), explicitly distinguishes from one-time purchases, and lists specific actions. This differentiates it from sibling tools like 'buy', which are likely for purchases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it's for subscription management, not one-time purchases, and no payment is taken. It also mentions linking the merchant first. However, it lacks explicit when-not-to-use guidance relative to siblings, though many are unrelated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_cardAIdempotentInspect
Pause a multi-use card: temporarily blocks ALL new charges (reversible — use resume_card to unblock). Right for "stop this subscription for now" or a card the user suspects is compromised but is not sure. Only multi-use cards can be paused; single-use cards close after one charge and cannot be paused.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The card ID to pause (from list_cards or create_card). | |
| approval_id | No | Approval id from a prior approval_required response, once the user has approved. Only for cards created through ANOTHER app: first call without it (the user is emailed an approve link), then retry with it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cardId | No | The card ID. |
| status | No | "paused" on success; an error discriminator otherwise (e.g. "not_multi_use", "card_not_updatable"). |
| message | Yes | Human-readable result. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive and idempotent. Description adds reversibility and mentions resume_card. Also specifies that it blocks all new charges, though missing details on pending transactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with main purpose, then constraints and parameter usage. No redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action, when to use, card type constraints, and a key parameter detail. With only 2 simple params and output schema present, description is fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. Description adds critical context for approval_id, explaining the flow for cards from another app, which goes beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Pause a multi-use card: temporarily blocks ALL new charges', with specific verb (pause) and resource (multi-use card). Distinguishes from siblings like close_card (permanent) and resume_card (reverse).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Right for stop this subscription for now or a card the user suspects is compromised' and when not to: 'Only multi-use cards can be paused; single-use cards... cannot be paused.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_support_chatARead-onlyIdempotentInspect
Read the message history of a support conversation
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes | The conversation ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of messages returned. |
| status | No | Outcome of the read: 'empty' when there are no messages yet, 'ok' when messages were returned. |
| message | Yes | Human-readable rendering of the conversation history. |
| messages | No | The messages in the conversation, oldest first. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which sufficiently convey the tool's safety and behavior. The description adds the detail about reading 'message history' but does not provide additional behavioral traits beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose with zero waste. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single parameter, high schema coverage, and an output schema present, the description is largely sufficient. It does not cover potential limitations like pagination or message ordering, but for a simple read operation with strong annotations, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required parameter conversation_id. The description confirms the tool reads a support conversation but adds no new meaning beyond the schema field description 'The conversation ID'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Read' and states the resource 'message history of a support conversation'. It clearly identifies the tool's action and distinguishes it from siblings like start_support_chat or send_support_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as start_support_chat or send_support_message. There is no mention of prerequisites or context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redeem_codeAIdempotentInspect
Redeem a promo code that adds money to the user's cash balance. Each code works once per user; the credit lands in the balance and becomes spendable within a minute or two. Some codes hold the money until the user verifies their identity — the claim still locks the code to this user instantly, and the credit lands automatically once KYC is approved (start_kyc begins verification). The gated tool list_codes shows the user's code history; call it by name even though it isn't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The promo code exactly as the user provided it (case and dashes are forgiven). |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, idempotentHint=true), the description discloses critical behaviors: credit lands within 1-2 minutes, some codes are gated on KYC approval, the claim locks instantly, and list_codes is a gated tool accessible by name. This adds significant context not present in structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses three sentences, each earning its place. The second sentence explains timing and KYC exceptions, the third offers a useful pointer to list_codes. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what an agent needs to know: purpose, idempotency, delay, KYC dependencies, and a hidden tool reference. An output schema exists to explain return values, so no additional return-format information is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter (code) with a clear description that case and dashes are forgiven. The tool description adds no additional parameter syntax, but it does provide behavioral context such as idempotency and KYC gating. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Redeem a promo code that adds money to the user's cash balance.' This clearly states what the tool does and distinguishes it from similar siblings like redeem_rewards or add_funds by focusing on promo codes and cash balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when a user provides a promo code) and adds contextual guidance (each code works once per user, delay, KYC conditions). It also mentions list_codes as an alternative for viewing history, but does not explicitly exclude other tools or name alternatives for redeeming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redeem_rewardsAInspect
Redeem tokenback: the tokens' cash value (1 token = 1¢) lands on the user's rewards card as spending power. The rewards card is permanent and locked to AI-lab merchants (OpenAI, Anthropic, Gemini) — created on first redemption, topped up after. Check get_rewards first for the balance and the minimum. Ask the user before redeeming.
| Name | Required | Description | Default |
|---|---|---|---|
| tokens | Yes | How many tokens to redeem (1 token = 1 cent, so 500 tokens = $5.00 of wallet credit). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | "redeemed" on success; an error discriminator otherwise (e.g. "below_minimum", "insufficient_tokens", "redemption_in_progress"). |
| message | Yes | Human-readable result. |
| amountCents | No | Wallet credit in cents. Present when status is "redeemed". |
| redemptionId | No | The redemption ID. Present when status is "redeemed". |
| deliveredCardId | No | Rewards card the value landed on, when delivery completed inline. Absent = the value sits as wallet credit (it reaches the rewards card within a few minutes when delivery is enabled). |
| deliveredCardLast4 | No | Last 4 digits of the rewards card, when delivered inline. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral details beyond annotations: tokens convert at a fixed rate, the rewards card is permanent, locked to specific merchants, created on first redemption, and topped up afterward. Since annotations only indicate non-read-only but don't specify effects, these details add significant transparency. It could further mention irreversibility but is not required for basic use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action and effect, then a key restriction, then brief usage guidance. Every sentence adds essential information with no redundancy or fluff, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, the description covers all essential aspects: what happens, conversion rate, card behavior, merchant restriction, prerequisite check, and user consent. It doesn't explain every edge case but points to get_rewards for balance/minimum, which is sufficient for correct invocation. This is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema for the single parameter 'tokens' already provides a full description including the conversion rate and an example, giving 100% coverage. The tool description repeats the rate but adds no new parameter-level constraints or format details. Therefore, it meets the baseline for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Redeem tokenback' with a specific conversion rate and effect on the rewards card. It distinguishes itself from sibling tools like redeem_code and withdraw by describing the unique reward card mechanism and AI-lab merchant restrictions. The verb 'redeem' plus the specific resource 'tokenback' makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Check get_rewards first for the balance and the minimum' and 'Ask the user before redeeming.' This gives a prerequisite and consent requirement, but it does not explicitly name alternatives or when-not-to-use conditions, so it stops short of a 5. The guidance is still effective for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_added_cardADestructiveInspect
Remove (unenroll) one of the user's added cards. Irreversible for that enrollment: any virtual cards created against it are closed first, then the card is unenrolled at the network. ALWAYS confirm with the user before calling. Get ids from list_added_cards. The user can add the same card again later with add_card.
| Name | Required | Description | Default |
|---|---|---|---|
| attached_card_id | Yes | The id of the added card to remove (from list_added_cards). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | The id of the removed card. |
| status | No | "revoked" on success. |
| message | Yes | Human-readable confirmation or guidance. |
| closedCards | No | How many virtual cards created against it were closed. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate destructiveHint=true and non-read-only. The description adds substantial behavioral details: irreversibility, that virtual cards are closed first, network-level unenrollment, and the mandatory confirmation step. This enriches the agent's understanding far beyond the basic annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tight and well-structured: it states the action, explains consequences, provides a safety warning, tells where to find the ID, and notes reversibility via re-adding. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible action, the description covers the full context: what happens (closure of virtual cards, unenrollment), the required confirmation, how to obtain the ID, and that the card can be re-added later. With an output schema present, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with a clear description for attached_card_id. The description reinforces this by directing users to list_added_cards for obtaining the ID, adding practical context for the parameter's value sourcing, which goes slightly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove (unenroll)') and the specific resource ('one of the user's added cards'), distinguishing it from sibling tools like close_card and list_added_cards. It further clarifies that unenrollment is the intended meaning, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by instructing to get IDs from list_added_cards and emphasizing the need to confirm with the user. However, it does not explicitly contrast with alternative tools like close_card or add_card, leaving some room for interpretation about when to prefer this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_cardAIdempotentInspect
Resume a paused multi-use card so it accepts charges again. The inverse of pause_card.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The paused card ID to resume. | |
| approval_id | No | Approval id from a prior approval_required response, once the user has approved. Only for cards created through ANOTHER app: first call without it (the user is emailed an approve link), then retry with it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cardId | No | The card ID. |
| status | No | "active" on success; an error discriminator otherwise (e.g. "card_not_paused"). |
| message | Yes | Human-readable result. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-destructive, and idempotent behavior. The description adds that the card will 'accept charges again,' but does not cover the two-step approval flow hinted by the 'approval_id' parameter, leaving a behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two sentences that front-load the main action and efficiently link to the sibling tool. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, one with conditional usage), the description plus schema covers the essential behavior. However, omitting a summary of the two-step approval pattern (for cards from another app) is a minor completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters with descriptive comments (100% coverage). The description adds no additional meaning beyond what the schema already provides, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Resume a paused multi-use card'), the resource ('paused multi-use card'), and distinguishes from the sibling 'pause_card' by calling itself the inverse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by referring to 'pause_card' as the inverse, implying it is used after pausing. However, it does not explicitly state when not to use it or mention alternatives like 'close_card'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_connectionADestructiveIdempotentInspect
Revoke a third-party app's access to the user's Agentcard account. Disconnects the app and invalidates its OAuth tokens; it must reconnect via OAuth to regain access. Pass the clientId shown by list_connections.
| Name | Required | Description | Default |
|---|---|---|---|
| client_id | Yes | The OAuth client ID of the app to revoke (from list_connections). |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Result status: "revoked" when tokens were invalidated, "not_connected" when the app had no active access. |
| message | Yes | Human-readable outcome. |
| revoked | No | Number of OAuth tokens that were revoked. |
| clientId | No | The client ID that was revoked. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the action is destructive (aligning with destructiveHint=true) and adds details beyond annotations: it invalidates tokens and requires reconnection via OAuth. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, no redundant information. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, full schema coverage, output schema present), the description covers purpose, behavior, and parameter source completely. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter, so baseline is 3. The description adds value by specifying the source of the client ID ('from list_connections'), which helps the agent determine the correct value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Revoke a third-party app's access'), the resource (user's Agentcard account), and the mechanism ('Disconnects the app and invalidates its OAuth tokens'). It distinguishes itself from sibling tools like list_connections by specifying the required input source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to 'Pass the clientId shown by list_connections', providing clear usage guidance. While it doesn't list when not to use it, the context of revoking access versus other actions is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_support_messageCInspect
Send a message in an existing support conversation
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Your message | |
| conversation_id | Yes | The conversation ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable confirmation that the message was sent. |
| conversationId | No | The ID of the conversation the message was sent to. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, etc. Description adds no behavioral context beyond annotations. No disclosure of permissions, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that efficiently conveys purpose. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple tool with output schema and fully described params. Lacks usage guidance and behavioral details, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. However, descriptions are minimal ('Your message', 'The conversation ID'). Description adds no extra meaning beyond schema, so baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Send' and resource 'message' in context of 'existing support conversation'. It is specific but does not differentiate from sibling tools like 'read_support_chat' or 'start_support_chat'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. No mention of alternatives despite having similar sibling tools. Agent must infer usage from name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_payment_methodAInspect
Save a payment method used ONLY to pay for flight bookings (the fare is charged to it via a hold at booking; no virtual card is created for flights). It does NOT fund cards or the cash balance — cards are funded from the balance (see add_funds). Returns a secure checkout URL the user must open to save their card details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable summary of the result. |
| checkoutUrl | No | Secure Stripe checkout URL the user must open to save their payment method. |
| stripeSessionId | No | Identifier of the Stripe Checkout session created for the setup. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the minimal annotations: the fare is charged via a hold at booking, no virtual card is created for flights, and it returns a secure checkout URL. It also clarifies what the tool does NOT do, which is important given the annotations provide no safety or side-effect information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of three concise, information-dense sentences. It front-loads the primary purpose, then provides exclusions and an alternative, and ends with the return value. Every sentence earns its place with no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters but does have an output schema, the description is complete: it states the action, the specific use case, what it does not do, and the return value. It also references a sibling tool for alternative behavior, making it fully self-sufficient for an agent to select and invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does not need to explain parameter syntax, but it adds contextual meaning about the tool's purpose and return value, which helps the agent understand the invocation context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Save') and resource ('payment method') plus a clear scope: used ONLY to pay for flight bookings. It distinguishes itself from sibling tools by explicitly stating it does not fund cards or cash balance, which sets it apart from tools like add_card and add_funds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: this tool is for saving a payment method for flight bookings only. It provides an explicit exclusion ('does NOT fund cards or the cash balance') and names the alternative tool ('see add_funds'), making it clear when not to use this tool and what to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_kycAIdempotentInspect
Begin (or resume) identity verification. Verification is CONVERSATIONAL: it starts with a photo of the user's government ID — the backend reads the printed details automatically and the user confirms every value. Only fields the ID does not carry are asked (like the SSN for US documents, or the national ID number for non-US ones); occupation/income questions are never asked. The only browser step is a short face scan at the end. Relay each step to the user as ONE SHORT message (one or two sentences — the current ask only, never the whole flow, never an unrequested link). Returns the next step, ID-photo upload options, and (for legacy hosted-flow accounts) a hosted verification URL instead.
| Name | Required | Description | Default |
|---|---|---|---|
| terms_accepted | No | DEPRECATED — use agreements_accepted. Pass true once the user has explicitly agreed to the card issuer's cardholder terms in the conversation. | |
| agreements_accepted | No | Keys of the User Agreements the user explicitly accepted, one by one (the full required set from the agreements list — e.g. e_sign, account_opening_privacy, card_terms, accuracy, non_solicitation). Only pass after presenting each agreement verbatim and getting a yes covering all of them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | No | Provider reason on rejection. |
| status | No | "started", "verified", "rejected", or "unknown". |
| message | Yes | Human-readable summary / next step. |
| nextStep | No | Conversational step: id_document | fields | terms | face_verification | review_pending | verified | rejected. |
| uploadUrl | No | Browser upload page for the ID photo (1h validity). |
| missingFields | No | Fields still needed from the user. |
| verificationUrl | No | Face-scan page (conversational flow) or hosted verification URL (legacy flow), 48h validity. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds detailed behavioral context beyond annotations: explains the interactive process, which fields are automatically read vs. asked, that occupation/income are never asked, and the return value structure (next step, upload options, hosted URL). 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Packs much information but includes instructions to the agent ('Relay each step as one short message') that could be considered extraneous. Front-loaded purpose, but could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of identity verification, the description covers the process, input constraints, and expected outputs. Output schema exists to define return values, so description need not detail them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by clarifying that 'terms_accepted' is deprecated and 'agreements_accepted' expects specific keys (e_sign, etc.), and explains the acceptance process.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Begin (or resume) identity verification.' Describes the conversational flow and differentiates from siblings like check_kyc_document or submit_kyc_fields by specifying this is the initial step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (starting/resuming KYC) and provides conversational guidance, but does not explicitly state when not to use or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_phone_verificationAInspect
Send (or re-send) the user's one-time funding verification code (the provider verifies the phone on the user's Agentcard identity, valid 60 days). add_funds already sends this code automatically when verification is needed — call this tool only to RE-send when the code never arrived (any unexpired code still works; sends are rate-limited). Returns the masked destination (text or email) and whether a code was sent; if the phone is already verified it says so and you go straight to add_funds. After the user reads back the code, call verify_phone.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations show readOnlyHint=false and destructiveHint=false; description adds that tool is rate-limited, returns masked destination and whether code was sent, and explains behavior when phone is already verified. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single well-written paragraph that front-loads the main action and includes all necessary details without fluff. Could be slightly more structured, but efficiently conveys all key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and presence of output schema (inferred), description covers return values, next step (verify_phone), and contrasts with sibling tools. Completely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema is empty (0 params), baseline 4 per instructions. Description does not need to add parameter info, but does not provide extra semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool sends a one-time verification code, distinguishes it from add_funds (which auto-sends) and verify_phone (next step). Specific verb 'send/re-send' and resource 'verification code' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use only to re-send when code never arrived, mentions rate limits, that unexpired codes still work, and when phone is already verified to go straight to add_funds. Provides clear when-to-use and when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_support_chatAIdempotentInspect
Start a new support conversation and send the first message
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Your initial support message |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable summary confirming the conversation was started. |
| conversationId | No | The ID of the newly created support conversation. Pass this to send_support_message or read_support_chat. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true, but the description says 'start a new conversation', which may imply non-idempotent behavior. No additional context on side effects, authentication, or conversation limits is given, so transparency is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded and gets to the point, though it could be slightly more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 output schema, the description is sufficiently complete for an AI agent to use. Missing behavioral clarifications are minor given the annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'message' is fully described in the schema with clear meaning. The description adds no extra detail, so the baseline of 3 applies due to high schema coverage (100%).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'start' and resource 'support conversation', and specifies the action of sending the first message. It distinguishes itself from sibling tools like 'send_support_message' (for existing conversations) and 'read_support_chat'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (initiate a new chat), but lacks explicit guidance on prerequisites or alternatives. However, the context from sibling tools provides enough distinction for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_kyc_documentAInspect
Submit the user's ID photo for identity verification. Ways in: (a) image data you hold programmatically (e.g. the user sent the photo in this chat and your platform exposes its bytes) — pass front_base64 (and back_base64 for a license back; its barcode reads most accurately); (b) local (stdio) mode — pass file_path/back_file_path and the file is read from disk; (c) neither — you get a secure upload link to hand the user. Do NOT ask the user what kind of document it is or where it was issued — the type and country are detected automatically from the photo; only relay a question if the result says the type could not be determined. Returns the fields read off the document — SHOW THEM TO THE USER for confirmation before continuing — plus whatever is still missing. If the result says NO identity details could be read, the image did not read as an ID at all: never insist to the user that it was their ID. Supported: JPEG/PNG/WebP up to 12MB (convert iPhone HEIC first).
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No | Local path to the ID photo (front of license, or passport photo page). Local/stdio connections only — remote connections without image data receive an upload link instead. | |
| back_base64 | No | Base64 image bytes of the license back (optional, recommended — the barcode reads most accurately). Same rule: programmatically sourced only. | |
| front_base64 | No | Base64 image bytes of the ID front (or passport photo page). ONLY pass base64 you received programmatically from your platform (e.g. an injected chat attachment) — never type or reconstruct image bytes yourself. | |
| document_type | No | ONLY pass this when the user themselves said what the document is ("here's my license") — otherwise omit it; the type is detected from the photo. Never ask up front. | |
| back_file_path | No | Local path to the back of the license (optional, recommended). Local/stdio connections only. | |
| back_mime_type | No | MIME type of back_base64. Defaults to image/jpeg. | |
| front_mime_type | No | MIME type of front_base64 (image/jpeg, image/png, image/webp). Defaults to image/jpeg. | |
| issuing_country | No | 2-letter ISO country that issued the document (e.g. US, AR). ONLY when the user volunteered it — otherwise omit; it is detected from the photo. Never ask up front. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | processed | document_expired | upload_failed | upload_link_provided |
| message | Yes | |
| nextStep | No | |
| extracted | No | Fields read from the document (confirm with the user). |
| uploadUrl | No | |
| unreadable | No | True when the image was received but NO identity fields could be read from it — it did not read as an ID; never assert to the user that it was one. |
| missingFields | No | |
| verificationUrl | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: the tool returns extracted fields that should be shown to the user, if no details are read the image is not an ID (don't insist), supported formats (JPEG/PNG/WebP up to 12MB), and conversion of HEIC. Annotations only provide readOnlyHint=false and destructiveHint=false, so description adds significant value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: it starts with the core purpose, then enumerates the three input methods, followed by behavioral instructions, and ends with technical constraints. Every sentence is necessary and imparts actionable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, multiple input modes, behavioral nuances), the description covers all aspects: input methods, parameter usage rules, format/size limits, and post-submission behavior (show results, handle failed reads). The presence of an output schema further reduces the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds meaning beyond the schema: e.g., back_base64 is 'optional, recommended — the barcode reads most accurately'; front_base64 warns 'never type or reconstruct image bytes yourself'; document_type and issuing_country should only be passed if user volunteered. This prevents misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Submit the user's ID photo for identity verification.' It specifies the verb 'submit' and resource 'ID photo for KYC'. It also distinguishes from siblings like check_kyc_document and start_kyc by focusing on the submission action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use each parameter (base64 for programmatic data, file_path for local mode, or omit for upload link). It also instructs not to ask the user for document type or country unless volunteered, and when to relay questions from the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_kyc_fieldsAInspect
Submit identity fields for verification: the ones the ID photo didn't carry (listed by missingFields — the tax/ID number always has to be asked since IDs don't print it; call it "SSN" only for US documents and "national ID number" otherwise), corrections to extracted values the user flagged, and the User Agreements acceptance (agreements_accepted, after presenting each agreement verbatim). That number is forwarded directly to the verification provider and never stored by Agentcard. NEVER ask about occupation, income, spending volume, or account purpose — those are filled automatically and must not be asked.
| Name | Required | Description | Default |
|---|---|---|---|
| ssn | No | US documents: 9-digit SSN, dashes optional. Non-US documents: the national ID / tax number printed on the ID. Forward-only — never stored. | |
| last_name | No | Legal last name, exactly as printed on the ID document. | |
| first_name | No | Legal first name, exactly as printed on the ID document. | |
| address_city | No | City of the residential address. | |
| phone_number | No | E.164 with country code, e.g. +14155551234. | |
| address_line1 | No | Residential street address, line 1 (e.g. 123 Main St). | |
| address_line2 | No | Residential street address, line 2 — apartment, suite, or unit. Omit if none. | |
| date_of_birth | No | YYYY-MM-DD | |
| address_region | No | 2-letter state code for US (e.g. CA). | |
| terms_accepted | No | DEPRECATED — use agreements_accepted. true once the user explicitly accepted the card issuer's cardholder terms. | |
| address_postal_code | No | Postal / ZIP code of the residential address. | |
| agreements_accepted | No | Keys of the User Agreements the user explicitly accepted, one by one — the FULL required set from the agreements list in the previous step's result. Only pass after presenting each agreement verbatim and getting an explicit yes covering all of them. | |
| address_country_code | No | 2-letter ISO country code (e.g. US). |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| nextStep | No | |
| missingFields | No | |
| verificationUrl | No | Face-scan link, present once everything is collected. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that SSN is forwarded to verification provider and never stored by Agentcard, and agreements must be presented verbatim. Annotations show readOnlyHint=false so write behavior is expected; description adds data handling details. Slightly lacking idempotency or side-effect info, but strong overall.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then concise details. Every sentence adds value, no redundancy. Efficiently covers all important aspects without extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with output schema, the description covers boundary behaviors (what not to ask), data retention policy, and required user interaction for agreements. Thorough and complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds critical meaning: explains which params correspond to missingFields vs corrections vs agreements, clarifies SSN handling, and mandates agreement presentation. Goes far beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Submit identity fields for verification' and lists specific categories (missingFields, corrections, agreements). Distinguishes from sibling tools like submit_kyc_document and start_kyc by specifying its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use: when ID photo didn't carry fields, corrections needed, and agreements acceptance. Includes explicit 'NEVER ask' instructions for irrelevant fields. Implicitly distinguishes from siblings like submit_kyc_document (document upload) and start_kyc (initiation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_user_infoAInspect
Submit the user's phone number and terms acceptance for a virtual card. Call this after create_card returns user_info_required. Do NOT ask the user for occupation, income, or account purpose — those are never asked. Identity fields (name, date of birth, SSN / national ID, address) belong to the KYC flow: create_card tells you whether it runs conversationally (start_kyc → ID photo → face scan) or via a hosted verification_url. After phone + terms are saved, retry create_card.
| Name | Required | Description | Default |
|---|---|---|---|
| phone_number | Yes | User's phone number in international E.164 format with a country code (e.g. +1 555 123 4567, +44 7911 123456) | |
| terms_accepted | Yes | Must be true — the user accepted the AgentCard cardholder terms of service |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Outcome of the submission: 'saved' when the user information was stored successfully. |
| message | Yes | Human-readable confirmation that the user information was saved. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutation (readOnlyHint=false) but not destructive. The description correctly implies a write operation and explains the expected outcome (saves data then retry). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single coherent paragraph with no redundancy. It efficiently conveys purpose, usage, and exclusions. Could be slightly more structured but is well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the sibling tools and the orchestration context, the description thoroughly explains the tool's role in the broader flow, including post-submission actions and limits on user prompts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already provides full coverage with descriptions for both parameters (phone_number format, terms_accepted must be true). The description does not add significant new semantic details beyond the schema, though it contextualizes them within the workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: submitting phone number and terms acceptance for a virtual card. It distinguishes this from other flows like KYC and explicitly ties it to the create_card workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: call after create_card returns user_info_required. Also states what not to ask (occupation, income, etc.) and what to do after submitting (retry create_card).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
surprise_meAInspect
Buy the user something totally unexpected and very silly/stupid-fun under a small dollar cap (default $10, hard max $25). Great when the user cannot decide what to order (from DoorDash etc.) or just wants a fun surprise. It kicks off a shopping conversation that FIRST brainstorms deliberately stupid ideas, picks ONE genuinely unexpected item, builds the cart, and shows the item + exact total. It NEVER checks out by itself: the reply includes a conversation_id — relay the user's explicit confirmation ("yes, place it") through the buy tool on that SAME conversation_id, exactly like a normal order. Each surprise_me call starts a fresh surprise; use buy for all follow-ups (answers, tweaks, the confirmation).
| Name | Required | Description | Default |
|---|---|---|---|
| vibe | No | Optional notes/vibe from the user, e.g. "make it food", "something for my desk", "they love ducks". | |
| merchant | No | Optional merchant hint the surprise should come from, e.g. 'doordash'. Omit to let the agent pick. | |
| max_dollars | No | Hard spend cap in dollars, total including fees. Optional; default 10, values above 25 are clamped to 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | Discriminator for the outcome. 'assistant_turn' when the buy loop replied; 'conversation_start_failed' or 'request_failed' on errors. |
| message | Yes | The assistant's conversational turn (it may ask for the delivery address, show the cart + total, confirm, or report a placed order), or an error explanation. |
| messages | No | The same turn split into ordered messages for multi-bubble surfaces (each narration segment, then the final reply/confirmation). `message` is the same content consolidated; clients that show one bubble should use `message` and ignore this. |
| conversation_id | No | The conversation id to thread back as conversation_id on the next buy call to continue the SAME order. Present on a successful assistant turn. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the multi-step workflow: brainstorms ideas, picks one, builds cart, shows item+total. Notes it requires explicit user confirmation through a separate tool. Annotations support this (readOnlyHint=false, openWorldHint=true). Adds context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: main action first, then workflow, then limitations. Every sentence adds information. Slightly long but justified by complexity; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers usage, workflow, integration with sibling tool, and constraints. Missing output schema details but description states what is shown. Sufficient given openWorldHint annotation and no undefined behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% with descriptions, but description adds value: explains default max_dollars (10), hard clamp (25), and 'merchant' being optional. Provides behavioral nuance not in schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (buy), resource (something unexpected), and scope (under a small dollar cap, default $10, hard max $25). Distinguishes from sibling tools like 'buy' which handles normal orders and checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: 'when the user cannot decide what to order or just wants a fun surprise'. Also clarifies when not to rely on it for checkout: 'It NEVER checks out by itself' and directs follow-up via the 'buy' tool on the same conversation_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_card_limitAIdempotentInspect
Change a multi-use card's total spending limit. Raising it reserves the extra amount from the user's cash balance (top up with add_funds if short); lowering it frees the difference, but the new limit can never go below what the card has already spent. Single-use cards cannot be resized.
| Name | Required | Description | Default |
|---|---|---|---|
| card_id | Yes | The multi-use card ID to resize. | |
| approval_id | No | Approval id from a prior approval_required response, once the user has approved. Only for cards created through ANOTHER app: first call without it (the user is emailed an approve link), then retry with it. | |
| new_limit_cents | No | Deprecated alias for spend_limit_cents. Prefer spend_limit_cents (matches the docs and the REST API). | |
| spend_limit_cents | No | The new TOTAL spending limit in cents (minimum 100). This is the lifetime cap, not a delta: a card that spent $20 of a $50 limit, resized to 8000, can spend $60 more. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cardId | No | The card ID. |
| status | No | "updated" on success; an error discriminator otherwise (e.g. "limit_below_spent", "insufficient_collateral"). |
| message | Yes | Human-readable result. |
| balanceCents | No | The remaining spendable balance in cents. |
| spendLimitCents | No | The new total limit in cents. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds key behaviors: raising reserves extra balance, lowering frees difference, limit floor of current spent, and the need for approval_id with cross-app cards. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise paragraph starting with the main action, then effects, then restrictions. Every sentence adds value without waste. Minor improvement could be shorter phrasing but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, 1 required, and an output schema, the description covers the core behavior, special case of approval_id, and single-use restriction. It omits edge cases like what happens if limit unchanged but balance affected, but output schema likely covers return. Adequate for an update tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description provides a high-level overview but does not add meaningful detail beyond what the schema already describes for each parameter (e.g., card_id, approval_id, etc.).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Change' with the specific resource 'multi-use card's total spending limit', clearly distinguishing it from siblings like close_card or pause_card. It also explicitly states that single-use cards cannot be resized, further differentiating tool scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to adjust spending limit), provides context for raising (needs balance, use add_funds if short) and lowering (frees balance, cannot go below spent), and warns against use with single-use cards. However, it does not explicitly compare to other card modification tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_planAInspect
Start a paid-plan upgrade. Choose the target plan: 'basic' ($15/mo — 15 cards/month, up to $500 per card) or 'pro' ($100/mo — 50 cards/month, up to $1,000 per card). Defaults to 'basic' if omitted. Returns a Stripe Checkout URL the user must open in their browser to complete payment. After they finish checkout, the plan updates automatically; verify with get_plan. Use only when the user explicitly wants to upgrade. To cancel a paid plan instead, the gated tool cancel_plan also exists; call it by name even though it isn't in the tools list.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | Which plan to upgrade to. Defaults to 'basic'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | No | Display label of the target plan, e.g. 'Basic' or 'Pro'. Present when the requested plan is known. |
| status | No | Discriminator for the outcome branch. |
| message | Yes | Human-readable summary of the upgrade outcome. |
| checkoutUrl | No | Stripe Checkout URL the user must open to complete payment. Present only when status is checkout_required. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses that the tool returns a Stripe Checkout URL the user must open, that the plan updates automatically after checkout, and the default behavior. Annotations (readOnlyHint=false etc.) are consistent and this adds detailed behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with the action and resources, but includes some redundancy (e.g., 'Defaults to 'basic' if omitted.' is repeated from schema). However, every sentence adds value for the agent, so it's moderately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one optional parameter and an output schema, the description fully explains the checkout flow, post-update verification, and when to use it. No gaps for a focused mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and includes the default. The description adds meaningful context about pricing limits per plan, which goes beyond the schema's enum labels, providing extra semantic value for agent decision-making.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Start a paid-plan upgrade.' It specifies the target plans (basic and pro) with pricing and limits, and distinguishes itself from the sibling cancel_plan, which is explicitly mentioned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use only when the user explicitly wants to upgrade.' Provides alternative (cancel_plan) and instructs to call it by name. Also mentions verifying with get_plan after checkout, giving a clear usage workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_phoneAInspect
Check the one-time code the user received from start_phone_verification. On success the balance is unlocked for funding (the verification stays fresh for 60 days) — call add_funds next. A wrong or expired code returns a recoverable status so you can ask the user to re-check it, or call start_phone_verification to resend.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The one-time code the user received, as a string (keep any leading zeros — do not send it as a number). |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, etc.). The description adds key behavioral context: on success the balance unlocks for funding, verification lasts 60 days, and wrong/expired codes return a recoverable status. However, it doesn't detail the exact structure of the recoverable status or any other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Front-loaded with purpose and immediate usage context. Every sentence provides necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description covers input expectations, success/failure behavior, and next steps. It is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter (code). The description adds crucial semantic instruction: 'keep any leading zeros — do not send it as a number'. This exceeds the schema's description, which only says 'as a string'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks a one-time code from start_phone_verification. It distinguishes itself from siblings by naming start_phone_verification and add_funds as related but distinct actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (after start_phone_verification, before add_funds), what to do on success (call add_funds), and how to handle failure (ask user to re-check or resend). Provides clear contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiARead-onlyIdempotentInspect
Show who you are operating as: the authenticated AgentCard account's email, user id, name, plan, KYC + account status, member-since date, and how this session is connected (personal login vs a third-party OAuth app connection, with the app name). Call this when the user asks "who am I" / "which account is this", or before money-moving actions when you need to confirm the account. Read-only. KYC shown here is the stored snapshot — use get_kyc_status when you need the live, provider-checked state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Cardholder name ("First Last"), or null before KYC info is submitted. |
| plan | No | Subscription plan id, e.g. 'free', 'basic', or 'pro'. |
| No | Email of the authenticated account, or null for a phone-first account (e.g. signed up by SMS on the iMessage relay). | |
| userId | No | AgentCard user id of the authenticated account. |
| message | Yes | Human-readable identity summary. |
| kycStatus | No | Raw stored KYC state (e.g. approved, pending, requires_input), or null if never started. |
| kycVerified | No | Whether identity verification (KYC) has passed (stored snapshot). |
| memberSince | No | ISO timestamp the account was created. |
| accountStatus | No | Account standing: 'active' or 'suspended'. |
| connectionType | No | How this session authenticates: 'oauth' (third-party app connection), 'personal' (CLI/dashboard login), or 'organization' (a company's Agentcard integration acting for its end user). |
| connectionClientId | No | OAuth client id of the connected app, when connectionType is oauth. |
| subscriptionStatus | No | Stripe subscription status (e.g. 'active', 'past_due'), or null on the free plan. |
| connectionClientName | No | Display name of the connected OAuth app (e.g. "Claude"), when known. |
| connectionOrganizationId | No | Organization id, when connectionType is organization. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds beyond this by noting that KYC shown is a stored snapshot, not live state, and suggests get_kyc_status for live checks. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence is dense but efficient. Could be slightly more concise but still well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully covers the tool's purpose, return fields, and usage context. Output schema exists (not shown) but description lists return values. No gaps for a zero-parameter read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0 parameters with 100% coverage, so description adds no param info. With zero params, baseline is 4; no additional semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'show' and resource 'who you are operating as' with a detailed list of fields (email, user id, name, plan, etc.). It distinguishes from siblings by contrasting with get_kyc_status for live state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: when user asks 'who am I' / 'which account is this', or before money-moving actions. Provides a clear alternative for live KYC state via get_kyc_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
withdrawAInspect
Withdraw cash from the user's balance, either to their saved bank account or to a crypto address on Base (USDC). Transfers are processed manually by the Agentcard team, usually within 1-3 business days; the user is emailed when it's sent. For a bank withdrawal, if the user has no saved bank account yet, call create_withdrawal_recipient first. For a crypto withdrawal, pass destination_address (a 0x Base address). ALWAYS confirm the amount and destination with the user before calling this.
| Name | Required | Description | Default |
|---|---|---|---|
| amount_cents | Yes | Amount to withdraw in cents (e.g. 2500 = $25.00). Range: $2.00 to $10,000.00. | |
| recipient_id | No | Bank rail: the saved bank account to pay (wrec_...). Omit to be shown the saved accounts. | |
| destination_address | No | Crypto rail: a 0x-prefixed address on Base to receive USDC. When set, the withdrawal goes on-chain instead of to a bank account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | Human-readable result or next step. |
| amountUsd | No | Requested amount in USD. |
| withdrawalId | No | Reference id of the created withdrawal request. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: manual processing by the Agentcard team, 1-3 business day timeline, and user notification via email. Annotations indicate readOnlyHint=false (modifies state) but no destructive hint. The description adds context about the asynchronous, manual nature beyond annotations. Could mention potential fees or cancellation policy, but overall strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and well-structured: front-loaded with the main action and options, followed by prerequisites and user confirmation requirement. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description covers all necessary context: the withdrawal process (bank vs crypto), prerequisites, timing, and user confirmation. It does not need to explain return values. For a withdrawal tool, it provides a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 3 parameters described), so baseline is 3. The description adds meaning by explaining how to choose between bank and crypto rails (using recipient_id vs destination_address) and the implication of each. Also mentions the email notification. This adds value beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Withdraw cash from the user's balance, either to their saved bank account or to a crypto address on Base (USDC).' It specifies the verb (withdraw) and resource (balance), and distinguishes two distinct modes (bank vs crypto). This differentiates it from siblings like 'add_funds' or 'create_withdrawal_recipient'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: when to use each rail, prerequisites ('call create_withdrawal_recipient first' if no saved bank account), and a mandatory instruction ('ALWAYS confirm the amount and destination with the user before calling this'). It also explains the manual processing time of 1-3 business days.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- -license-qualityCmaintenanceEnables AI agents to manage and use prepaid virtual Visa cards with hard budget limits for secure online transactions. It provides tools for creating cards, checking balances, and retrieving payment credentials with human-in-the-loop approvals.1

Shatale MCP Serverofficial
AlicenseAqualityAmaintenanceAI-native payment infrastructure that enables AI agents to make purchases, issue virtual cards, and manage spending within delegated budgets and policy controls.756MIT- Alicense-qualityBmaintenanceGive your AI agent a prepaid card to pay per call for hundreds of paid services — no per-vendor signups or API keys.38MIT
- AlicenseAqualityCmaintenanceTokenized user identity and virtual Visa cards for AI agents. Delegated user commerce- on existing Visa rails.8312MIT