Skip to main content
Glama
stables-money

Stables MCP Server

Official

Stables MCP Server

An MCP (Model Context Protocol) server that exposes the Stables fiat-to-crypto API to AI agents. This allows AI assistants like Claude, ChatGPT, Cursor, Codex, and other MCP-compatible clients to manage customers, create USDC and USDT quotes, execute approved transfers, and handle virtual accounts programmatically.

Use it to build stablecoin payment workflows for AI agents and agentic commerce: payouts, virtual account deposits, treasury movement, fiat off-ramping, and webhook reconciliation.

What is MCP?

MCP (Model Context Protocol) is an open standard that provides a standardized way to connect AI applications to external tools and data sources. Think of it like a "USB-C port for AI" - any AI that supports MCP can use any MCP server.

Related MCP server: Fin-MCP Payment Server

Features

This MCP server provides 26 tools across 7 categories:

Customer Management

  • create_customer - Create individual or business customers

  • get_customer - Get customer details and verification status

  • list_customers - List all customers

  • get_verification_link - Generate KYC verification links

  • update_customer - Update customer details and entitlements

  • update_customer_metadata - Update customer metadata key-value pairs

Quotes

  • create_quote - Get exchange rate quotes (USDC/USDT to fiat)

  • get_quote - Check quote status and details

Transfers

  • create_transfer - Execute a transfer using an active quote

  • get_transfer - Check transfer status

  • list_transfers - List transfers with filters

Virtual Accounts

  • create_virtual_account - Create virtual bank accounts for fiat deposits

  • list_virtual_accounts - List virtual accounts for a customer

  • update_virtual_account - Update virtual account settings

  • get_virtual_account_history - Get deposits and their payouts for a payment route

  • update_route_destination - Change the payout wallet on an existing route

Sandbox

  • simulate_route_deposit - Simulate a fiat deposit into a payment route (sandbox only)

  • simulate_transfer_deposit - Simulate the inbound crypto an off-ramp transfer awaits (sandbox only)

API Keys

  • create_api_key - Create a new API key

  • list_api_keys - List all API keys

  • get_api_key - Get API key details

  • revoke_api_key - Revoke an API key

Webhooks

  • create_webhook - Subscribe to events via webhook

  • list_webhooks - List all webhook subscriptions

  • delete_webhook - Delete a webhook subscription

  • list_webhook_deliveries - Recent delivery attempts, status codes and retry state

Installation

# Install from npm
npm install -g stables-mcp-server

# Or clone and build from source
git clone https://github.com/stables-money/mcp-server.git
cd mcp-server
npm install
npm run build

Configuration

The server requires the following environment variables:

Variable

Required

Description

STABLES_API_KEY

Yes

Your Stables API key

STABLES_API_URL

No

API base URL. Defaults to the environment your key belongs to (see below). Must use HTTPS.

Which environment you're talking to

Stables keys carry their environment: sti_test_… is a sandbox key, sti_live_… is a production key, and the API refuses a key that arrives at the wrong environment. So you don't have to set a URL — leave STABLES_API_URL unset and the key decides:

Your key

Where requests go

sti_test_…

https://api.sandbox.stables.money

sti_live_…

https://api.stables.moneyreal money

sti_local_… or anything else

production, unless you set STABLES_API_URL

Setting STABLES_API_URL always wins, which is how you reach staging, dev or a local deployment.

Start with a sandbox key. An agent holding a live key can move real money on your behalf; see agent safety.

Usage

With Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "stables": {
      "command": "npx",
      "args": ["stables-mcp-server"],
      "env": {
        "STABLES_API_KEY": "your-api-key",
        "STABLES_API_URL": "https://api.sandbox.stables.money"
      }
    }
  }
}

Then restart Claude Desktop.

With Cursor, Codex, ChatGPT, or another MCP client

Use the same command and environment variables in any MCP-compatible client:

{
  "mcpServers": {
    "stables": {
      "command": "npx",
      "args": ["stables-mcp-server"],
      "env": {
        "STABLES_API_KEY": "your-api-key",
        "STABLES_API_URL": "https://api.sandbox.stables.money"
      }
    }
  }
}

Agent safety

Stables is financial infrastructure. Agents should create quotes, prepare payment objects, and reconcile webhooks, but should require explicit human approval before creating transfers or other money movement. Check customer KYC/KYB status and entitlements before transactional actions, and treat sanctions, unsupported jurisdiction, verification, or compliance failures as hard stops.

With MCP Inspector (for testing)

# Set environment variables
export STABLES_API_KEY=your-api-key
export STABLES_API_URL=https://api.sandbox.stables.money

# Run the inspector
npm run inspect

Direct Execution

STABLES_API_KEY=your-api-key node build/index.js

Example Conversations

Creating a customer and getting a quote

User: "Create a customer for john@example.com and get a quote to convert 1000 USDT to EUR"

AI (using MCP tools):

  1. Calls create_customer with email and type

  2. Calls create_quote with source USDT + network, destination EUR + country, and destinationNetwork (swift or bank)

  3. Returns customer details and quote information

Checking transfer status

User: "What's the status of all my pending transfers?"

AI (using MCP tools):

  1. Calls list_transfers with status=created or status=in_progress (statuses are lowercase)

  2. Returns a formatted list of in-flight transfers

Setting up auto-payout

User: "Create a payment route for customer abc123 that pays AUD deposits out to my Polygon USDT wallet 0x..."

AI (using MCP tools):

  1. Calls create_virtual_account with the customer ID, AUD source currency, and the Polygon destination (the payout address is mandatory)

  2. Returns the deposit instructions to share with the customer

Paying out to a European beneficiary

User: "Pay 500 EUR to this German bank account"

AI (using MCP tools):

  1. Collects the extra beneficiary details EUR requires — recipientType, a full address, and dateOfBirth for individuals — before doing anything else

  2. Calls create_quote, then create_transfer once a human approves

Development

# Watch mode for development
npm run dev

# Build for production
npm run build

# Run tests
npm test

# Run linter
npm run lint

# Format code
npm run format

# Test with MCP Inspector
npm run inspect

Project Structure

