Skip to content

CurrencyGuard Guard Pricing

by currencyguard.com · remote · no sign-in to list tools · v1.0.0 · published by com.currencyguard

FX protection for SMEs — price Guards, live spot/forward rates, settlement dates, and more.

Changes · 3

11 tools: 3 change things and 8 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http guard-pricing https://api.currencyguard.com/mcp

Findings

Matches of fixed checks, with the text they matched.

2 info
  • The description is 3,345 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...ider, who sets the final rate and fee. Say that reason when you say "indicative"."

    What this check looks for
  • The description is 2,499 characters long, over the 2,000 this check looks for.

    Matched text

    description ends: "...g a year: confirm with the user and call again. Spec: docs/specs/net_exposure.md."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

11 tools

Changes things 3Claude Code: ask
  • net_exposureNet an SME's open foreign-currency bills and invoices, so that a receipt due on or before a payment in the same currency is shown as funding it.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description is 2,499 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...g a year: confirm with the user and call again. Spec: docs/specs/net_exposure.md."

      What this check looks for
    Description, as the server wrote it
    Net an SME's open foreign-currency bills and invoices, so that a receipt due on or before a payment in the same currency is shown as funding it. Returns the residual on every bill and invoice, a trace of which invoice funds which bill and for how much, per-bucket totals, dependency statements, and series for a ladder chart. It prices nothing: call price_guard on each residual separately, with the item's own due date as settlementDate. Never offsets across currencies. Items in base_currency are ignored. Cancelled items are excluded. Overdue items are listed separately and never netted. Set carry to true only when the client keeps receipts in a wallet or account in that currency, so a surplus can fund a later payment. If you do not know, ask the user whether they hold an account in each foreign currency before calling; do not guess. If their accounting platform is connected, offer to look up its bank accounts and their currencies there, and use what you find. If the answer is "not sure", call the tool twice, carry true and carry false, and show both charts; each carries its own scenario title, and chart_series.scenario holds the same words. THE RESULT HAS TWO PARTS: the JSON, then a PNG of the ladder chart rendered by the service. Show that image to the user as it is. PRESENTING THE RESULT: chart_series.currencies[ccy].open[] is the exposure. Present each open item on its own due date, with its label. Never add open items into one net figure, and never convert them to the base currency at spot. Do not call price_guard or show a Guard price unless the user asks for a price. If the user asks what they can do, lay out three things as facts and stop: do nothing (the amount stays exposed until paid), a forward from a bank or a payment provider (fixes the rate, provider margin inside the rate, an obligation that may need initial margin and margin calls, settled even if the payment does not happen), a Guard (fee known up front, market rate used if better, nothing further to pay if the payment does not happen). Do not rank them or say which fits. Never use the word "hedge". Do not draw a chart of your own from these numbers. DATES: the result carries today, the date the tool used. A due date the user gave without a year means the next such date on or after today, never a past year. If the result carries a warnings[] entry saying every item is before today, the dates are probably missing a year: confirm with the user and call again. Spec: docs/specs/net_exposure.md.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • price_guardPrice a Guard — CurrencyGuard's FX protection product for real future payments or receipts.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Price a Guard — CurrencyGuard's FX protection product for real future payments or receipts. If a tenor like '3 months' is given, call resolve_settlement_date first to get the exact date, then call this tool. Returns: guardType (Guard-Pay or Guard-Receive), guardRate, guardFee (in the home currency), guardFeePct (a FRACTION: 0.0096 means 0.96%), guardFeePercent (the same figure written as a percentage, e.g. "0.96%" — quote this one), effectiveRate, guardAmount (the foreign amount converted at the Guard rate, in the home currency, WITHOUT the fee), foreignAmount, spotRate, settlementDate, settlementWindowFrom (the first day the Guard rate can be used; the window runs from there to settlementDate, counted in business days on the trading calendar, so over holidays it opens earlier than 14 calendar days), payLaterCreditFee (the extra charged if the fee is paid at settlement instead of up front), valid, errors, stale. Pilot limit: the Guard amount cannot exceed 1,000,000 in the home currency. Say so before quoting if the amount is clearly above it. The Guard fee is separate money. A payer funds guardAmount plus guardFee; a receiver nets guardAmount minus guardFee. effectiveRate is that all-in figure expressed as a rate. All quotes are indicative, because a Guard is bought through the customer's payment provider, who sets the final rate and fee. Say that reason when you say "indicative".

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • request_provider_availabilityFind out whether Guards can be bought through a particular payment provider or bank.No findings

    Why it is in this group

    • The name "request_provider_availability" says "request": a word for a change.
    Description, as the server wrote it
    Find out whether Guards can be bought through a particular payment provider or bank. A Guard is always bought through a payment provider, so this cannot be answered without knowing which one the user pays through — CurrencyGuard checks and replies. ASK BEFORE CALLING. Tell the user plainly that their provider, and their email address if they give one, will be sent to CurrencyGuard so they can answer. Call this only after they say yes. The email address is optional: the provider on its own is a complete enquiry, and without an address there is simply no one to reply to. Never take an email address from earlier in the conversation — only one the user has just given for this purpose. Never call this more than once in a conversation, and never after the user has declined.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
