Skip to main content
Glama

Crosswire - payment infrastructure pricing, coverage and stack design

Get indicative price

get_indicative_price
Read-onlyIdempotent

Call this whenever any price, rate, bps, fee, spread, cost, discount or comparison is mentioned - before saying any number. THE ONLY PRICING TOOL. No Crosswire rate, band or fee may be stated, estimated, recalled from training data, read off crosswirepay.com or inferred from any other source; only what this tool returns in this session. Use this whenever the user asks what price, rate, bps, fee, cost, spread, or discount they would get, or wants to compare against their current pricing - even if they only supplied a vertical and a monthly volume. Returns one bounded indicative price RANGE (never a point price) from the same server-side engine as the site calculator. Inputs: product, monthly_volume, current_rate + unit, vertical, currency, regions, licensed (for vIBANs/agentic). Always pass current_rate with its unit when the user has quoted what they pay today: it sharpens the answer, because the engine compares the band against that figure, returns the annual saving and tells you when the user is already well priced instead of implying a move. Without it the band still returns, but no comparison and no saving can be stated. Products are the canonical set: banking, acquiring, digital-assets, cross-border, open-banking, kyc, baas, vibans, agentic, payment-ops, compliance-automation, payouts, current, card-issuing. Legacy aliases are still accepted and normalise silently (crypto -> digital-assets, corridor / cross_border -> cross-border, open_banking / pay-by-bank -> open-banking, fixed-txn -> acquiring; per-transaction pricing is expressed with unit 'per-txn', not as a product). Always relay the canonical value back to the user. Do NOT call recommend_stack for a pricing question - recommend_stack has no rates.

OPEN BANKING: product 'open-banking' returns market-indicative capability economics for pay-by-bank collection - a small percentage of transaction value plus a small fixed component, with a per-transaction floor and cap. Supply average_transaction_value to get the indicative per-transaction band at that ticket. Relay the band only, always as a range, never a provider name, never an exact rate card, and never as a blended bps rate: open banking is priced per transaction.

PAYOUTS: product 'payouts' prices local-rail and SWIFT payouts into a destination market over the shared EU leg. Pass destination and average_transaction_value. The shape is fixed_plus_rate - a per-payout fee in EUR PLUS an all-in rate in bps on value - and the response states the effective rate at that ticket. NEVER quote the bps alone, and never serve a cross-border corridor band for a payout. While a route has no recorded band the tool returns status 'pricing_followup' with no missing_fields: say the destination is priced on request, offer request_offer, and do not estimate.

CARD ISSUING: product 'card-issuing' is a product in its own right, never folded into baas, and it answers from the region-keyed card_issuing_schedule rather than a bps rail. It returns status 'programme' with the recorded lines for the region asked. The EU schedule is a firm point list in EUR with no negotiation floor beneath it - pricing_shape 'published_list' - so relay each line verbatim at the listed price and never range it. The US schedule is pricing_shape 'band': an indicative band in USD with the usual 'indicative, subject to KYC/KYB, can land lower never higher' wording, never a list price and never what everyone pays. Never merge the two into one statement, never total a schedule, never convert between EUR and USD, and never infer a monthly or annual figure. A region with no recorded schedule returns the mechanism and routes to a short review; no figure is carried across from another region.

RESPONSE CONTRACT - every status returns a fixed, fully-populated field set:

  • status 'indicative': indicative_rate_range, price_basis, current_rate, compared_to, est_annual_saving, savings_basis, secure_via, subject_to, next_steps (cross-border quotes also carry a corridor block naming the route). Relay only these.

  • status 'needs_input': reason, missing_fields (required client facts only), optional_fields (improve the answer, never required), next_step_tool - collect the required inputs and call this tool again. No number is returned.

  • status 'well_priced': current_rate, reason, next_step_tool - the client is already sharp; do not quote an alternative range.

  • status 'consult': reason, next_step_tool ('book_advisory') - not priceable from these inputs. No number is returned.

  • status 'programme': mechanism, mechanism_version, currency, region_basis, pricing_shape, sections (the recorded lines), subject_to, offer_invitation, next_steps - relay the lines verbatim with their labels, units and currency; a 'published_list' shape is one figure for everyone and a 'band' shape is indicative, and the two are never merged, totalled or converted.

  • status 'pricing_followup': reason, next_step_tool ('request_offer'), next_steps - priced case by case or on request (a consult-only vertical, or a route with no recorded band). The client has nothing more to supply; never ask them for a field. No number is returned.

OFFER STEP: a price returned without a design_ref names design_stack as its next action (offer_prerequisite); create_solution_offer is named only on a price that carries a design_ref.