stables-mcp-server/
├── src/
│   ├── index.ts              # Main entry point
│   ├── lib/
│   │   ├── stables-client.ts # Stables API client (with retries, timeouts)
│   │   └── stables-client.test.ts
│   └── tools/
│       ├── customers.ts      # Customer management tools (6)
│       ├── quotes.ts         # Quote tools (2)
│       ├── transfers.ts      # Transfer tools (3)
│       ├── virtual-accounts.ts # Virtual account tools (6)
│       ├── api-keys.ts       # API key tools (4)
│       ├── webhooks.ts       # Webhook tools (3)
│       └── sandbox.ts        # Sandbox deposit simulation (2)
├── package.json
├── tsconfig.json
├── vitest.config.ts
├── eslint.config.js
└── README.md

API Reference

Customer Tools

create_customer

Create a new customer for KYC and transfers.

Parameter

Type

Required

Description

email

string

Yes

Customer's email

customerType

"individual" | "business"

Yes

Type of customer

firstName

string

No

First name (for individuals)

lastName

string

No

Last name (for individuals)

companyName

string

No

Company name (for businesses)

entitlements

string[]

No

Entitlements to request (e.g., ["base_payout", "virtual_account"])

get_customer

Get customer details.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

list_customers

List all customers for the authenticated tenant. No parameters required.

Generate a KYC verification link.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

ttlInSecs

number

No

Link expiry in seconds (default: 1800)

successUrl

string

No

Redirect URL after successful verification

rejectUrl

string

No

Redirect URL after rejected verification

update_customer

Update customer details or entitlements.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

email

string

No

Updated email

phone

string

No

Updated phone

firstName

string

No

Updated first name

lastName

string

No

Updated last name

entitlements

string[]

No

Updated entitlements

update_customer_metadata

Update customer metadata key-value pairs.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

metadata

object

Yes

Key-value pairs to set

Quote Tools

create_quote

Get a quote for currency exchange (crypto to fiat).

Parameter

Type

Required

Description

fromCurrency

"USDC" | "USDT"

Yes

Source cryptocurrency

fromAmount

string

Yes

Amount to convert

fromNetwork

"ethereum" | "polygon" | "polygon-amoy"

Yes

Blockchain network

toCurrency

string

Yes

Destination currency (e.g., "EUR")

toCountry

string

Yes

Destination country code (e.g., "GR")

paymentMethodType

"SWIFT" | "LOCAL"

Yes

Payment method for payout

get_quote

Get quote details.

Parameter

Type

Required

Description

quoteId

string

Yes

Quote ID

Transfer Tools

create_transfer

Execute a transfer from a quote.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

quoteId

string

Yes

Quote ID to execute

accountHolderName

string

No

Bank account holder name

iban

string

No

IBAN

accountNumber

string

No

Bank account number

bankName

string

No

Bank name

bankCountry

string

No

Bank country code

bankCurrency

string

No

Payout currency

accountType

"savings" | "checking" | "payment"

No

Account type

swiftCode

string

No

SWIFT/BIC code

routingNumber

string

No

ABA routing number (US)

sortCode

string

No

Sort code (UK)

ifscCode

string

No

IFSC code (India)

bsbCode

string

No

BSB code (Australia)

get_transfer

Get transfer status.

Parameter

Type

Required

Description

transferId

string

Yes

Transfer ID

list_transfers

List transfers with filters.

Parameter

Type

Required

Description

status

string

No

Filter by status

type

string

No

Filter by type

customerId

string

No

Filter by customer

pageSize

number

No

Results per page

pageToken

string

No

Pagination token

Virtual Account Tools

create_virtual_account

Create a virtual bank account.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

sourceCurrency

string

Yes

Currency (e.g., "USD")

depositHandlingMode

string

No

"auto_payout", "hold", or "manual"

destinationAddress

string

No

Crypto wallet address

destinationPaymentRail

string

No

Blockchain network

destinationCurrency

string

No

Stablecoin (default: "usdc")

list_virtual_accounts

List virtual accounts for a customer.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

status

string

No

Filter by status

limit

number

No

Max results

update_virtual_account

Update virtual account settings.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

virtualAccountId

string

Yes

Virtual account ID

depositHandlingMode

string

Yes

New deposit handling mode

get_virtual_account_history

Get activity history for a virtual account.

Parameter

Type

Required

Description

customerId

string

Yes

Customer ID

virtualAccountId

string

Yes

Virtual account ID

limit

number

No

Max events to return

eventType

string

No

Filter by event type

API Key Tools

create_api_key

Create a new API key.

Parameter

Type

Required

Description

name

string

Yes

Descriptive name for the key

metadata

object

No

Optional metadata

list_api_keys

List all API keys.

Parameter

Type

Required

Description

pageSize

number

No

Results per page

pageToken

string

No

Pagination token

get_api_key

Get API key details.

Parameter

Type

Required

Description

apiKeyId

string

Yes

API key ID

revoke_api_key

Revoke an API key (permanent).

Parameter

Type

Required

Description

apiKeyId

string

Yes

API key ID

Webhook Tools

create_webhook

Subscribe to events via webhook.

Parameter

Type

Required

Description

name

string

Yes

Webhook name

url

string

Yes

HTTPS endpoint URL

eventTypes

string[]

Yes

Events to subscribe to

secret

string

No

HMAC-SHA256 signing secret

Available event types:

  • WEBHOOK_EVENT_TYPE_CUSTOMER_CREATED

  • WEBHOOK_EVENT_TYPE_CUSTOMER_UPDATED

  • WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED

  • WEBHOOK_EVENT_TYPE_PAYMENT_CREATED

  • WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED

  • WEBHOOK_EVENT_TYPE_QUOTE_CREATED

  • WEBHOOK_EVENT_TYPE_QUOTE_EXPIRED

  • WEBHOOK_EVENT_TYPE_VA_DEPOSIT_RECEIVED

  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_COMPLETED

  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_FAILED

  • WEBHOOK_EVENT_TYPE_ALL

list_webhooks

List all webhook subscriptions. No parameters required.

delete_webhook

Delete a webhook subscription.

Parameter

Type

Required

Description

webhookId

string

Yes

Webhook subscription ID

Security

  • API keys are only read from environment variables

  • HTTPS required for API URL (enforced at startup)

  • No debug logging to stderr (would corrupt MCP STDIO transport)

  • All inputs are validated with Zod schemas

  • Request timeouts (30s) prevent hung connections

  • Automatic retries with exponential backoff for transient failures

License

MIT

Available Tools

25 tools
create_api_keyA

Create a new API key for accessing the Stables API. The secret key is only shown once on creation - save it immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesA descriptive name for this API key (e.g., 'Production Bot', 'Agent Smith')
metadataNoOptional metadata to attach to the key

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses that the secret key is only shown once and must be saved immediately, which is a critical behavioral trait. However, it does not mention other relevant behaviors such as side effects, authentication requirements, or typical response structure.

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

Conciseness5/5

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

Two sentences: the first clearly states purpose, the second provides critical behavioral information. Every word earns its place, and the description is front-loaded.

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

Completeness4/5

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

Given no output schema and a simple creation tool, the description covers the essential purpose and the one-time secret behavior. It could be improved by mentioning that the API key ID is returned or providing more context about the response, but the current information is largely sufficient for an agent to use the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema already documents both parameters adequately. The description does not add meaning beyond the schema; the note about saving the secret key is unrelated to parameter semantics. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb ('Create') and the resource ('a new API key for accessing the Stables API'). It is specific and distinguishes this tool from sibling tools like `get_api_key`, `list_api_keys`, and `revoke_api_key`.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., when to create vs. get vs. list). It only includes a note to save the secret key immediately, which is about post-creation action, not usage context.

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

create_customerA

Create a new customer in Stables for KYC verification and transfers. Use 'individual' for personal accounts or 'business' for company accounts. Include entitlements like 'base_payout' to enable transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
dobNoDate of birth in YYYY-MM-DD format (e.g., '1990-01-15')
typeNoCompany type (e.g., 'Private Company Limited by Shares')
emailNoCustomer's email address
phoneNoPhone number with country code (e.g., '+14155552671')
taxIdNoTax ID (e.g., '12-3456789')
countryNoCountry code ISO 3166-1 alpha-2 (required for businesses, e.g., 'US')
websiteNoWebsite URL
lastNameNoLast name (required for individuals)
firstNameNoFirst name (required for individuals)
middleNameNoMiddle name
acceptTermsNoAccept Stables' terms of service and privacy policy
addressCityNoCity
companyNameNoCompany name (required for businesses)
nationalityNoTwo-letter country code (e.g., 'US', 'GB')
addressLine1NoStreet address line 1
addressLine2NoStreet address line 2
addressStateNoState or region
customerTypeYesType of customer - 'individual' for personal, 'business' for companies
entitlementsNoList of entitlements to request
sourceOfFundsNoSource of funds
accountPurposeNoWhat will you use Stables for?
addressCountryNoTwo-letter country code (e.g., 'US')
incorporatedOnNoDate of incorporation in YYYY-MM-DD format
describeBusinessNoDescription of the business
legalAddressCityNoLegal address city (for businesses)
addressPostalCodeNoPostal/ZIP code
industrySelectionNoNAICS industry code (e.g., '5415')
legalAddressLine1NoLegal address line 1 (for businesses)
legalAddressLine2NoLegal address line 2 (for businesses)
legalAddressStateNoLegal address state (for businesses)
mainSourceOfFundsNoMain source of funds
externalCustomerIdNoYour own reference ID for this customer
isYourBusinessADaoNoIs your business a DAO?
registrationNumberNoBusiness registration number
accountPurposeOtherNoExplain purpose (required if accountPurpose is OTHER)
legalAddressCountryNoLegal address country code (for businesses)
conductMoneyServicesNoWhether the company conducts money services
registrationLocationNoRegistration location (e.g., state for USA)
describeMoneyServicesNoDescribe money services (required if conductMoneyServices is true)
expectedAnnualRevenueNoEstimated annual revenue in USD
legalAddressPostalCodeNoLegal address postal code (for businesses)
expectedMonthlyPaymentsNoExpected monthly payments in USD
sourceOfFundsDescriptionNoDescribe where your business funds come from
describeComplianceControlsNoDescription of compliance controls
howDidYouComeAcrossStablesNoHow did you come across Stables?
operateInProhibitedCountryNoDoes your business operate in any prohibited countries?
doesYourBusinessEngageInHighRiskActivitiesNoDoes your business engage in high risk activities?

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description only states that the tool creates a customer for KYC and transfers. It does not disclose behavioral traits such as required permissions, side effects, or return value structure. Given the absence of annotations, the description should compensate but does not.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the core purpose, followed by type guidance and entitlement example. Every sentence adds value and there is no redundancy.

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

Completeness3/5

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

The tool has 47 parameters with conditional dependencies (e.g., different required fields for individuals vs businesses). The description touches on the two types but does not provide a high-level guide for conditional requirements. No output schema exists. The description is adequate but not complete given the complexity.

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

Parameters3/5

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

The input schema has 100% coverage with descriptions for all 47 parameters. The description adds minor value by summarizing customerType options and entitlements, but most parameter meaning is already in the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool creates a new customer in Stables for KYC verification and transfers, and distinguishes between individual and business types. This provides a specific verb-resource-action with clear purpose.

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

Usage Guidelines4/5

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

The description says to use 'individual' for personal accounts or 'business' for company accounts, and mentions including entitlements like 'base_payout'. However, it does not explicitly address when not to use this tool or contrast with sibling tools like create_api_key or create_quote.

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

create_quoteA

Get a quote for currency exchange. Quotes show the exchange rate, fees, and amount the customer will receive. Quotes expire after 30 seconds. Currently supports crypto → fiat (off-ramp) with more types coming soon.

ParametersJSON Schema
NameRequiredDescriptionDefault
toCountryYesDestination country code (e.g., 'GR', 'US', 'GB')
customerIdNoThe customer ID to associate this quote with. Required if the quote will be used to create a transfer.
fromAmountYesAmount to convert (e.g., '125.75')
toCurrencyYesDestination currency code (e.g., 'EUR', 'USD', 'GBP')
fromNetworkYesBlockchain network for the source crypto
fromCurrencyYesSource cryptocurrency (USDC or USDT)
paymentMethodTypeYesPayment method for fiat payouts - 'SWIFT' for international, 'LOCAL' for domestic rails

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It mentions the temporary nature (expires in 30 seconds) and supported types. However, it does not disclose whether the tool is read-only (likely) or has side effects, nor any required permissions or auth details. Acceptable but not thorough.

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

