Skip to main content
Glama

transfer_cost

BETA. Estimate what a cross-border payment will COST, split by WHO PAYS: the sending bank's published fee (the sender's side), what correspondents deduct in transit and what the beneficiary's own bank charges to credit it (the beneficiary's side), and what actually lands.

This estimator is in BETA. Present every number as a typical case and a high case, never as a quote, and never let a user commit to a contractual amount on it. The payload carries beta=true while this holds.

HOW TO READ THE ANSWER (relay these honestly):

  • answered=false means we REFUSED. The most common reason is that we hold no published tariff rule for the sending bank, in which case there is deliberately no total and no "recipient receives" figure. Say we do not know what that bank charges. Do NOT add up the parts yourself and present a total: treating the unknown fee as zero is the exact defect this tool was built to remove.

  • The correspondent fee is a RANGE (p50 typical, p90 high case), not a point. The spread is real: SWIFT tracking never reveals whether a payment was sent OUR, SHA or BEN, so a single cohort mixes all three.

  • THREE FEES, THREE DIFFERENT PAYERS, AND THEY ARE NOT INTERCHANGEABLE. sending_fee is billed to the SENDER by their own bank. correspondent_fee comes out of the payment in transit, so the BENEFICIARY bears it. beneficiary_fee is what the RECEIVING bank charges its own customer to credit the payment, so the beneficiary bears that too - and it is frequently the largest of the three (measured 2026-08-22 on one live corridor: 35.26 USD of sender-side cost against a 245.68 USD beneficiary bank fee). Never quote one of them as "the cost", and never call the beneficiary bank's fee a correspondent charge. total is the sending fee plus the transit deduction; total_both_sides adds the beneficiary bank's fee and is the all-in figure.

  • WHERE EACH NUMBER COMES FROM. The correspondent fee is OBSERVED, from payments we have tracked. beneficiary_fee.source is tariff (or tariff_fallback, see below) and never observed: a beneficiary bank deducts after the last bank that reports to GPI, so no tracking data can see it, and we read it off that bank's published incoming tariff instead. Say which is which when the user leans on a figure.

  • beneficiary_fee.known=false means WE HOLD NO INCOMING TARIFF for that bank (we hold one for roughly two thirds of beneficiary banks). Its charge is then missing from every figure, total_both_sides is null, and recipient_receives.typical is an UPPER BOUND - recipient_receives.beneficiary_fee_known says so. Do not fill that gap with a zero, a guess or a typical figure; say the receiving bank's own charge is not included and point the user at that bank's tariff.

  • beneficiary_fee.applies=false under OUR / OUR-OUR: the instruction says the sender covers every downstream charge, so the bank claims it back rather than taking it off the credit. The figure is reported but NOT subtracted. Our data ends before the account is credited, so we can neither confirm nor refute that it was honoured on a given payment.

  • beneficiary_fee.segment says which of the bank's incoming price lists was read. segment_fallback=true means the account type asked for had no usable schedule so the other one answered - which can only happen when beneficiary_segment was NOT supplied, i.e. when we were assuming the beneficiary matches the sender. Say that you assumed it.

  • beneficiary_fee.reason='other_segment_only' means you DID supply beneficiary_segment, and that bank publishes an incoming tariff for the other account type only (beneficiary_fee.other_segment names it). We decline to quote it. Do NOT report this as "we hold no tariff for that bank": we hold one, for a different kind of account. Tell the user which, because it is often the useful half of the answer.

  • basis.n is how many observed payments back the correspondent figure and confidence reflects it. At "low", present the range as rough.

  • basis.level says how specific the evidence is: corridor is this correspondent into this destination country, correspondent is that bank overall, and currency or global mean we hold nothing specific and are quoting a pool. Say so when it is a pool.

  • ON A REFUSAL basis IS NULL, and the same two figures are still on each entry of correspondent_fee.legs[] as level and n. Read them there. Do not read a missing basis as corridor-specific evidence: on a measured DE->AM screen the legs said level: "currency", n: 146, a currency-wide pool, and the answer described it as a single well-priced hop because the top-level key was absent.

  • assumptions is a list of plain sentences explaining what shaped the number (SEPA, OUR honoured, PSD2, a modelled BEN uplift, a stale tariff). Relay the ones that matter to the user's question.

  • under OUR the correspondent leg carries our_breach: the measured share of OUR payments that lose a charge in transit anyway, and what that costs. p50 is 0 and p90 is that loss. Quote BOTH - "the beneficiary should receive the full amount, and in about 7% of the OUR payments we can follow end to end they do not" - never the p50 alone as a promise.

  • chain.status = no_chain means the pair settles on local rails (SEPA, domestic, same banking group) with NO correspondent deduction at all.

IMPORTANT ON CHARGE TYPE: charge_type is an INPUT and is never inferred from tracking. OUR is a real instruction and usually holds - of 150 payments whose own MT103 declared OUR and which we could follow from the instructed amount to the settled one, 139 reached the beneficiary intact, against 6 of 52 under SHA. It is NOT a guarantee: the other 11 lost a flat correspondent charge in transit, and we find no evidence that this depends on the destination country or on a US correspondent being in the chain, so do not tell a user that OUR is safe everywhere except the US. BEN is materially more expensive than SHA and our high case models it rather than measuring it. If the user has not said which they will use, ask, or state which one you assumed.

Pass beneficiary_bic whenever the user knows the receiving bank: without it there is no correspondent chain to price and no beneficiary bank to read a tariff from, so the answer is the sending fee alone and no total.

customer_segment selects which side of the SENDING bank's published price list is read. It is not cosmetic: of 30 banks publishing both schedules, 9 of the 17 that answered on both quote a different fee, one of them 220 PLN for a company against free for a person. It defaults to individual here; pass business when the payer is a company, and say which you assumed.

beneficiary_segment does the same for the RECEIVING side, which is a different bank's price list and not a restatement of the sender's. Of 120 banks publishing both schedules, 28 quote a different incoming fee (measured 2026-08-24), and it runs both ways: Hipotekarna banka (HBBAMEPG) credits a 100,000 EUR payment free of charge to a company and takes 0.1% of it from a person, while Nordea charges a person 60 SEK and a company 250. Omit it and we assume the beneficiary matches the sender, which is what this tool did before 2026-08-24 - so if you omit it, say you assumed it. Supply it when the user has told you who is being paid, and prefer asking over guessing when the amount makes the difference material.

Available to any caller with an active subscription. The estimate itself costs no credits (tracking a payment does cost credits; never describe tracking as free).

Args: bank_swift: Sending bank BIC (8 or 11 chars) amount: Transfer amount currency: 3-letter transfer currency charge_type: SHA (default), OUR or BEN. Ask the user rather than guessing beneficiary_bic: Receiving bank BIC; needed for a total channel: online | branch | mobile_app | any customer_segment: individual | business | financial_institution - the SENDER beneficiary_segment: individual | business | financial_institution - the party being PAID. Omitted, it mirrors customer_segment customer_sub_segment: standard | premium | private_banking | vip api_key: Optional API key (internal calls ride the MCP secret)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
amountYes
api_keyNo
channelNo
currencyYes
bank_swiftYes
charge_typeNoSHA
beneficiary_bicNo
customer_segmentNo
beneficiary_segmentNo
customer_sub_segmentNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, and it goes far beyond a simple summary. It explains refusal semantics, what happens when beneficiary_fee.known=false, the OUR-breach caveat, why correspondent fees are ranges, and that the estimator is BETA with beta=true in the payload. It even warns against common misuse patterns like adding missing fees as zero, which is exactly the kind of behavioral transparency an agent needs.

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

Conciseness4/5

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

The description is long but well-organized with headers and bullets, and most sentences carry real operational value. There is some redundancy (BETA is stated twice, and 'never a quote' is repeated in different forms) and the examples are detailed, but given the tool's complexity and the absence of annotations, the length is largely justified. It is structured well, with the core summary front-loaded and detailed behavioral notes following.

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?

The description addresses nearly every situation an agent will encounter: refusals, missing tariffs, observed vs. tariff sources, charge type behavior, assumptions, segment fallbacks, OUR breach, and corridor-level basis. It also covers operational context like credit costs and the BETA flag. With an output schema present and no annotations, this description is unusually complete 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.

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does. The Args section explains all 10 parameters, including BIC formats, charge_type options, the meaning of beneficiary_segment, and the default behavior when it is omitted. It adds substantial meaning beyond the bare schema by explaining why each parameter matters and what the consequences of omitting it are.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Estimate what a cross-border payment will COST, split by WHO PAYS.' It names the three fee components and the recipient-receives figure, so an agent immediately knows what the tool does. This also distinguishes it from sibling tools like fx_rate or track_payment, which cover related but different concerns.

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 gives strong contextual guidance: pass beneficiary_bic when known, ask the user for charge_type, only use this for cross-border payment cost estimation, and never use it as a contractual quote. It does not explicitly name sibling tools as alternatives or state when NOT to use this tool instead of another, so it stops one short of a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.3/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlapping areas (goods_classify vs hs_code_lookup vs eccn_lookup; fx_rate vs fx_rate_history vs fx_volatility) require close reading of descriptions to select correctly. The detailed descriptions help, but the shear number of lookup tools creates mild ambiguity.

Naming Consistency3/5

Names mix verb-first (track_payment, mcp_verify) and noun-first patterns (iban_validate, fx_rate, ssi_lookup), with some phrase-like names (banks_using_correspondent, is_business_day_check). While readable, there is no single consistent convention.

Tool Count3/5

33 tools is heavy, but the server's broad scope (payments, FX, sanctions, export controls, company registries, SWIFT) justifies most of them. A few marginal tools (mcp_register, mcp_verify, company_search_result) add bulk without core value.

Completeness5/5

The tool set covers the payment lifecycle end-to-end: tracking, settlement, FX, compliance, sanctions, and company due diligence. There are no obvious dead ends; the tools chain together via next_steps and search_id flows.

Resources