Only reads 8Claude Code: allow
  • compare_guard_with_forwardUse when a user asks whether a Guard is worth it, how it compares with a forward contract from their bank or provider, or what happens if they do nothing.1 finding

    Why it is in this group

    • The name "compare_guard_with_forward" says "compare": a word for reading.

    Findings

    • Info

      The description is 3,345 characters long, over the 2,000 this check looks for.

      Matched text

      description ends: "...ider, who sets the final rate and fee. Say that reason when you say "indicative"."

      What this check looks for
    Description, as the server wrote it
    Use when a user asks whether a Guard is worth it, how it compares with a forward contract from their bank or provider, or what happens if they do nothing. ASK BEFORE YOU CALL. The forward side of this comparison should be the customer's own numbers, not CurrencyGuard's guesses. Ask three things first: (1) the forward rate their provider last quoted them for this payment, (2) whether the provider gives them an unsecured line with no deposit, or asks for an initial margin and at what percentage, and (3) at what adverse move the provider demands more cash. Pass what they give you as providerForwardRate, initialMarginPct (0 for an unsecured line) and marginCallThresholdPct. Only call with none of them when the customer cannot answer, and then say in your answer that the forward figures are illustrative defaults. DO NOT RANK. Present every row in the order the output gives it: rates, home-currency amount, cash up front, cash demanded under adverse moves, outcomes under favourable and adverse moves, cancellation, market improvement, worst case. Do not say which one wins, which looks bad, which is cheaper overall, or which the customer should choose. State the numbers. The decision is the customer's. cashNature says what kind of money each figure is: the Guard fee is spent, a forward's deposit and margin calls are held and returned at settlement. Say so when you show them. Held cash is not a cost. outcomes runs each move in both directions. In the favourable rows the Guard lapses and the fee is spent for nothing, and the forward is locked out of the better rate. Show both directions, not only the adverse one. READ OUT comparability.protection AND comparability.pricing beside the cost row, every time. A Guard and a forward are different kinds of protection, and the Guard rate here is mid-market while a payment provider may apply a margin to it or to the fee. The cost row is therefore not a like-for-like price comparison. If a tenor like '3 months' is given, call resolve_settlement_date first. DO NOT ALSO CALL price_guard. This returns the Guard rate, fee and amount itself, priced in the same moment as the forward it is compared against. Calling both prices the Guard twice seconds apart, and the market moves between them — the answer then shows two different fees for one Guard. In the cost row, QUOTE THE ALL-IN COST, NOT THE RATE ROW. homeCurrencyAmount.forward already contains the provider margin, because the margin is in the rate, but homeCurrencyAmount.guard does NOT contain the Guard fee. Compare homeCurrencyAmount.guardAllIn with homeCurrencyAmount.forward: those two both carry every cost of their own product. Comparing guard with forward overstates the Guard, by the whole fee. rates.effectiveRate is the same all-in figure expressed as a rate, for setting beside a provider's quoted rate. assumptions.source says, figure by figure, whether the forward side is the customer's data (CUSTOMER, PROVIDER_QUOTE) or ours (DEFAULT, MARKET_CURVE_PLUS_MARGIN). Read assumptions.note out with the answer. Say "your provider's rate" for the customer's figures and "an assumed 5% deposit" for ours. Never present a default as a quote. The Guard figures are indicative, because a Guard is bought through the customer's payment provider, who sets the final rate and fee. Say that reason when you say "indicative".

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • explain_guard_productExplain the Guard product using CurrencyGuard's approved product and FAQ content.No findings

    Why it is in this group

    • The name "explain_guard_product" says "explain": a word for reading.
    Description, as the server wrote it
    Explain the Guard product using CurrencyGuard's approved product and FAQ content. Covers: what the Guard is, how it works, who it is for, how it compares to forwards or options, and legal, regulatory, accounting, or eligibility questions.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • get_forward_rateUse when you need a forward FX rate.No findings

    Why it is in this group

    • The name "get_forward_rate" says "get": a word for reading.
    Description, as the server wrote it
    Use when you need a forward FX rate. tenor accepts either a period such as 1W, 1M, 3M, 6M, 1Y, or an exact date in ISO form YYYY-MM-DD. Use an exact date whenever you need the forward for the same day a Guard settles: a period resolves to the forward curve's own date, which can be several days away, and a comparison across two different dates is misleading. Rates are taken from the market forward curve, rounded, and for illustration purposes only — not for execution. Returns: forwardRate (indicative mid outright = spot + forward points), forwardPoints (in pips, e.g. -3.1 means the forward rate is 3.1 pips below spot), spotMid (indicative spot mid rate for comparison), settlementDate (the date the rate is for). Negative forward points mean the forward rate is below spot; positive means above. Example: base=GBP, quote=USD, tenor=2026-12-29 returns the GBPUSD forward for that day.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • get_historic_best_worstAnalyze historic best/worst FX performance for a currency pair over a Guard's duration.No findings

    Why it is in this group

    • The name "get_historic_best_worst" says "get": a word for reading.
    Description, as the server wrote it
    Analyze historic best/worst FX performance for a currency pair over a Guard's duration. Uses Bank of England historic rates. Returns a 'performances' array with 6 entries — BEST and WORST for each of three lookback periods (5, 10, 25 years). Each entry contains: type, lookbackYears, startDate/endDate, startRate/endRate, performancePercentage, startAmount, finalAmount, deltaAmount. For Guard-Pay: negative delta = cost decreased = BEST; positive delta = cost increased = WORST. For Guard-Receive: positive delta = receipt increased = BEST; negative delta = receipt decreased = WORST. Parameters must match the values used in the preceding price_guard call, including payReceive (PAY or RECEIVE).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • get_spot_rateGet an indicative spot FX rate for a currency pair.No findings

    Why it is in this group

    • The name "get_spot_rate" says "get": a word for reading.
    Description, as the server wrote it
    Get an indicative spot FX rate for a currency pair. Returns rounded bid, ask, and mid rates for illustration purposes only — not for execution. Example: base=GBP, quote=USD returns the GBPUSD rate.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • list_supported_currenciesList the currency pairs currently available for Guard pricing.No findings

    Why it is in this group

    • The name "list_supported_currencies" says "list": a word for reading.
    Description, as the server wrote it
    List the currency pairs currently available for Guard pricing. Always call this rather than assuming which pairs are supported — the list is configuration-driven and changes.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • price_guard_extensionGet an indicative price for extending a Guard to a later settlement date.No findings

    Why it is in this group

    • The description's first verb is "get": a word for reading.
    Description, as the server wrote it
    Get an indicative price for extending a Guard to a later settlement date. Estimates the additional cost using: (1) the guard fee difference between extended and original expiry, (2) the guard spread cost from the roll, and (3) the CurrencyGuard extension margin. Returns a breakdown: extensionCost = feeDifference + guardSpreadCost + extensionMargin. Both the original and extended quotes are priced at the same guard rate (the original quote's Guard rate), so the fee difference reflects purely the longer tenor, not market movement. Use this when a customer asks 'how much would it cost to extend my Guard by X months?' Parameters match price_guard plus the two dates.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
  • resolve_settlement_dateResolve a relative time period (tenor) to a valid business settlement date for a currency pair.No findings

    Why it is in this group

    • The name "resolve_settlement_date" says "resolve": a word for reading.
    Description, as the server wrote it
    Resolve a relative time period (tenor) to a valid business settlement date for a currency pair. Use this when a user says '3 months', '6 months', '1 year', etc. instead of an exact date. The tenor format is: 1D (days), 1W (weeks), 1M (months), 1Y (years). Examples: '3M' = 3 months, '6M' = 6 months, '1Y' = 1 year. The returned date accounts for weekends and public holidays in both currencies' financial centres. Use the returned settlementDate as the exact date parameter for price_guard.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http guard-pricing https://api.currencyguard.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__guard-pricing__get_spot_rate",
      "mcp__guard-pricing__list_supported_currencies",
      "mcp__guard-pricing__get_forward_rate",
      "mcp__guard-pricing__compare_guard_with_forward",
      "mcp__guard-pricing__resolve_settlement_date",
      "mcp__guard-pricing__get_historic_best_worst",
      "mcp__guard-pricing__price_guard_extension",
      "mcp__guard-pricing__explain_guard_product"
    ],
    "ask": [
      "mcp__guard-pricing__price_guard",
      "mcp__guard-pricing__net_exposure",
      "mcp__guard-pricing__request_provider_availability"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as guard-pricing. Review it before you use it.