Conciseness5/5

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

Two sentences: first defines purpose, second adds critical context (expiry and supported type). No redundant information; every sentence earns its place. Front-loaded for quick scanning.

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

Completeness3/5

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

For a tool with 7 parameters and no output schema, the description covers key aspects (purpose, scope, expiry, customer association). However, it lacks information about the response format (e.g., rate, fees breakdown) or error handling, which are important for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% with clear parameter descriptions. The tool description adds value by explaining expiry and scope but does not enhance parameter understanding beyond the schema. Baseline score is appropriate.

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

Purpose5/5

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

Description clearly states the verb 'Get a quote for currency exchange' and specifies the resource (quote) and output (exchange rate, fees, amount). It distinguishes from sibling tools like create_transfer and get_quote, 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.

Usage Guidelines4/5

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

Description provides context on expiry (30 seconds) and current scope (crypto to fiat off-ramp), guiding when to use. It implies alternatives like create_transfer (for execution) but does not explicitly state when not to use. Still, it offers useful contextual guidance.

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

create_transferA

Execute a transfer using an active quote. The quote must not be expired. This initiates the actual money movement. Bank/payment details are required for off-ramp (crypto to fiat) transfers.

ParametersJSON Schema
NameRequiredDescriptionDefault
ibanNoIBAN for the destination bank account (EU/international)
bsbCodeNoBSB code (Australia)
quoteIdYesThe quote ID to execute
bankNameNoName of the destination bank (required for off-ramp)
ifscCodeNoIFSC code (India)
metadataNoOptional metadata to attach to the transfer
sortCodeNoSort code (UK)
swiftCodeNoSWIFT/BIC code for international transfers
customerIdYesThe customer ID for this transfer
accountTypeNoType of bank account
bankCountryNoTwo-letter country code of the bank (e.g., 'AU', 'US')
bankCurrencyNoCurrency for the bank payout (e.g., 'EUR', 'USD', 'AUD')
accountNumberNoBank account number (if not using IBAN)
routingNumberNoABA routing number (US)
accountHolderNameNoBank account holder's full name (required for off-ramp)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the tool initiates actual money movement (a write operation) and requires an active quote, but does not detail error handling, rate limits, or permissions. Adequate but not thorough.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action. Every sentence adds value. No fluff or redundant information.

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

Completeness3/5

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

Given the tool complexity (15 parameters, no output schema), the description covers the main action and a key condition (quote expiration) and off-ramp requirement. However, it lacks detail on the return value or behavior when parameters are missing, which could be improved.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds context about off-ramp requiring bank details, but otherwise repeats information already in the schema. No significant additional meaning.

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

Purpose5/5

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

The description clearly states the tool executes a transfer using an active quote and initiates money movement. It distinguishes from sibling tools like create_quote by specifying it's the execution step.

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

Usage Guidelines4/5

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

The description includes the condition that the quote must not be expired and notes that bank details are required for off-ramp transfers. It provides context for when to use the tool but does not explicitly mention when not to use it or alternatives.

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

create_virtual_accountB

Create a virtual bank account for a customer to receive fiat deposits. Deposits can automatically convert to crypto and payout to a wallet.

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe customer ID to create the virtual account for
sourceCurrencyYesCurrency for the virtual account (e.g., 'USD', 'EUR', 'GBP')
destinationAddressNoCrypto wallet address for payouts
depositHandlingModeNoHow to handle deposits: 'auto_payout' converts and sends to wallet, 'hold' keeps as fiat, 'manual' requires approval
destinationCurrencyNoStablecoin to receive (default: usdc)
destinationPaymentRailNoBlockchain network for the destination wallet

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description partially discloses behavior: it mentions the automatic conversion and payout capability, which is a key behavioral trait. However, it does not cover other important aspects like permissions required, rate limits, irreversibility, or error states. The description adds some value beyond the schema but leaves significant gaps.

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

Conciseness5/5

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

The description is extremely concise: two sentences that cover the main action and a key feature (conversion/payout). It is front-loaded with the primary purpose, making it easy to scan. No wasted words.

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

Completeness2/5

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

Despite having 6 parameters and no output schema, the description is too brief. It does not explain what the tool returns (e.g., an account ID or status), does not detail the behavior of the deposit handling modes beyond the auto_payout cases, and does not mention any prerequisites (e.g., customer must exist). Significant context is missing for an agent to use this tool confidently.

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

Parameters3/5

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

Schema coverage is 100%, so each parameter is described in the schema. The description provides additional context (e.g., 'receive fiat deposits' and 'convert to crypto') that contextualizes parameters like 'sourceCurrency' and 'destinationAddress', but does not elaborate on individual parameters beyond what the schema already states. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly specifies the tool's purpose: creating a virtual bank account for receiving fiat deposits with optional automatic conversion and payout. It uses a specific verb ('create') and resource ('virtual bank account'), and implicitly distinguishes from sibling tools like 'update_virtual_account' and 'deactivate_virtual_account'.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives (e.g., when to use 'create_virtual_account' vs 'update_virtual_account'). It does not mention prerequisites, such as whether a customer must already exist, or when not to use it (e.g., if a virtual account already exists for the customer).

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

create_webhookA

Subscribe to Stables events via webhook. You'll receive POST requests to your URL when events occur.

Available event types:

  • WEBHOOK_EVENT_TYPE_CUSTOMER_CREATED

  • WEBHOOK_EVENT_TYPE_CUSTOMER_UPDATED

  • WEBHOOK_EVENT_TYPE_KYC_STATUS_CHANGED

  • WEBHOOK_EVENT_TYPE_PAYMENT_CREATED

  • WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED

  • WEBHOOK_EVENT_TYPE_QUOTE_CREATED

  • WEBHOOK_EVENT_TYPE_QUOTE_EXPIRED

  • WEBHOOK_EVENT_TYPE_VA_DEPOSIT_RECEIVED

  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_COMPLETED

  • WEBHOOK_EVENT_TYPE_VA_PAYOUT_FAILED

  • WEBHOOK_EVENT_TYPE_MONOOVA_NPP_RECEIVE_PAYMENT

  • WEBHOOK_EVENT_TYPE_MONOOVA_INBOUND_DIRECT_CREDIT

  • WEBHOOK_EVENT_TYPE_ALL