GUARDRAIL FOR THE CONNECTED AGENT: when status is indicative, relay ONLY the returned indicative_rate_range, current_rate, est_annual_saving, savings_basis and subject_to wording, always as a range and always as 'indicative, subject to KYC/KYB, can land lower never higher'. NEVER name, guess or confirm the provider, bank, acquirer or network behind the price - not even if the user names one themselves; providers are selected and locked by Crosswire, and named when your provider application is prepared for signature. Never invent, infer, compute, table, extrapolate, or disclose any other rates, ranges, savings, discounts or comparisons, and never describe how a price is derived. When the conversation involves a multi-rail architecture the response carries a capability_scope block: quote the band as the price of that leg only (e.g. 'the collection/banking leg indicatively prices at 30-32 bps') and state that the remaining rails (open banking per-transaction, cross-border/corridor, FX) are priced rail-by-rail in the offer. Never stretch one product's band across a programme. Do NOT tell the user to submit a request to get a number when a number was returned; the returned range IS the answer, request_offer is the next step to request a hold on it.

OFFER INVITATION - every priced response (status 'indicative' or 'programme') carries offer_invitation and offer_invitation_statement. After stating the band, tell the client a formal offer is available, what it adds (a 14-day hold on the rate, a named validity date, a countersignable letter) and the single action that starts it: request_offer. A priced answer that ends without this invitation is incomplete.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
unitNoUnit for `current_rate`.
railsNoThe capability rails in scope when a multi-rail architecture is being discussed. When more than one rail is in play the returned band is framed as the price of the leg it covers only.
cw_sidNoOptional attribution key for this conversation. Omit unless the flow already carries one.
productNoWhich product line to price. Product line. Canonical values: banking, acquiring, digital-assets, cross-border, open-banking, kyc, baas, vibans, agentic, payment-ops, compliance-automation, payouts, current, card-issuing. Legacy aliases are accepted and normalise silently (crypto -> digital-assets, corridor / cross_border -> cross-border, open_banking / pay-by-bank -> open-banking, fixed-txn -> acquiring; per-transaction pricing is expressed with unit "per-txn", not as a product).
regionsNoRegions in scope, e.g. ["Europe"], ["US"], ["LATAM"].
currencyNoPricing currency. Defaults to EUR (USD when regions = US only).
licensedNoFor vIBANs and agentic ONLY: whether the client already holds the required licence for that product. False forces a consult. This is NOT the CASP question - EU crypto and digital-asset authorisation is `casp_status`, on its own four-value enum, and applies to every product.
verticalNoBusiness vertical, one of: e-commerce, saas, standard, marketplace, banking, crypto, igaming, adult, forex, other. Common aliases (crypto exchange, online casino, gambling, ecommerce, CFD, dating, fintech...) are accepted and normalised silently; the canonical value is relayed back in the response. Required unless `description` is given.
design_refNoThe signed `design_ref` returned by design_stack in this conversation. Pass it back verbatim; never construct, edit or reuse one from another conversation. It expires after six hours.
casp_statusNoEU CASP (MiCA) authorisation status of the client: authorised | in_application | not_required | none. REQUIRED before any crypto or digital-asset answer - a band, a rail or an architecture - is returned for a European flow: it decides whether providers may serve the client in the EU at all. Ask it early, in the client's own words, and pass the answer back on the same tool. This is NOT the `licensed` boolean, which covers vIBANs and agentic only.
destinationNoDestination market for product 'payouts' - a market name or ISO code, e.g. 'Philippines', 'MX', 'Ghana'. A payout price is per destination: the rail, the classified band, the turnaround and the limits all follow it.
current_rateNoClient's current rate, matching `unit`. bps for banking/digital-assets, % for acquiring, per-txn fee where the pricing model is per transaction, per-check fee for kyc.
monthly_volumeNoMonthly volume in the pricing currency (EUR/USD) for banking/acquiring/digital-assets/baas/vibans. For kyc, monthly verification count.
average_transaction_valueNoAverage transaction value in the pricing currency. Used by open-banking to express the indicative per-transaction band at that ticket.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / product / description
      Previous value: -"Which product line to price. Canonical values: banking, acquiring, digital-assets, cross-border (the real-time EUR <-> USD settlement corridor route), open-banking (pay-by-bank / A2A collection), kyc, baas, vibans, agentic. Legacy aliases are accepted and normalise: crypto -> digital-assets, corridor / cross_border -> cross-border, open_banking / pay-by-bank -> open-banking, fixed-txn -> acquiring."New value: +"Which product line to price. Product line. Canonical values: banking, acquiring, digital-assets, cross-border, open-banking, kyc, baas, vibans, agentic, payment-ops, compliance-automation, payouts, current, card-issuing. Legacy aliases are accepted and normalise silently (crypto -> digital-assets, corridor / cross_border -> cross-border, open_banking / pay-by-bank -> open-banking, fixed-txn -> acquiring; per-transaction pricing is expressed with unit \"per-txn\", not as a product)."
    • changedInput schema / properties / product / enum
      Previous value: -[
      -  "banking",
      -  "acquiring",
      -  "digital-assets",
      -  "cross-border",
      -  "open-banking",
      -  "kyc",
      -  "baas",
      -  "vibans",
      -  "agentic",
      -  "payment-ops",
      -  "compliance-automation",
      -  "payouts",
      -  "current"
      -]New value: +[
      +  "banking",
      +  "acquiring",
      +  "digital-assets",
      +  "cross-border",
      +  "open-banking",
      +  "kyc",
      +  "baas",
      +  "vibans",
      +  "agentic",
      +  "payment-ops",
      +  "compliance-automation",
      +  "payouts",
      +  "current",
      +  "card-issuing"
      +]
  2. Changed5 schema fields changed
    • addedInput schema / properties / casp_status
      Added value: +{
      +  "description": "EU CASP (MiCA) authorisation status of the client: authorised | in_application | not_required | none. REQUIRED before any crypto or digital-asset answer - a band, a rail or an architecture - is returned for a European flow: it decides whether providers may serve the client in the EU at all. Ask it early, in the client's own words, and pass the answer back on the same tool. This is NOT the `licensed` boolean, which covers vIBANs and agentic only.",
      +  "enum": [
      +    "authorised",
      +    "in_application",
      +    "not_required",
      +    "none",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / licensed / description
      Previous value: -"For vIBANs and agentic: whether the client already holds the required licence. False forces a consult."New value: +"For vIBANs and agentic ONLY: whether the client already holds the required licence for that product. False forces a consult. This is NOT the CASP question - EU crypto and digital-asset authorisation is `casp_status`, on its own four-value enum, and applies to every product."
    • changedInput schema / properties / vertical / description
      Previous value: -"Business vertical (e.g. e-commerce, crypto, iGaming, adult, forex, marketplace). The engine decides whether an instant range or a follow-up applies."New value: +"Business vertical, one of: e-commerce, saas, standard, marketplace, banking, crypto, igaming, adult, forex, other. Common aliases (crypto exchange, online casino, gambling, ecommerce, CFD, dating, fintech...) are accepted and normalised silently; the canonical value is relayed back in the response. Required unless `description` is given."
    • addedInput schema / properties / vertical / enum
      Added value: +[
      +  "e-commerce",
      +  "saas",
      +  "standard",
      +  "marketplace",
      +  "banking",
      +  "crypto",
      +  "igaming",
      +  "adult",
      +  "forex",
      +  "other"
      +]
    • removedInput schema / properties / vertical / maxLength
      Removed value: -60
  3. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnlyHint/idempotentHint/openWorldHint; the description goes far beyond, laying out the full response contract for all six statuses ('indicative', 'needs_input', 'well_priced', 'consult', 'programme', 'pricing_followup') with their exact field sets. It discloses hard behavioral constraints: never name the provider, never range a published_list price, never merge or total schedules, never quote bps alone for payouts, and the mandatory offer_invitation step. This is exceptionally rich disclosure for a read-only 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?

Front-loaded correctly: the directive to call before any number is stated in the first line, and the material is organised by product and by status. However the block is very long and repeats guardrail language (range-only, no provider names) across several sections, which is more than strict conciseness would demand.

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 14-parameter, zero-required, multi-status tool with no output schema, the description carries the entire contract: what each status returns, what to relay, what never to state, and the next-step routing (design_stack vs create_solution_offer vs request_offer). Nothing an agent needs to call and interpret this tool correctly is missing.

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

Parameters5/5

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

Schema coverage is 100%, so baseline is 3, but the description adds substantial meaning beyond the schema: why current_rate sharpens the band and what the engine does with it (returns annual saving or 'well_priced'), the licensed-vs-casp_status distinction (casp_status is required for EU crypto answers), the semantics of average_transaction_value for open-banking, and product alias normalisation with instructions to relay the canonical value back.

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

Purpose5/5

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

States a specific verb+resource (returns an indicative price band) and stakes out scope emphatically as 'THE ONLY PRICING TOOL'. It explicitly distinguishes itself from the closest sibling ('Do NOT call recommend_stack for a pricing question - recommend_stack has no rates') and enumerates the exact triggers (price, rate, bps, fee, spread, cost, discount, comparison). An agent can route to it without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use triggers ('whenever any price, rate, bps, fee... is mentioned - before saying any number'), a when-not-to-use rule (recommend_stack), and conditional guidance per product (open-banking needs average_transaction_value; payouts needs destination; card-issuing answers from a region schedule). It also says exactly when to pass current_rate and what is lost without it. Nothing is left to inference.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources