Skip to main content
Glama
stables-money

Stables MCP Server

Official

create_quote

Generate a short-lived currency exchange quote with rates, fees, and payout amount for stablecoin-to-fiat off-ramp or fiat-to-stablecoin on-ramp transfers. Set preview to estimate without committing.

Instructions

Get a quote for a currency exchange: the rate, the fees, and what the customer receives. Quotes are short-lived, so create one immediately before the transfer. Off-ramp converts a stablecoin to fiat (source network required, destination country required); on-ramp converts fiat to a stablecoin (destination address required). Set preview to price without committing.

Input Schema

NameRequiredDescriptionDefault
previewNoPrice the quote without persisting it, to show an estimate
metadataNoOptional metadata
sourceAmountYesAmount to convert, in major units (e.g. '125.75')
sourceNetworkNoBlockchain network of the source. Required for off-ramp, omitted for on-ramp
sourceCurrencyYesSource currency: a stablecoin for off-ramp (e.g. 'USDT'), fiat for on-ramp
destinationAddressNoDestination wallet address. Required for on-ramp
destinationCountryNoDestination country, ISO 2-letter. Required for off-ramp
destinationNetworkNoOff-ramp: payment network, 'swift' or 'bank'. On-ramp: blockchain network. Replaces the old paymentMethodType
destinationCurrencyYesDestination currency: fiat for off-ramp (e.g. 'EUR'), a stablecoin for on-ramp

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed17 schema fields changedv2.4.0
    • removedInput schema / properties / customerId
      Removed value: -{
      -  "description": "The customer ID to associate this quote with. Required if the quote will be used to create a transfer.",
      -  "type": "string"
      -}
    • addedInput schema / properties / destinationAddress
      Added value: +{
      +  "description": "Destination wallet address. Required for on-ramp",
      +  "type": "string"
      +}
    • addedInput schema / properties / destinationCountry
      Added value: +{
      +  "description": "Destination country, ISO 2-letter. Required for off-ramp",
      +  "type": "string"
      +}
    • addedInput schema / properties / destinationCurrency
      Added value: +{
      +  "description": "Destination currency: fiat for off-ramp (e.g. 'EUR'), a stablecoin for on-ramp",
      +  "type": "string"
      +}
    • addedInput schema / properties / destinationNetwork
      Added value: +{
      +  "description": "Off-ramp: payment network, 'swift' or 'bank'. On-ramp: blockchain network. Replaces the old paymentMethodType",
      +  "type": "string"
      +}
    • removedInput schema / properties / fromAmount
      Removed value: -{
      -  "description": "Amount to convert (e.g., '125.75')",
      -  "type": "string"
      -}
    • removedInput schema / properties / fromCurrency
      Removed value: -{
      -  "description": "Source cryptocurrency (USDC or USDT)",
      -  "enum": [
      -    "USDC",
      -    "USDT"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / fromNetwork
      Removed value: -{
      -  "description": "Blockchain network for the source crypto",
      -  "enum": [
      -    "ethereum",
      -    "polygon"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / metadata
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Optional metadata",
      +  "type": "object"
      +}
    • removedInput schema / properties / paymentMethodType
      Removed value: -{
      -  "description": "Payment method for fiat payouts - 'SWIFT' for international, 'LOCAL' for domestic rails",
      -  "enum": [
      -    "SWIFT",
      -    "LOCAL"
      -  ],
      -  "type": "string"
      -}
    • addedInput schema / properties / preview
      Added value: +{
      +  "description": "Price the quote without persisting it, to show an estimate",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / sourceAmount
      Added value: +{
      +  "description": "Amount to convert, in major units (e.g. '125.75')",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceCurrency
      Added value: +{
      +  "description": "Source currency: a stablecoin for off-ramp (e.g. 'USDT'), fiat for on-ramp",
      +  "type": "string"
      +}
    • addedInput schema / properties / sourceNetwork
      Added value: +{
      +  "description": "Blockchain network of the source. Required for off-ramp, omitted for on-ramp",
      +  "enum": [
      +    "arbitrum",
      +    "avalanche",
      +    "base",
      +    "ethereum",
      +    "optimism",
      +    "polygon",
      +    "solana",
      +    "tron"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / toCountry
      Removed value: -{
      -  "description": "Destination country code (e.g., 'GR', 'US', 'GB')",
      -  "type": "string"
      -}
    • removedInput schema / properties / toCurrency
      Removed value: -{
      -  "description": "Destination currency code (e.g., 'EUR', 'USD', 'GBP')",
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "fromCurrency",
      -  "fromAmount",
      -  "fromNetwork",
      -  "toCurrency",
      -  "toCountry",
      -  "paymentMethodType"
      -]New value: +[
      +  "sourceCurrency",
      +  "sourceAmount",
      +  "destinationCurrency"
      +]
  2. First observedv1.4.0

TDQS

A4.1/5.0
Behavior4/5

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

No annotations are present, so the description carries the full behavioral burden and does disclose meaningful traits: quotes expire, preview prices 'without committing', and the off-ramp/on-ramp requirements differ. It omits the expiry window, whether a non-preview call persists an artifact, auth/permission needs, and error behavior, which leaves gaps for an unannotated creation tool.

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

Conciseness5/5

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

Four sentences that are front-loaded with purpose, then timing, then mode conditions, then the preview flag. Every sentence earns its place and no phrasing is wasted.

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

Completeness4/5

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

With no annotations and no output schema, the description needs to carry the operational context, and it covers purpose, lifetime, mode requirements and the preview distinction adequately. The remaining gaps (expiry duration, what a persisted quote returns, failure modes) are minor for a 100%-covered schema but keep it short of complete.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value by synthesizing the cross-parameter conditional logic (source network and destination country for off-ramp; destination address for on-ramp) into a single readable rule rather than leaving the agent to reconcile scattered per-field notes. It does not add format details beyond the schema.

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

Purpose4/5

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

States a specific resource ('a quote for a currency exchange') and enumerates what it produces (rate, fees, what the customer receives), so the agent knows exactly what it gets. It implicitly separates itself from the get_quote sibling via 'create one immediately before the transfer', but never names that sibling explicitly, so full differentiation credit is withheld.

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

Usage Guidelines4/5

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

Gives clear when-to-use context ('create one immediately before the transfer' because quotes are short-lived) and branches by mode, spelling out what each of off-ramp vs on-ramp requires. It stops short of naming alternatives (e.g. get_quote for retrieving an existing quote) or stating when not to call it.

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