Security: Set a secret to enable HMAC-SHA256 signature verification via X-Webhook-Signature header.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe HTTPS URL to receive webhook POST requests
nameYesA descriptive name for this webhook (e.g., 'Payment Status Notifications')
secretNoOptional signing secret for HMAC-SHA256 webhook signature verification
eventTypesYesList of event types to subscribe to (e.g., ['WEBHOOK_EVENT_TYPE_PAYMENT_STATUS_CHANGED'])

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description should disclose behavioral traits. It mentions security (HMAC secret) and that POST requests will be sent, but does not describe the response format, rate limits, or any destructive implications. Basic transparency but lacks detail.

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

Conciseness5/5

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

The description is concise and front-loaded with the main purpose. It efficiently presents event types as a list and adds a security note. Every sentence is informative with no waste.

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

Completeness4/5

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

For a creation tool without an output schema, the description covers the core functionality, event types, and security. However, it lacks information about the response (e.g., webhook ID) and any idempotency or error scenarios, which would enhance completeness.

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

Parameters4/5

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

The input schema has 100% coverage, but the description adds value by listing all available event types (enum values) and explaining the security use of the secret parameter. This goes beyond the schema's descriptions.

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

Purpose5/5

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

The description clearly states the tool's purpose: subscribing to Stables events via webhook, with specific verb 'Subscribe' and resource 'webhook'. It distinguishes from sibling tools like delete_webhook and list_webhooks by focusing on creation.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus alternatives (e.g., when to create vs list webhooks). No exclusion criteria or context for choosing this tool among siblings.

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

deactivate_virtual_accountB

Deactivate a virtual account to prevent new incoming transactions

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe customer ID
virtualAccountIdYesThe virtual account ID to deactivate

TDQS

B3.1/5.0
Behavior2/5

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

Without annotations, the description must disclose all behavioral traits. It only mentions preventing new incoming transactions but does not specify if existing transactions are affected, if the action is reversible (though sibling suggests it is), or any permission requirements. This is insufficient for safe usage.

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

Conciseness4/5

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

The description is a single, clear sentence. It is front-loaded and to the point. However, for a mutation tool, it could benefit from a brief note on reversibility or side effects.

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

Completeness2/5

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

The description lacks information about the return value or confirmation of success. With no output schema, the agent does not know what to expect. Additionally, it does not mention any restrictions or prerequisites.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the schema. The tool description does not add additional semantic meaning beyond what is already provided.

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

Purpose5/5

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

The description uses a specific verb 'Deactivate' and resource 'virtual account', clearly stating the action and its purpose 'to prevent new incoming transactions'. It differentiates from sibling tools like reactivate_virtual_account and update_virtual_account.

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

Usage Guidelines2/5

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

The description lacks guidance on when to use this tool versus alternatives. It does not mention prerequisites, conditions, or situations to avoid, such as requiring the account to be active before deactivation.

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

delete_webhookA

Delete a webhook subscription. You will stop receiving events at this endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
webhookIdYesThe webhook subscription ID to delete

TDQS

A3.7/5.0
Behavior3/5

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

The description discloses that deletion stops event delivery, which is a key behavioral detail. However, it does not mention if the action is immediate or reversible, nor any authentication requirements. With no annotations, the description carries the full burden but provides only moderate transparency.

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

Conciseness5/5

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

The description is concise with two sentences, front-loading the action and consequence. No unnecessary words.

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

Completeness5/5

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

For a simple delete tool with one parameter and no output schema, the description covers purpose and effect adequately. It is complete enough for an agent to understand usage.

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

Parameters3/5

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

The input schema already fully describes the parameter (webhookId) with a description. The tool description adds no additional parameter semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Delete a webhook subscription' and explains the consequence 'You will stop receiving events at this endpoint.' This distinguishes it from sibling tools like create_webhook or list_webhooks.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, such as requiring existing webhook IDs, or when deletion is appropriate.

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

get_api_keyB

Get details about a specific API key

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyIdYesThe API key ID to look up

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states 'Get details' implying a read operation, but provides no additional behavioral context such as authentication requirements, rate limits, or what constitutes 'details'. The minimal description leaves significant gaps.

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

Conciseness4/5

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

The description is a single sentence, concise and front-loaded with the action and resource. However, it lacks additional context that would improve its utility without being overly long.

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

Completeness3/5

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

Given the low complexity (1 param, no output schema), the description is adequate but incomplete. It does not explain what 'details' are returned, leaving the agent uncertain about the tool's output. For a simple tool, this is a minor gap.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter, which already documents 'The API key ID to look up'. The description adds no additional meaning beyond what the schema provides, resulting in a baseline score of 3.

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

Purpose5/5

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

The description clearly uses the verb 'Get' and specifies the resource 'details about a specific API key'. It distinguishes from siblings like list_api_keys (listing all) and revoke_api_key (revoking), making the tool's specific retrieval purpose unambiguous.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like list_api_keys or revoke_api_key. The description implies usage when you have an API key ID, but does not state exclusions or compare with sibling tools.

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

get_customerA

Get details about a specific customer including their verification status

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe customer ID to look up

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the operation without disclosing side effects, authentication needs, or rate limits. As a read operation, it likely has no side effects, but this is implied rather than explicit.

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

Conciseness5/5

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

The description is a single sentence with no unnecessary words, effectively communicating the tool's purpose.

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

Completeness4/5

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

For a simple one-parameter tool without output schema, the description is fairly complete, though it could elaborate on the full set of returned details.

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

Parameters3/5

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

The schema covers 100% of the single parameter with a clear description. The tool description does not add extra meaning beyond the schema, but the mention of 'verification status' hints at expected output rather than parameter semantics.

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

Purpose5/5

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

The description clearly states the tool retrieves details about a specific customer, including verification status, distinguishing it from sibling tools like list_customers or update_customer.

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

Usage Guidelines3/5

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

The description implies usage for fetching a single customer's details but provides no explicit guidance on when to use it versus alternatives (e.g., list_customers) or any prerequisites.

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

get_quoteA

Get details about an existing quote including its current status

ParametersJSON Schema
NameRequiredDescriptionDefault
quoteIdYesThe quote ID to look up

TDQS

A3.7/5.0
Behavior3/5

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

No annotations provided so description carries full burden. States it gets details and status but doesn't disclose that it is read-only, or any authentication/rate limit needs. Adequate but minimal.

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

Conciseness5/5

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

Single sentence, no wasted words. Essential information presented efficiently.

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

Completeness3/5

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

Simple tool with one parameter and no output schema; description covers main purpose. However, lacks information on return structure or potential errors, which would be helpful.

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

Parameters3/5

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

Schema coverage is 100% and parameter description is clear ('The quote ID to look up'). Description adds no extra context beyond the schema.

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

Purpose5/5

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

Clearly states the tool retrieves details of an existing quote including status, with a specific verb 'get' and resource 'quote'. Distinguishes from sibling 'create_quote' which creates quotes.

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

Usage Guidelines3/5

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

Implies use for existing quotes but no explicit guidance on when to use versus alternatives like 'list_transfers' or when not to use. Sibling tools exist but no comparison.

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

get_transferA

Get the current status and details of a transfer

ParametersJSON Schema
NameRequiredDescriptionDefault
transferIdYesThe transfer ID to look up

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It only says 'get', implying read-only, but does not explicitly state that it is non-destructive, lacks side effects, or mention any authentication or rate limit considerations.

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

Conciseness5/5

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

The description is a single clear sentence with no wasted words, front-loading the purpose.

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

Completeness4/5

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

Given the low complexity (1 parameter, no nested objects, no output schema), the description adequately covers the tool's purpose and what it returns. However, it could elaborate on the specific details included in the response.

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

Parameters3/5

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

Schema coverage is 100% with the 'transferId' parameter described. The description adds minimal extra meaning by mentioning 'current status and details', hinting at the response content, but does not elaborate on parameter format or constraints beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'a transfer', specifying it retrieves 'current status and details', which distinguishes it from sibling tools like 'create_transfer' and 'list_transfers'.

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

Usage Guidelines3/5

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

The description implies usage for checking a specific transfer's status and details, but provides no explicit guidance on when to use this versus alternatives, or when not to use it.

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

get_virtual_account_historyB

Get the activity history for a virtual account (deposits, payouts, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events to return (default: 10)
eventTypeNoFilter by event type
customerIdYesThe customer ID
virtualAccountIdYesThe virtual account ID

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It only states the function without addressing side effects, authentication needs, rate limits, or data freshness. The read-only nature is implied but not explicit.

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

Conciseness4/5

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

The description is a single sentence that is concise and front-loaded with the key information. However, it is too brief and could benefit from additional structure, such as separating purpose from usage notes.

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

Completeness2/5

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

Given the absence of an output schema and the tool's role as a history endpoint, the description should explain the response format (e.g., array of events, ordering, pagination). It fails to do so, leaving the agent without critical context.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description adds no extra meaning beyond the schema; all parameter details are already in the schema's descriptions.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'activity history for a virtual account', with concrete examples like 'deposits, payouts'. This distinguishes it from sibling tools that manage accounts (e.g., create_virtual_account) or list accounts (list_virtual_accounts).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, no mention of prerequisites or common use cases. The description does not clarify that this is for retrieving history, not for querying current account state.

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

list_api_keysB

List all API keys for the current account

ParametersJSON Schema
NameRequiredDescriptionDefault
pageSizeNoNumber of keys per page
pageTokenNoToken for the next page

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided, so description bears full burden. It does not disclose pagination behavior, response format, or potential limits. Only says 'list all', which may imply a single response without pagination.

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

Conciseness4/5

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

Single sentence with no waste. However, it could be slightly expanded to mention pagination or response format without losing conciseness.

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

Completeness3/5

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

For a list tool with pagination and no output schema or annotations, the description is minimal. It does not mention that the result is a list, that it could be empty, or any authentication requirements. Adequate but with clear gaps.

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

Parameters3/5

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

Schema has 100% description coverage for both parameters. Description adds no additional meaning beyond the schema, but baseline 3 is appropriate as the schema already documents the parameters.

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

Purpose5/5

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

Description clearly states verb 'list', resource 'API keys', and scope 'for the current account'. It distinguishes from sibling tools like create_api_key, get_api_key, and revoke_api_key.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_api_key (single key) or other list tools. No context about prerequisites or when to use pagination.

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

list_customersA

List all customers for the authenticated tenant

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It does not disclose behavioral traits such as pagination, rate limits, ordering, or what happens with empty results. A simple list tool still benefits from mentioning output format or potential limits.

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

Conciseness5/5

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

A single, clear sentence with no wasted words. Front-loaded with the core purpose.

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

Completeness2/5

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

With no output schema and no behavioral details, the tool is incomplete for an agent. The description should at least indicate what is returned (e.g., an array of customers) to provide full context.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100%. Per rubric, baseline is 4 for zero parameters. The description does not need to add parameter info.

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

Purpose5/5

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

The description clearly states the action (list) and resource (customers) with the scope (for authenticated tenant). It effectively distinguishes from sibling tools like get_customer (single) and create_customer (create).

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

Usage Guidelines3/5

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

Usage is implied from the description but no explicit guidance on when to use vs alternatives or when not to use. The simple nature of the tool partially excuses the lack of detailed guidelines.

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

list_transfersB

List transfers with optional filters for status, type, or customer

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by transfer type
statusNoFilter by transfer status
pageSizeNoNumber of transfers per page (default: 20)
pageTokenNoToken for the next page of results
customerIdNoFilter by customer ID

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided. Description fails to disclose pagination (pageSize, pageToken), ordering, or read-only nature. Lacks details on potential side effects or rate limits.

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

Conciseness4/5

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

Single concise sentence, front-loaded. Slight deduction for omitting pagination mention which would improve usability.

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

Completeness2/5

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

No output schema; description should hint at return structure or pagination behavior. Missing guidance on 2 of 5 parameters (pageSize, pageToken) critical for list operations.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. Description adds 'optional' but doesn't enhance meaning beyond schema; omits pageSize and pageToken details.

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

Purpose5/5

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

Description clearly states verb 'list' and resource 'transfers', and specifies optional filters. Distinguishes from sibling tools like list_customers or list_api_keys.

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

Usage Guidelines3/5

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

Mentions optional filters but provides no guidance on when to use this tool vs alternatives (e.g., get_transfer for single transfer). No explicit when-not-to-use or prerequisites.

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

list_virtual_accountsB

List all virtual accounts for a customer

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of accounts to return
statusNoFilter by account status
customerIdYesThe customer ID to list virtual accounts for

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behavior. However, it omits details such as whether pagination is supported (despite a limit parameter), read-only nature, authorization requirements, or response structure. Only the basic action is stated.

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

Conciseness4/5

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

Single sentence is concise and front-loaded with the key action. Could potentially include more structure, but length is appropriate for a simple listing tool.

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

Completeness2/5

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

Lacks information about the response format (no output schema). Agent is left to infer that the output is a list of virtual accounts, but details like returned fields or default behavior are missing. Incomplete for a tool with no output schema and no annotations.

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

Parameters3/5

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

Schema description coverage is 100% with each parameter having a clear description in the schema. The tool description does not add additional meaning beyond the schema, but baseline score is 3 given high coverage.

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

Purpose5/5

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

Description clearly states 'List all virtual accounts for a customer', which is a specific verb+resource combination. It distinguishes from sibling tools like create_virtual_account, deactivate_virtual_account, etc., by focusing on listing rather than mutation.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like get_virtual_account_history or filtering options. No explicit when-to-use or when-not-to-use information is provided.

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

list_webhooksA

List all webhook subscriptions for the current account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses the read-only nature of the tool by using 'list'. However, it does not mention potential behavioral details such as pagination or rate limits. Given no annotations are provided, the description carries the full burden, and mentioning that it lists 'all' subscriptions is helpful.

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

Conciseness5/5

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

The description is a single sentence with no wasted words, effectively communicating the tool's purpose.

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

Completeness5/5

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

Given the tool has no parameters and no output schema, the description is complete. It unambiguously states what the tool does without requiring additional detail.

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

Parameters4/5

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

The input schema has zero parameters, so the baseline is 4. The description does not need to add parameter information, and it correctly implies no additional configuration is needed.

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

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'webhook subscriptions', and specifies the scope 'for the current account'. It effectively distinguishes from sibling tools like create_webhook and delete_webhook which have different actions.

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

Usage Guidelines4/5

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

The description clearly indicates when to use this tool (to list all webhook subscriptions). While it does not explicitly mention when not to use it or provide alternatives, the context of a simple list operation with no parameters makes this omission acceptable.

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

reactivate_virtual_accountB

Reactivate a previously deactivated virtual account

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe customer ID
virtualAccountIdYesThe virtual account ID to reactivate

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It only states the action ('reactivate'), without mentioning authorization needs, side effects, or state changes beyond the obvious.

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

Conciseness5/5

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

The description is a single, concise sentence with no unnecessary words. It effectively communicates the tool's purpose.

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

Completeness3/5

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

Given the simplicity of the tool (2 params, no output schema), the description is minimally adequate but lacks additional context such as prerequisites or effects. It does not fully compensate for missing annotations.

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

Parameters3/5

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

Schema coverage is 100% with clear parameter descriptions. The tool description adds no extra meaning beyond what the schema provides, so baseline score of 3 applies.

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

Purpose5/5

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

The description uses a specific verb ('Reactivate') and resource ('previously deactivated virtual account'), clearly distinguishing it from sibling tools like 'deactivate_virtual_account' and 'create_virtual_account'.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. It implies it is the reverse of 'deactivate_virtual_account', but provides no when-to-use or when-not-to-use instructions.

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

revoke_api_keyA

Revoke an API key. This permanently disables the key and cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyIdYesThe API key ID to revoke

TDQS

A4.1/5.0
Behavior4/5

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

The description transparently states that revocation is permanent and irreversible, which is critical for an agent to understand. However, it omits details about potential side effects (e.g., immediate termination of active sessions) or required permissions, which would be beneficial given the absence of annotations.

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

Conciseness5/5

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

The description is extremely concise with two sentences, each carrying essential information. The first sentence front-loads the action, and the second adds irreversibility without redundancy.

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

Completeness5/5

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

For a simple, one-parameter destructive tool with no output schema, the description covers the essential behavioral information (permanent revocation) and the parameter is fully described in the schema. No obvious gaps remain.

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

Parameters3/5

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

The schema provides 100% coverage with a description for the sole parameter, and the tool description adds no additional meaning beyond what the schema already states. Per guidelines, baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action 'Revoke' and the resource 'API key', and distinguishes it from related operations like create_api_key or list_api_keys 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.

Usage Guidelines3/5

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

The description implies that the tool should only be used when the key is to be permanently disabled, but it does not explicitly state when to use it versus alternatives, such as deactivating a virtual account instead, nor does it provide prerequisites like having the correct API key ID.

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

send_verification_smsA

Send a KYC verification link to a customer via SMS. Automatically fetches the customer's phone number and generates a fresh verification link. Requires TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, and TWILIO_PHONE_NUMBER environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneNoOverride phone number (with country code, e.g., '+14155552671'). If not provided, uses the customer's phone on file.
botNameNoName of the bot/assistant sending the message (default: 'your assistant')
customerIdYesThe customer ID to send the verification SMS to
verificationLinkTtlSecsNoTTL for the verification link in seconds (default: 1800)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description bears full responsibility. It discloses that it sends an SMS, fetches phone automatically, generates a link, and requires env vars. However, it does not cover error scenarios (e.g., missing phone number) or side effects beyond the SMS send.

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

Conciseness4/5

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

Two sentences efficiently convey purpose, automation, and requirements. Minor redundancy: 'fresh verification link' could be simplified, but overall concise.

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

Completeness3/5

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

The description covers main purpose and requirements but lacks mention of return value (e.g., success indication) or error handling. For a tool with no output schema, this is a moderate gap.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds context by explaining that the phone parameter is optional (auto-fetched) and that a fresh link is generated (relating to TTL). This adds meaning beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the action ('Send a KYC verification link'), the channel ('via SMS'), and the target ('to a customer'). It differentiates from sibling tools like get_verification_link, which retrieves rather than sends.

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

Usage Guidelines3/5

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

The description mentions required environment variables but lacks explicit guidance on when to use this tool versus alternatives (e.g., get_verification_link). It implies usage for sending, but no exclusions 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.

update_customerC

Update customer details, entitlements, or verification information

ParametersJSON Schema
NameRequiredDescriptionDefault
dobNoUpdated date of birth (YYYY-MM-DD)
emailNoUpdated email address
phoneNoUpdated phone number
lastNameNoUpdated last name
firstNameNoUpdated first name
customerIdYesThe customer ID to update
middleNameNoUpdated middle name
companyNameNoUpdated company name (for businesses)
nationalityNoUpdated nationality (two-letter country code)
entitlementsNoUpdated entitlements

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description must carry the burden. It only says 'Update' without disclosing whether it's a partial or full update, idempotency, authorization requirements, or side effects. The description is insufficient for a mutation tool.

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

Conciseness4/5

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

The description is a single concise sentence, front-loaded with the action and resource. While efficient, it lacks structure such as bullet points or examples that could improve readability.

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

Completeness2/5

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

The tool has 10 parameters and no output schema or annotations. The description fails to explain return values, error states, or whether updating omitted fields clears them. It is incomplete for a tool of this complexity.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already describes all parameters. The description adds no additional meaning beyond grouping into categories. Baseline 3 is appropriate as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool updates customer details, entitlements, or verification information, with a clear verb and resource. However, it does not differentiate from sibling tool 'update_customer_metadata' which likely covers a subset.

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

Usage Guidelines2/5

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 like 'update_customer_metadata' or 'create_customer'. The description lacks context about prerequisites or typical use cases.

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

update_customer_metadataC

Update customer metadata key-value pairs

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataYesMetadata key-value pairs to set
customerIdYesThe customer ID to update metadata for

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It only states 'Update' but does not describe whether existing metadata is merged or replaced, whether the operation is idempotent, or any constraints on keys/values. This is insufficient for a mutating tool.

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

Conciseness3/5

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

The description is a single sentence, which is concise but too minimal. It lacks critical details about behavior and usage, making it under-specified rather than efficiently brief.

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

Completeness2/5

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

Given the tool has 2 parameters (one nested object) and no output schema or annotations, the description is incomplete. It fails to explain merge behavior, response format, or error conditions, leaving significant gaps for an agent.

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

Parameters3/5

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

Schema description coverage is 100% – both parameters have descriptions. The tool description ('metadata key-value pairs') adds no additional meaning beyond the schema's 'Metadata key-value pairs to set'. Baseline score of 3 is appropriate as no extra value is provided.

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

Purpose4/5

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

The description 'Update customer metadata key-value pairs' clearly states the action (update) and the resource (customer metadata). It distinguishes this tool from the sibling 'update_customer' which likely updates other customer fields. However, it could be more explicit about the scope.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'update_customer'. There is no mention of prerequisites, when-not to use, or context for appropriate use.

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

update_virtual_accountC

Update virtual account settings (e.g., deposit handling mode)

ParametersJSON Schema
NameRequiredDescriptionDefault
customerIdYesThe customer ID
virtualAccountIdYesThe virtual account ID to update
depositHandlingModeYesNew deposit handling mode

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, and the description only says 'update' with no details on idempotency, required permissions, or side effects, leaving the agent underinformed about behavioral traits.

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

Conciseness4/5

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

Single sentence is concise and front-loaded with the essential action and example, but could be slightly more informative without losing conciseness.

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

Completeness2/5

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

Given no output schema and the presence of related sibling tools, the description omits return behavior, error conditions, and prerequisites, making it incomplete for an update operation.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already documented. The description adds marginal value by mentioning 'deposit handling mode' as an example, but does not elaborate on other potential settings.

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

Purpose4/5

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

The description clearly states the tool updates virtual account settings with an example (deposit handling mode), distinguishing it from create, deactivate, and other sibling tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like create_virtual_account or deactivate_virtual_account; lacks context for appropriate usage.

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

Tool Schema Changelog

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

  1. 25 tool updatesv1.4.0
    • First observedcreate_api_key
    • First observedcreate_customer
    • First observedcreate_quote
    • First observedcreate_transfer
    • First observedcreate_virtual_account
    • First observedcreate_webhook
    • First observeddeactivate_virtual_account
    • First observeddelete_webhook
    • First observedget_api_key
    • First observedget_customer
    • First observedget_quote
    • First observedget_transfer
    • First observedget_verification_link
    • First observedget_virtual_account_history
    • First observedlist_api_keys
    • First observedlist_customers
    • First observedlist_transfers
    • First observedlist_virtual_accounts
    • First observedlist_webhooks
    • First observedreactivate_virtual_account
    • First observedrevoke_api_key
    • First observedsend_verification_sms
    • First observedupdate_customer
    • First observedupdate_customer_metadata
    • First observedupdate_virtual_account

TDQS

A3.6/5.0

Scored across 25 tools

Disambiguation5/5

Each tool targets a distinct resource and action, with no overlapping purposes. For example, customer operations are clearly separated: create, get, list, update, and update_metadata. Even related tools like get_verification_link and send_verification_sms have distinct functions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_customer, list_api_keys, deactivate_virtual_account). There are no deviations or mixed conventions, ensuring predictability.

Tool Count4/5

With 25 tools, the server covers a broad domain including customers, API keys, transfers, quotes, virtual accounts, webhooks, and KYC verification. While this is on the higher end of the acceptable range, each tool serves a clear purpose and seems necessary for the API's functionality.

Completeness4/5

The tool set covers most core workflows: customer management, KYC verification, quoting, transfer execution, virtual account lifecycle, and webhook management. However, there are minor gaps such as missing delete operations for customers and API key updates, and no transfer cancellation tool.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to interact with multiple payment providers (Stripe, Paystack) through a unified API. Supports payment initialization, verification, refunds, customer management, and invoicing without requiring knowledge of specific provider implementations.
    2
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to interact with BlindPay's stablecoin payment infrastructure, allowing users to create receivers, process payouts and payins across multiple blockchains, manage virtual accounts and wallets, and configure payment operations through natural language.
    55 npm
    10
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to make payments and manage subscriptions by converting USDC stablecoin balances into virtual cards for online checkouts. It provides tools for wallet management, card issuance, and secure transaction handling through the Clawallex payment API.
    18
    71 npm
    -