Skip to content

MCP servers › io.github.MsingathiM › swapeazi

MCP server · registry snapshot 2026-11-05 · last tested 2026-11-05

swapeazi MCP server

Registry name io.github.MsingathiM/swapeazi

by MsingathiM · GitHub account (the registry's namespace rule)source link does not open (missing or private)Website ↗

SwapEazi is the AI agent for managing cross-border payments. — the publisher's description

1 of 2 record checks metRead-only · tools listed 2026-11-05version 2.4.2streamable HTTP66 tools

Summary

io.github.MsingathiM/swapeazi is a remote MCP server listed in the official MCP registry at version 2.4.2, under the namespace of the GitHub account MsingathiM. Its linked repository, github.com/msingathim/swapeazi, does not open publicly (missing or private). On 2026-11-05 ProtocolProbe connected to it in read-only mode and read its inventory: 66 tools, 0 resources and 0 prompts.

Record checks

1 of 2 record checks met · 7 do not apply

  • met: Registry entry is active and says how to run it
  • not met: Source repository link opens
  • not applicable: Repository is not archived
  • not applicable: Code pushed to the repository in the 90 days before our check
  • not applicable: Repository publishes a security policy (SECURITY.md)
  • not applicable: Package names its licence with a standard (SPDX) identifier
  • not applicable: The version the registry lists can be installed and is not withdrawn
  • not applicable: npm package carries build provenance (attestation)
  • not applicable: No known critical or high advisory in the package or its dependencies
  • Not ranked by downloads: a remote server publishes no download figure
  • Not ranked by stars: no public GitHub repository

From public records, not a safety rating. Each check with its reason · Is it safe to install?

Operate this server? Correct a fact · README badge · Run the checks yourself

Key facts

Runs
remote (hosted by the publisher)
Transport
streamable HTTP
Your own values
none declared (not a guarantee)
Sign-in
none needed to open a session
Repository
link does not open publicly
Tools
66
Last tested
2026-11-05

How a client gets in

Connects without signing in

Read from the server's public metadata on 2026-11-05 (swapeazi.io), in our read-only connection; no tool was called. It may have changed since. How it is read

Tool list at the three APIs

Not sent yet for this version (2.4.2).

Add to your client

Observed fact

This server accepted a session without any credential and lists 3 tools whose name or declaration suggests they change data (create_mandate, remove_rail_account, submit_payment). That is our reading of the names; we did not call them. Source: our connection, 2026-11-05.

Worth knowing before you connect it

  • The linked repository does not open publicly, so the code cannot be reviewed through it.

Each line comes from a section below, with its source and date.

How fresh this is

Live-tested
yes, a real session (not a text-only review)
Last tested
2026-11-05
Mode
read-only (no tool calls)
Latest version
2.4.2, published 2026-11-05 (registry, as of the 2026-11-05 snapshot)
First listed version
2026-11-05 (earliest version still in the registry; older removed versions would be earlier)
Version history
2 versions listed, all on 2026-11-05; 2 in the 90 days before the 2026-11-05 snapshot.
Most recent 2 versions
  • 2.4.2 · 2026-11-05
  • 2.4.1 · 2026-11-05
(versions still listed in the registry only)
Registry data
snapshot 2026-11-05
Package and repository
checked 2026-11-05
Engine
mcp-runtime-engine@0.1.0 · sdk@1.32.0

Dead or stale signals

1 found in the records we hold

  • The repository link does not open: GitHub answered HTTP 404 (it does not exist, or it is private). — api.github.com · 2026-11-05 · all servers with this fact

Looked for and not found: deprecated in the registry. Does not apply: listed version cannot be installed or is withdrawn; repository archived; no push in over 365 days. Each line is a dated fact from a public record. It does not say whether the server still works, and a record can change after the date shown.

Changes since the last refresh

New in the registry: not in the list of 2026-11-04, listed on 2026-11-05 with version 2.4.2 (published 2026-11-05).

Source: the official MCP Registry list on 2026-11-04 and on 2026-11-05.

What it is

What does this server offer?

Observed inventory
66tools
0resources
0prompts

None of its 66 tools are described as changing anything. For 66 the reading was uncertain, so no mark is shown.

  • discover_payment

    “Starts a cross-border payment: prices it on every rail (bank, PSP, stablecoin) and lists what is not known, before anything is prepared.”

    Publisher declares: read-only yes · open-world yes

    13 inputs, 3 required
    • amountnumberrequired“The amount, greater than zero.”
    • source_currencystringrequired“ISO 4217 code the payment leaves in, e.g.”
    • target_currencystringrequired“ISO 4217 code the payment must land in, e.g.”
    • directionstring“pay (default): amount is what leaves.”
    • amount_instring“Which currency amount is stated in.”
    • needed_bystring“Optional ISO date the money must land by.”
    • release_atstring“Optional ISO date-time the payment will be released; default now.”
    • payerobject“Optional.”
    • rails_allowedarray“Default: all.”
    • current_quoteobject“Optional: a quote already held, measured as given against the reference.”
    • constraintsobject“Optional.”
    • clientobject“Optional.”
    • detailstring“compact (default): a short summary that points at the signed full document, sized for a tool result.”
  • run_payments

    “Prepares a batch of cross-border payments for approval: validates each payee, prices each route and drafts each instruction for the business's own bank, provider or wallet.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    11 inputs
    • sampleboolean“true: the built-in sample run (synthetic, labelled), no key needed.”
    • source_currencystring“The currency the business pays from, e.g.”
    • payablesarray“[{ reference, payee: { name, iban?, bic?, account_number?, routing_number?, branch_code?, country?”
    • filestring“Instead of payables: a payout CSV or pain.001 text.”
    • previousarray“The previous run's payables, for changed bank details and amount jumps.”
    • policyobject“{ approver_role, material_threshold: { amount, currency }, agent_may_record_approval }”
    • sortstring“Your chosen order for the routes: landed cost against the official rate, stated days to land, or the measured 7-day answer rate.”
    • include_typesarray“Keep only routes of these rail types.”
    • exclude_typesarray“Leave out routes of these rail types.”
    • min_answer_ratenumber“Percent, 0 to 100: leave out routes whose measured 7-day answer rate is lower, or not measured (not enough reads).”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • approve_payment_run

    “Gets prepared payments approved by a named person and returns each one's release instruction.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 2 required
    • run_idstringrequired“pr_...”
    • approverobjectrequired“{ name, role, id?”
    • payments“"all_prepared" or a list of payment_ids.”
    • acknowledgeboolean“true to approve listed payments that need attention or have no evidence, once the person has assessed them.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • payment_run_status

    “Tracks each payment in a run from prepared through approval and release to what landed.”

    Publisher declares: read-only yes · open-world no

    3 inputs, 1 required
    • run_idstringrequired“pr_...”
    • exportboolean“true: the audit export (JSON) instead of the run.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • recommend_payment_route

    “Selects a route for one payment, with the reasons.”

    Publisher declares: read-only yes · open-world yes

    15 inputs
    • invoice_textstring“Paste the invoice or a sentence (e.g.”
    • amountnumber“Amount, in currency (default the source currency).”
    • currencystring“The currency of amount: the source currency, or the destination one (then it is what the supplier receives).”
    • source_currencystring“ISO code you pay from, e.g.”
    • destination_currencystring“ISO code the supplier is paid in, e.g.”
    • destination_countrystring“ISO 3166 alpha-2 or name, e.g.”
    • beneficiary_amountnumber“What the supplier must receive, in the destination currency (instead of amount).”
    • due_datestring“YYYY-MM-DD: a route that cannot settle by then is not eligible.”
    • prioritystring“Sets the default scoring weights.”
    • weightsobject“Your own scoring weights: { total_cost, speed, reliability, liquidity, compliance }, non-negative, normalised to 1.”
    • existing_providerobject“Your current provider: { provider, kind: quote | entered_rate | past_payment, rate (destination per source unit) or landed_amount, fees: { transaction, interme…”
    • supplierstring“Optional.”
    • referencestring“Optional.”
    • analysis_idstring“Read a kept analysis (pa_...) instead of making a new one.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header: names the routes and is not counted.”
  • assess_route

    “Prices a cross-border payment before the business commits to it: every known route for the pair, assessed on SwapEazi's independent data.”

    Publisher declares: read-only yes · open-world yes

    13 inputs
    • fromstring“Source currency, ISO code, e.g.”
    • tostring“Destination currency, ISO code, e.g.”
    • corridorstring“Instead of from and to: e.g.”
    • amountnumber“Amount leaving, in the source currency.”
    • as_ofstring“Assessment time, ISO 8601, within 15 minutes of now (default now).”
    • assessment_idstring“Retrieve a kept assessment record instead of making a new one.”
    • sortstring“Your chosen order for the routes: landed cost against the official rate, stated days to land, or the measured 7-day answer rate.”
    • include_typesarray“Keep only routes of these rail types.”
    • exclude_typesarray“Leave out routes of these rail types.”
    • min_answer_ratenumber“Percent, 0 to 100: leave out routes whose measured 7-day answer rate is lower, or not measured (not enough reads).”
    • payer_countrystring“Two-letter country the money leaves from.”
    • beneficiary_countrystring“Two-letter country of the beneficiary's account; with payer_country for a same-currency payment.”
    • charge_optionstring“Who pays the banks' charges on a wire: OUR (payer pays all), SHA (shared), BEN (beneficiary).”
  • liquidity_map

    “Shows where a payment of this size can be filled, and at what cost.”

    Publisher declares: read-only yes · open-world yes

    7 inputs, 1 required
    • pairstring“e.g.”
    • fromstring“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostring“ISO 4217 code of the destination currency (what lands), e.g.”
    • amountnumberrequired“Ticket size, in the from currency unless amount_currency says otherwise.”
    • amount_currencystring“The from or the to currency.”
    • prefundingobject“{ amount, currency?, corridor?, days_held }: an amount held to prefund the corridor, and for how many days (1 to 365).”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • onchain_liquidity

    “Finds where a stablecoin payment of this size can be filled on-chain, and at what cost: for USDC and USDT (and ZARP, cNGN as to_asset), executable depth and cost at the amount on Ethereum, Tron, Sola…”

    Publisher declares: read-only yes · open-world yes

    6 inputs, 1 required
    • amountnumberrequired“The ticket in US dollars (dollar stablecoins at par).”
    • from_assetstring“USDC or USDT.”
    • to_assetstring“USDC, USDT, ZARP or cNGN (ZAR and NGN map to ZARP and cNGN).”
    • chainsarray“Any of ethereum, tron, solana, base, bsc, arbitrum, polygon.”
    • destinationstring“Optional supplier country, two letters (e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header: shows exchange and P2P venue names in the destination block.”
  • record_landed

    “Closes a payment once the money arrived, on its remembered intent: what left (source currency) and what arrived (destination currency), and/or attach a stablecoin leg by chain and transaction hash, v…”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    7 inputs, 1 required
    • intent_idstringrequired“The remembered intent to close (remembered.intent_id from route_intent).”
    • sentnumber“Amount that left, in the source currency.”
    • landednumber“Amount that arrived, in the destination currency, after every deduction.”
    • settled_atstring“YYYY-MM-DD”
    • providerstring“Defaults to the route selected on the last day.”
    • chainstring“For a stablecoin leg: base, ethereum, arbitrum, optimism, polygon or celo.”
    • txstring“For a stablecoin leg: the transaction hash; read and priced from the chain and added to the payment record.”
  • reconcile_paymenton 1 other server

    “Reconciles each released payment in a run with what landed: amount sent, amount landed, settlement time, proof reference, the official rate with a Rate Receipt, realised all-in cost in percent and in…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    4 inputs, 2 required
    • run_idstringrequired“pr_...”
    • dry_runboolean“true: validate only, write nothing.”
    • paymentsarrayrequired“[{ payment_id, sent_amount, landed_amount, settled_at?, proof_ref, source?”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • record_release

    “Records the release of a material payment against the organisation's release policy, at the moment it is released: the map_id and measure_id on file, who released it, and any exception with its reaso…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    11 inputs, 3 required
    • policy_idstringrequired“The organisation's release policy the payment is released under, e.g.”
    • payment_refstringrequired“Your internal payment reference, never an account number.”
    • uetrstring“The payment's SWIFT UETR (UUID v4), optional: ties the record to the payment itself.”
    • amountobject“The released amount: { value, currency }.”
    • map_idstring“The Options Map (map_id) on file for this payment, if one was made.”
    • measure_idstring“The Measure (msr_...) on file for this payment, if one was made.”
    • intent_hashstring“The intent_hash from compile_intent, so the record proves the map matches this payment.”
    • released_atstring“ISO timestamp; defaults to now.”
    • released_byobjectrequired“Who released the payment: { type: human | system | agent, id }.”
    • exceptionobject“Only when the release falls outside the policy: { reason, approved_by: { id, role } }.”
    • agent_approvalobject“Agent releases only: { id, role } of the person who signed off a release above the policy's agent_autonomy.release_up_to.”
  • release_status

    “Tracks a released payment's evidence: reads its Release Evidence Record by rer_id: the policy result at release and the reconcile status as of now (pending, done, overdue or not required).”

    Publisher declares: read-only yes · open-world no

    1 input
    • rer_idstring“Optional.”
Show 54 more tools
  • swapeazi_coverage

    “Every currency a payment can be measured in today, and the number of directional corridors between them.”

    Publisher declares: read-only yes · open-world no

    Takes no inputs.

  • swapeazi_corridor_registry

    “Documented status of cross-border corridors per provider: which pairs a provider says it serves, published fees, and when each record was last verified.”

    Publisher declares: read-only yes · open-world no

    3 inputs
    • fromstring“Optional ISO 4217 source currency, e.g.”
    • tostring“Optional ISO 4217 destination currency, e.g.”
    • providerstring“Optional provider id.”
  • swapeazi_guardrail_check

    “Before money moves: every eligible route for a payment scored against your own limits (maximum LDI, maximum settlement time, regulated provider required), your quote measured if you pass one, beside …”

    Publisher declares: read-only yes · open-world yes

    11 inputs, 3 required
    • client_idstring“Optional.”
    • origin_currencystringrequired“ISO 4217 code, e.g.”
    • destination_currencystringrequired“ISO 4217 code, e.g.”
    • source_amountnumberrequired“Amount to send, in the origin currency.”
    • origin_jurisdictionstring“Optional ISO 3166-1 alpha-2 country of the sender.”
    • destination_jurisdictionstring“Optional ISO 3166-1 alpha-2 country of the beneficiary.”
    • max_acceptable_ldi_bpsnumber“Optional.”
    • max_settlement_hoursnumber“Optional.”
    • require_regulated_lpboolean“Default true.”
    • quoteobject“Optional.”
    • allowed_providersarray“Optional.”
  • swapeazi_guardrail_reconcile

    “After money moves: the signed decision record from swapeazi_guardrail_check plus what landed (figures, or the bank's MT103 or pacs.008 text) returns a signed reconciliation.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    3 inputs, 1 required
    • attestationstringrequired“decision.attestation from swapeazi_guardrail_check.”
    • settlementobject“What landed, when no bank message is supplied.”
    • messagestring“Optional.”
  • swapeazi_verify_record

    “Verify that a decision or reconciliation record was issued by SwapEazi and has not been altered, and read what it says.”

    Publisher declares: read-only yes · open-world no

    1 input, 1 required
    • attestationstringrequired“The attestation string from a decision or reconciliation.”
  • verify_release_record

    “Verify a SwapEazi Release Record v1, the evidence of a managed payment (or a chain of them), with no key: schema (https://swapeazi.io/schemas/release-record-v1.json), hash, chain link and Ed25519 sig…”

    Publisher declares: read-only yes · open-world no

    2 inputs
    • recordobject“One release record, as returned by record_release, release_status or GET /api/v1/releases/{id}.”
    • chainarray“Optional.”
  • swapeazi_beneficiary_check

    “Structural check on a payment destination: an IBAN's own checksum (ISO 7064 MOD 97-10), a US ABA routing number's own checksum, a BIC's format (ISO 9362), an EVM address's EIP-55 checksum, a South Af…”

    Publisher declares: read-only yes · open-world no

    7 inputs
    • ibanstring“An IBAN, spaces allowed.”
    • bicstring“A BIC/SWIFT code, 8 or 11 characters.”
    • usRoutingNumberstring“A US ABA routing number, 9 digits.”
    • saBranchCodestring“A South African universal branch code, 6 digits.”
    • mxClabestring“A Mexican CLABE (SPEI account), 18 digits; its verification digit is verified.”
    • mobileMoneyobject“A SADC mobile-money number.”
    • addressstring“An EVM address, '0x' followed by 40 hex characters.”
  • payout_preflighton 1 other server

    “Pre-release check on a whole payout file before it goes to the company's own bank or PSP.”

    Publisher declares: read-only yes · open-world no

    3 inputs, 1 required
    • filestringrequired“The payout file's text: pain.001 XML or a CSV with a header row.”
    • todaystring“Release date, YYYY-MM-DD.”
    • review_abovenumber“Rows above this amount need a person, whatever else they pass.”
  • swapeazi_dex_cost

    “What a stablecoin swap on a DEX really cost, from its transaction hash: the sender's token out and token in, each priced as the currency it tracks (USDC, EURC, cUSD, KESm/cKES, cNGN, NGNm, ZARm, GHSm…”

    Publisher declares: read-only yes · open-world yes

    2 inputs, 2 required
    • chainstringrequired“ethereum, base, arbitrum, optimism, polygon, celo or robinhood.”
    • txstringrequired“The swap's transaction hash, 0x followed by 64 hex characters.”
  • swapeazi_forward

    “The estimated fair forward rate for a currency pair and tenor, by covered interest parity from an independent mid and central bank policy rates, with its margin of error, and what hedging costs or ea…”

    Publisher declares: read-only yes · open-world yes

    5 inputs, 3 required
    • fromstringrequired“ISO 4217 code of the currency sold forward, e.g.”
    • tostringrequired“ISO 4217 code of the currency received, e.g.”
    • tenorDaysnumberrequired“Days to settlement, 1 to 1095.”
    • amountnumber“Optional notional in the from currency, to state the margin in money.”
    • quotedRatenumber“Optional.”
  • swapeazi_rwa_compare

    “Every tokenised Treasury and money fund SwapEazi covers (BUIDL, BENJI, OUSG, USTB, USYC, WTGXX, USDY, Spiko, CETES), landed in the investor's own currency and hedged back: after the fee, converting i…”

    Publisher declares: read-only yes · open-world yes

    3 inputs, 2 required
    • investorCurrencystringrequired“ISO 4217 code the investor holds and reports in, e.g.”
    • amountnumberrequired“Amount to place, in the investor's currency.”
    • horizonMonthsnumber“Holding period in months, default 12.”
  • compile_intent

    “Turn a corporate FX or payment requirement into a PaymentIntent: the currencies, the amount and whether it is what leaves or what must land, the value date, and the principal's own constraints.”

    Publisher declares: read-only yes · open-world no

    10 inputs
    • textstring“The requirement in plain words.”
    • fromstring“ISO 4217 code the money leaves in.”
    • tostring“ISO 4217 code it must land in.”
    • amountnumber“The amount.”
    • amount_basisstring“Whether the amount leaves (source) or must land (destination).”
    • value_datestring“ISO date the money must land by.”
    • max_all_in_bpsnumber“The principal's own limit on all-in cost against the reference, in basis points.”
    • max_settlement_daysnumber“The principal's own limit on settlement time.”
    • allowed_rail_classesarray“Optional.”
    • payerobject“Who is paying, so onboarding_status can be resolved per candidate instead of defaulting to onboardable-with-steps.”
  • map_options

    “The signed Options Map for a PaymentIntent: every rail and provider the graph holds for the pair and size, each with its access facts, documented capacity, settlement window, economics basis (observe…”

    Publisher declares: read-only yes · open-world yes

    6 inputs
    • intentobject“A PaymentIntent, a flat form or { text, from }.”
    • intent_idstring“An intent compiled earlier.”
    • release_atstring“Optional ISO date-time the payment will be released; default now.”
    • map_idstring“A map_id from an earlier map_options call: returns that stored, signed map (with expired) instead of making a new one.”
    • countrystring“Optional ISO 3166-1 alpha-2 country of the payer (or payee) for a multi-country currency, e.g.”
    • detailstring“compact (default): a short summary that points at the signed full document, sized for a tool result.”
  • check_constraints

    “Re-evaluate every candidate in a stored Options Map against constraints supplied now: the principal's own policy, an AP2 open (intent) mandate, a Verifiable Intent credential, or x402 payment require…”

    Publisher declares: read-only yes · open-world no

    7 inputs, 1 required
    • map_idstringrequired“The map_id from map_options.”
    • constraintsobject“max_all_in_bps_vs_ref, max_settlement_days, allowed_rail_classes, disallowed_providers, must_include_provider_id, allowed_providers (restrict every row to your…”
    • ap2_mandateobject“An AP2 intent mandate; recognised fields are read, the rest listed as unevaluable.”
    • x402object“{ accepts: PaymentRequirements[], price: { currency, amount } }.”
    • verifiable_intentstring or object“A Verifiable Intent credential: the serialised SD-JWT, or decoded mandate objects.”
    • instrument_classes_allowedarray“Optional.”
    • policy_idstring“A release policy of this organisation (needs its key): supplies the limit and the map-age rule.”
  • reconcile_outcome

    “After the money moved: post what was sent and what landed (or the all-in cost) against the map it was chosen from.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    5 inputs, 3 required
    • map_idstringrequired“The map_id of the Options Map the payment was chosen from.”
    • candidate_id_usedstringrequired“The candidate_id from the map the payment went through.”
    • realisedobjectrequired“What actually happened: sent_amount and landed_amount, or all_in_bps_vs_ref; with settled_at, and failure if it did not land.”
    • sourcestring“Where the realised figures come from: bank_mt (bank statement, MT940/950), swift (SWIFT confirmation), onchain_tx (a chain transaction) or manual_upload.”
    • proof_refstring“Your own reference for the proof; never an account number.”
  • “How much of the map for a currency pair and size rests on evidence: the coverage tier (evidenced, partial or inferred), how many reconciled outcomes sit behind it, how many candidates carry economics…”

    Publisher declares: read-only yes · open-world yes

    5 inputs, 2 required
    • fromstringrequired“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostringrequired“ISO 4217 code of the destination currency (what lands), e.g.”
    • amountnumber“Optional.”
    • amount_basisstring“Whether amount is what leaves (source) or what must land (destination).”
    • countrystring“Optional ISO 3166-1 alpha-2 country, e.g.”
  • payout_rules

    “Which payout rules reach a payout, and when: for a corridor (two-letter countries, or currencies) and a route (bank or stablecoin), each rule SwapEazi holds answers applies, depends (and on what) or …”

    Publisher declares: read-only yes · open-world no

    4 inputs, 2 required
    • fromstringrequired“Paying from: a two-letter country (ZA) or a currency (ZAR).”
    • tostringrequired“Paying to: a two-letter country (ZW) or a currency (USD).”
    • routestring“How the payout goes; both when left out.”
    • currencystring“Currency sent, when from and to are countries.”
  • route_intenton 4 other servers

    “Route one cross-border payment, given as fields or as one sentence ("USD 25,000 to a supplier in Lagos by 30 November").”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    16 inputs
    • textstring“The payment in one sentence; used instead of from/to/amount.”
    • fromstring“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostring“ISO 4217 code of the destination currency (what lands), e.g.”
    • amountnumber“Amount leaving, in the source currency.”
    • your_quote_landednumber“What the payer's current quote would land, in the destination currency.”
    • due_datestring“YYYY-MM-DD the money must land; adds routing across time: pay now, forward, convert and park, hold unhedged.”
    • delivernumber“Amount to deliver on the due date, destination currency.”
    • rememberboolean“Keep the intent and reprice it daily until it lands; returns remembered.intent_id.”
    • havearray“Providers or issuers the payer already has accounts with; the result shows what they can do and what a new account adds.”
    • lock_atnumber“With remember: mark the day locking the rate needs this much or less, source currency.”
    • repeatstring“With remember and due_date: the payment repeats; due_date is the first cycle.”
    • repeat_untilstring“With repeat: YYYY-MM-DD, last date a cycle may fall on.”
    • repeat_countnumber“With repeat: number of cycles, the first included.”
    • nudge_lead_daysnumber“With repeat: banking days before the release-by date to send the reminder (default 2).”
    • detailstring“compact (default): a short summary that points at the signed full document, sized for a tool result.”
    • policyobject“Optional.”
  • intent_status

    “A payment intent SwapEazi is watching (from route_intent with remember: true): today's route and what paying now, locking the rate and holding unhedged need, every day since it was kept, and what cha…”

    Publisher declares: read-only yes · open-world no

    1 input, 1 required
    • intent_idstringrequired“The remembered intent (remembered.intent_id from route_intent with remember: true).”
  • prepare_paymenton 4 other servers

    “Prepare an unsigned USDC or USDT transaction for the paying wallet you control, on Base, Arbitrum, Optimism, Polygon or BNB Chain, or USDT (TRC-20) on Tron (chain_id 728126428, T...”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    13 inputs, 5 required
    • tokenstringrequired“The stablecoin paid from the wallet: USDC or USDT.”
    • chain_idnumberrequired“8453 Base, 42161 Arbitrum, 10 Optimism, 137 Polygon, 56 BNB Chain, 728126428 Tron (USDT only).”
    • fromstringrequired“The paying wallet's address: 0x on EVM chains, T...”
    • tostringrequired“The recipient's address on the chain it receives on (0x, or T...”
    • amountnumberrequired“Amount to pay, in token units (1 = one USDC or USDT), greater than zero.”
    • to_tokenstring“Optional.”
    • to_chain_idnumber“The chain the recipient receives on, when it differs from chain_id.”
    • destination_currencystring“The local currency the money is for, so local stablecoin rules are assessed, e.g.”
    • profile_idstring“prof_… from payment_controls; applies the organisation's budgets and approval line.”
    • rulesobject“Inline rules when no profile is used: max_per_payment_usd, approval_above_usd, daily_limit_usd, monthly_limit_usd, allowed_recipients, allowed_chains.”
    • map_idstring“The map_id from discover_payment or map_options.”
    • candidate_idstring“The stablecoin candidate in that map this payment takes.”
    • privateboolean“Pay privately through NEAR Intents' confidential mode: one transfer to a deposit address for your wallet to sign; settles in full or refunds to your wallet.”
  • confirm_paymenton 10 other servers

    “After your wallet has sent a payment prepared by prepare_payment, give its prepare_id and transaction hash.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    3 inputs, 2 required
    • prepare_idstringrequired“The prepare_id returned by prepare_payment.”
    • tx_hashstringrequired“The transaction hash your wallet broadcast: 0x plus 64 hex characters on EVM chains, 64 hex characters on Tron.”
    • contributeboolean“True adds one anonymised row (token, network, month, size band) to SwapEazi's cost research.”
  • private_payment_status

    “For a payment prepared with private: true, give the deposit_address from its quote_proof.”

    Publisher declares: read-only yes · open-world yes

    1 input, 1 required
    • deposit_addressstringrequired“The deposit_address from the payment's quote_proof (prepare_payment with private: true).”
  • payment_controls

    “Read the controls that govern the payments an agent prepares for an organisation: its spend profiles with today's and this month's spend against each budget, the payments waiting for a person to appr…”

    Publisher declares: read-only yes · open-world no

    1 input
    • approval_idstring“rapr_… returned by prepare_payment when a person must approve.”
  • evidence_passport

    “Read a payment case by intent_id (pi_…): its lifecycle status and who reported it, the Evidence Passport (intent, evidence with provenance and freshness, provider access and dependencies, decision, o…”

    Publisher declares: read-only yes · open-world no

    1 input, 1 required
    • intent_idstringrequired“pi_… from POST /api/v1/cases.”
  • approval_statuson 3 other servers

    “Read a payout the agent held for approval by approval_id: awaiting_approval while it is pending; approved with the agent_approval { id, role } to pass to record_release; rejected with the approver's …”

    Publisher declares: read-only yes · open-world no

    1 input, 1 required
    • approval_idstringrequired“apr_… (or aprd_… for a demo item), from POST /api/v1/agent/run with policy_id.”
  • request_introductionon 4 other servers

    “Retired on 19 Oct 2026: SwapEazi collects no contact details for introductions.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    Takes no inputs.

  • corridor_events

    “Dated corridor news for a currency pair or one currency: provider route launches and exits, licences granted or revoked, central-bank FX and payment rule changes, devaluations, limit changes and outa…”

    Publisher declares: read-only yes · open-world yes

    5 inputs
    • pairstring“Six letters, e.g.”
    • currencystring“One ISO code, e.g.”
    • daysnumber“Look-back window, 1 to 365.”
    • kindstring“Optional comma-separated kinds: route_launch, route_exit, licence_granted, licence_revoked, rule_change, devaluation, limit_change, outage, partnership, other.”
    • limitnumber“Events returned, 1 to 100.”
  • price_routes

    “Read public prices for a corridor at a payment size: on-chain pools, public order books and public adverts, with no partner key.”

    Publisher declares: read-only yes · open-world yes

    5 inputs
    • fromstring“Source currency, e.g.”
    • tostring“Destination currency, e.g.”
    • corridorstring“Instead of from and to: USDT-ZAR.”
    • amountnumber“Amount in the source currency.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • get_rate_receipt

    “Return a stored Rate Receipt by id (rr_...).”

    Publisher declares: read-only yes · open-world no

    2 inputs, 1 required
    • idstringrequired“rr_...”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • “List corridors and each route's standing: proven (a real price and at least one closed landing), priced_only, or no_live_route with a reason.”

    Publisher declares: read-only yes · open-world yes

    1 input
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • create_mandateon 3 other servers

    “Create a spend mandate for an agent: per-payment cap, period cap, currencies, corridors, rails (bank, provider, stablecoin_wallet), optional cap on cost above the official rate, the person who approv…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    11 inputs, 9 required
    • agent_idstringrequired“Your own id for the agent this mandate covers, e.g.”
    • max_per_paymentobjectrequired“{ amount, currency }”
    • max_per_periodobjectrequired“{ amount, currency }”
    • periodstringrequired“The window max_per_period applies to: day, week or month.”
    • currencies_allowedarrayrequired“ISO 4217 codes the agent may pay in, e.g.”
    • corridors_allowedarrayrequired“e.g.”
    • rails_allowedarrayrequired“Rails the agent may use: bank, provider, stablecoin_wallet.”
    • max_cost_above_official_pctnumber or null“Optional.”
    • approver_person_idstringrequired“The person who approves.”
    • expires_atstringrequired“ISO 8601, in the future.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • “Read a mandate by id (man_...) for the organisation of the router key.”

    Publisher declares: read-only yes · open-world no

    3 inputs
    • idstring“man_...”
    • mandate_idstring“Same as id.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • check_payment_against_mandate

    “Verify one payment against a mandate before it is prepared.”

    Publisher declares: read-only yes · open-world no

    9 inputs, 5 required
    • mandate_idstringrequired“The mandate's id, from create_mandate.”
    • agent_idstring“Optional.”
    • amountnumberrequired“The payment amount, in currency, greater than zero.”
    • currencystringrequired“ISO 4217 code of amount, e.g.”
    • fromstringrequired“ISO 4217 code of the source currency, e.g.”
    • tostringrequired“ISO 4217 code of the destination currency, e.g.”
    • railstring“Optional.”
    • cost_above_official_pctnumber or null“Null when the gap to the official rate is not on record.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • payment_intent

    “Keyed.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    7 inputs, 5 required
    • payee_namestringrequired“The payee's name, e.g.”
    • fromstringrequired“ISO 4217 code the business pays from, e.g.”
    • tostringrequired“ISO 4217 code the payee receives, e.g.”
    • amount_receivenumberrequired“What the payee must receive, in the to currency, greater than zero.”
    • deadlinestringrequired“YYYY-MM-DD”
    • customer_idstring“Optional.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • decide_intent

    “Keyed.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 4 required
    • intent_idstringrequired“The payment intent's id, from payment_intent.”
    • decisionstringrequired“approved or rejected.”
    • person_namestringrequired“Full name of the person deciding, e.g.”
    • person_rolestringrequired“That person's role, e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • rail_handoff

    “Keyed.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    10 inputs
    • intent_idstring“An approved payment intent (from payment_intent and decide_intent): returns its instruction for your rail.”
    • run_idstring“Instead of intent_id: the payment run (pr_...) holding an approved payment to send.”
    • payment_idstring“With run_id: the approved payment in the run, e.g.”
    • connection_idstring“With run_id: your connected rail account (from connect_rail_account) to send through.”
    • account_numberstring“The payee's full account number as approved; SwapEazi keeps only its last four characters and matches this against the approved instruction.”
    • channel_idstring“With run_id: the rail's payout channel id for this payment (Yellow Card channelId).”
    • network_idstring“With run_id: the rail's id for the payee's bank or mobile-money network (Yellow Card networkId).”
    • account_typestring“With run_id: bank (default) or momo (mobile money).”
    • reasonstring“With run_id: the payment's purpose as the rail records it, e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • connect_rail_account

    “Keyed.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    8 inputs, 4 required
    • railstringrequired“The rail: yellowcard.”
    • envstring“sandbox (default) or production; production sending stays off unless the deployment enables it.”
    • api_keystringrequired“Your API key at the rail.”
    • secretstringrequired“Your API secret at the rail.”
    • cap_per_paymentobjectrequired“Required.”
    • labelstring“Optional.”
    • senderobject“Optional.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • list_rail_accounts

    “Keyed.”

    Publisher declares: read-only yes · open-world no

    1 input
    • access_keystring“The router key (rk_...) the accounts were connected with, if not sent as a Bearer header.”
  • remove_rail_account

    “Keyed.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 1 required
    • connection_idstringrequired“The connected rail account to delete (from list_rail_accounts).”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • join_networkon 2 other servers

    “Keyed.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    9 inputs, 3 required
    • partystringrequired“Who is joining: business, rail or agent.”
    • namestringrequired“The joining organisation's or agent's name.”
    • contactstringrequired“A work email address to reach the joining party.”
    • rail_kindstring“Rails only: bank, otc, ramp, psp or amm.”
    • quote_feedstring“Rails only, optional: how the quote feed connects: api_key or oauth.”
    • fromstring“Rails only, with rate: ISO 4217 source currency of the published rate, e.g.”
    • tostring“Rails only, with rate: ISO 4217 destination currency, e.g.”
    • ratenumber“Rails only: one published rate, destination units per source unit, e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • rail_position

    “Keyed.”

    Publisher declares: read-only yes · open-world yes

    3 inputs, 2 required
    • fromstringrequired“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostringrequired“ISO 4217 code of the destination currency (what lands), e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • rate_deal_history

    “Keyed.”

    Publisher declares: read-only yes · open-world no

    4 inputs, 3 required
    • customer_idstringrequired“Your own id for the customer whose negotiated deal is compared, e.g.”
    • fromstringrequired“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostringrequired“ISO 4217 code of the destination currency (what lands), e.g.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • parallel_signal

    “A dated series per currency of the gap between a public-advert median and the official rate.”

    Publisher declares: read-only yes · open-world yes

    1 input
    • datestring“YYYY-MM-DD.”
  • get_corridor_rates

    “Spec v1.0 name for assess_route: the official rate for the pair and each route's all-in cost and FX figure with source, read time, freshness and evidence type, settlement and requirements, under an a…”

    Publisher declares: read-only yes · open-world yes

    5 inputs
    • fromstring“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostring“ISO 4217 code of the destination currency (what lands), e.g.”
    • corridorstring“e.g.”
    • amountnumber“Amount leaving, in the source currency.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • calculate_payment_cost

    “What this payment costs through your current provider against the official rate: effective rate, FX spread, transaction, intermediary and payout fees, total cost in money and bps, and what the benefi…”

    Publisher declares: read-only yes · open-world yes

    15 inputs
    • invoice_textstring“Paste the invoice or a sentence (e.g.”
    • amountnumber“Amount, in currency (default the source currency).”
    • currencystring“The currency of amount: the source currency, or the destination one (then it is what the supplier receives).”
    • source_currencystring“ISO code you pay from, e.g.”
    • destination_currencystring“ISO code the supplier is paid in, e.g.”
    • destination_countrystring“ISO 3166 alpha-2 or name, e.g.”
    • beneficiary_amountnumber“What the supplier must receive, in the destination currency (instead of amount).”
    • due_datestring“YYYY-MM-DD: a route that cannot settle by then is not eligible.”
    • prioritystring“Sets the default scoring weights.”
    • weightsobject“Your own scoring weights: { total_cost, speed, reliability, liquidity, compliance }, non-negative, normalised to 1.”
    • existing_providerobject“Your current provider: { provider, kind: quote | entered_rate | past_payment, rate (destination per source unit) or landed_amount, fees: { transaction, interme…”
    • supplierstring“Optional.”
    • referencestring“Optional.”
    • analysis_idstring“Read a kept analysis (pa_...) instead of making a new one.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header: names the routes and is not counted.”
  • compare_payment_providers

    “Your current provider beside every route on record for the corridor at the same amount and against the same official rate: all-in bps, total cost, beneficiary amount, eligibility and score, plus rout…”

    Publisher declares: read-only yes · open-world yes

    15 inputs
    • invoice_textstring“Paste the invoice or a sentence (e.g.”
    • amountnumber“Amount, in currency (default the source currency).”
    • currencystring“The currency of amount: the source currency, or the destination one (then it is what the supplier receives).”
    • source_currencystring“ISO code you pay from, e.g.”
    • destination_currencystring“ISO code the supplier is paid in, e.g.”
    • destination_countrystring“ISO 3166 alpha-2 or name, e.g.”
    • beneficiary_amountnumber“What the supplier must receive, in the destination currency (instead of amount).”
    • due_datestring“YYYY-MM-DD: a route that cannot settle by then is not eligible.”
    • prioritystring“Sets the default scoring weights.”
    • weightsobject“Your own scoring weights: { total_cost, speed, reliability, liquidity, compliance }, non-negative, normalised to 1.”
    • existing_providerobject“Your current provider: { provider, kind: quote | entered_rate | past_payment, rate (destination per source unit) or landed_amount, fees: { transaction, interme…”
    • supplierstring“Optional.”
    • referencestring“Optional.”
    • analysis_idstring“Read a kept analysis (pa_...) instead of making a new one.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header: names the routes and is not counted.”
  • check_provider_liquidity

    “Spec v1.0 name for liquidity_map: each venue type with whether the evidence read shows depth at the size, slippage and landing cost with a Rate Receipt, or Being measured with the reason.”

    Publisher declares: read-only yes · open-world yes

    6 inputs, 1 required
    • pairstring“e.g.”
    • fromstring“ISO 4217 code of the source currency (what leaves), e.g.”
    • tostring“ISO 4217 code of the destination currency (what lands), e.g.”
    • amountnumberrequired“Ticket size, in the from currency unless amount_currency says otherwise.”
    • amount_currencystring“The from or the to currency.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • prepare_payment_instruction

    “Spec v1.0 name for run_payments: prepares each payment (payee validation, route assessment, instruction, approval digest) and returns each payment's lifecycle state.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    5 inputs
    • payablesarray“[{ reference, payee: { name, iban?, bic?, account_number?, routing_number?, branch_code?, country?”
    • filestring“Instead of payables: a payout CSV or pain.001 text.”
    • source_currencystring“The currency the business pays from, e.g.”
    • sampleboolean“true: the built-in sample run (synthetic, labelled), no key needed.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header.”
  • request_payment_approval

    “For a payment run: the payments awaiting approval with amount, route, assessment and approval_digest, the approver role, and the payments not ready with their lifecycle state and reason.”

    Publisher declares: read-only yes · open-world no

    2 inputs, 1 required
    • run_idstringrequired“The payment run (pr_...), or pr_sample.”
    • access_keystring“The router key that made the run.”
  • submit_paymenton 4 other servers

    “Sends ONE approved, released payment of a run through the business's own connected rail account (sandbox), with an idempotency key; without connection_id it reads the submission's status.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world yes

    5 inputs, 2 required
    • run_idstringrequired“The payment run (pr_...), or pr_sample.”
    • access_keystring“The router key that made the run.”
    • payment_idstringrequired“The approved payment in the run, e.g.”
    • connection_idstring“Your connected rail account to send through (from connect_rail_account).”
    • accountstring“The payee account the person approved, to match.”
  • track_payment_settlement

    “Spec v1.0 name for payment_run_status: each payment's lifecycle state (CREATED, ANALYSED, QUOTED, ROUTE_SELECTED, AWAITING_APPROVAL, APPROVED, SUBMITTED, PROCESSING, SETTLED, FAILED, REJECTED, EXPIRE…”

    Publisher declares: read-only yes · open-world no

    2 inputs, 1 required
    • run_idstringrequired“The payment run (pr_...), or pr_sample.”
    • access_keystring“The router key that made the run.”
  • swapeazi_landed_cost

    “What a single cross-border payment costs, in basis points, against an independent mid-market reference: give the amount sent, the amount that landed (or a provider says will land) and the date.”

    Publisher declares: read-only yes · open-world yes

    6 inputs, 4 required
    • sourceCurrencystringrequired“ISO 4217 code the payment is funded in, e.g.”
    • destinationCurrencystringrequired“ISO 4217 code the payment lands in, e.g.”
    • inputAmountnumberrequired“Amount sent, in the source currency.”
    • netLandedFiatnumberrequired“Amount that landed or will land, in the destination currency, after every deduction.”
    • settledOnstring“ISO date the payment settled.”
    • midSpotnumber“Optional.”
  • swapeazi_route_compare

    “The same payment sent two to four ways (a bank wire, a payment provider, a stablecoin route through an on-ramp and an off-ramp), each measured end to end against one independent reference: what left,…”

    Publisher declares: read-only yes · open-world yes

    6 inputs, 3 required
    • fromstringrequired“ISO 4217 code of the currency that left, e.g.”
    • tostringrequired“ISO 4217 code of the currency that landed, e.g.”
    • datestring“Optional payment date, YYYY-MM-DD.”
    • sentnumber“Optional amount sent, shared by every route that does not state its own.”
    • routesarrayrequired“Two to four routes.”
    • annualVolumenumber“Optional yearly volume on this route in the from currency, to state the gap per year.”
  • analyse_payment_leakage

    “Where the money leaks on your current provider: total cost against the official rate in money and bps, split into FX spread and fees, and the estimated saving against the recommended eligible route (…”

    Publisher declares: read-only yes · open-world yes

    15 inputs
    • invoice_textstring“Paste the invoice or a sentence (e.g.”
    • amountnumber“Amount, in currency (default the source currency).”
    • currencystring“The currency of amount: the source currency, or the destination one (then it is what the supplier receives).”
    • source_currencystring“ISO code you pay from, e.g.”
    • destination_currencystring“ISO code the supplier is paid in, e.g.”
    • destination_countrystring“ISO 3166 alpha-2 or name, e.g.”
    • beneficiary_amountnumber“What the supplier must receive, in the destination currency (instead of amount).”
    • due_datestring“YYYY-MM-DD: a route that cannot settle by then is not eligible.”
    • prioritystring“Sets the default scoring weights.”
    • weightsobject“Your own scoring weights: { total_cost, speed, reliability, liquidity, compliance }, non-negative, normalised to 1.”
    • existing_providerobject“Your current provider: { provider, kind: quote | entered_rate | past_payment, rate (destination per source unit) or landed_amount, fees: { transaction, interme…”
    • supplierstring“Optional.”
    • referencestring“Optional.”
    • analysis_idstring“Read a kept analysis (pa_...) instead of making a new one.”
    • access_keystring“A router key (rk_...), if not sent as a Bearer header: names the routes and is not counted.”

Each quoted sentence is the first sentence of the publisher’s own description. The kind of tool and the “changes data” mark are our AI model’s reading of that description, not something we tested: two differently worded runs had to agree, otherwise no label is shown, and nobody has checked them by hand. A tool without the “changes data” mark is described as only reading, searching or calculating, or the two runs did not agree. No tool was called. Read the publisher’s full description before relying on it. “Publisher declares” lists the hints the server itself sends with the tool (MCP annotations: read-only, destructive, idempotent, open-world); they are the publisher's claims, not checked by us. Inputs are the parameters in the tool's own input schema: name, declared type, whether it is required, and the first sentence of its description. Read 2026-11-05.

How well are its tools described?

Features #4 and #5

How clearly this server's own tool descriptions say what a tool does, and how consistent its tool list is. The first part is an AI model's yes/no reading of each description; the second part is counted. We do not turn it into a grade.

Descriptions

AI reading of each description

No AI reading was available for this server's tools (the two runs did not agree, or the listing was not reviewed).

Counted from the listing

Parameters with a description
100% of 378
Tools with a description
100% of 66
Typical description length
511 characters

The tool set

Counted from the listing

Tools
66
Size of the list
about 26,897 tokens for an agent to load (characters ÷ 4)
Naming
65 of 66 names use snake_case

AI reading: easy to mix up

No pair found.

The AI items cover 0 of 66 tools: for a tool where two differently worded runs disagreed, that item is left out. They were not checked by hand, and no tool was called. “Easy to mix up” means two tools whose names or descriptions overlap without saying how they differ; the AI found none, comparing tools within groups of 40. We do not rate whether the tool set is complete or whether side effects are spelled out, because our AI reading of those was not reliable enough.

How do I add it to my client?

Config from the registry entry

From the remote endpoint (Streamable HTTP)

We connected to this URL on 2026-11-05 (a read-only session: no tool was called).

Add to CursorAn install link in the format Cursor documents, holding the Cursor config below.

Claude Desktop or claude.ai
Settings → Connectors → Add custom connector, then paste:
https://swapeazi.io/api/mcp
Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
  "mcpServers": {
    "swapeazi": {
      "url": "https://swapeazi.io/api/mcp"
    }
  }
}
VS Code · .vscode/mcp.json
{
  "servers": {
    "swapeazi": {
      "type": "http",
      "url": "https://swapeazi.io/api/mcp"
    }
  }
}
VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"swapeazi","type":"http","url":"https://swapeazi.io/api/mcp"}'
Claude Code
claude mcp add --transport http swapeazi https://swapeazi.io/api/mcp
Cline · cline_mcp_settings.json (Cline CLI: ~/.cline/data/settings/; in the editor: MCP Servers → Configure → Configure MCP Servers)
{
  "mcpServers": {
    "swapeazi": {
      "type": "streamableHttp",
      "url": "https://swapeazi.io/api/mcp",
      "disabled": false,
      "autoApprove": []
    }
  }
}
Gemini CLI · ~/.gemini/settings.json, or .gemini/settings.json in a project
{
  "mcpServers": {
    "swapeazi": {
      "httpUrl": "https://swapeazi.io/api/mcp"
    }
  }
}
OpenAI Codex · ~/.codex/config.toml, or .codex/config.toml in a trusted project
[mcp_servers.swapeazi]
url = "https://swapeazi.io/api/mcp"
Zed · Zed settings file (command: zed: open settings file)
{
  "context_servers": {
    "swapeazi": {
      "url": "https://swapeazi.io/api/mcp"
    }
  }
}
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 --server-url https://swapeazi.io/api/mcp --transport http
  • The server runs on the operator's infrastructure; it may ask you to sign in when you first connect.
  • Zed's docs we read on 2026-10-26 describe remote servers by URL and do not name the transport.
  • The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real.

Built from the server's registry entry with each client's documented format (checked 2026-10-14; the Cursor link and the VS Code command 2026-10-19; the MCP Inspector command 2026-10-21; Cline, Gemini CLI, OpenAI Codex and Zed 2026-10-26). Values in < > are yours to fill in; this page never contains a key. Where the server needs a setting the entry does not declare, it can still fail to start.

Does the registry listing match what we found?

Feature #6

The registry checks an entry when it is published (each new version), and nothing re-checks it on a schedule. A difference below is about the listing, not a judgement of the publisher.

Registry saysWe foundResultSource · date
Remote endpoint swapeazi.io/api/mcpSession openedmatchesour test · 2026-11-05
No credential declared as requiredOpened a session without any credentialmatchesour test · 2026-11-05
Repository github.com/msingathim/swapeaziDoes not open (not found or private)differsapi.github.com · 2026-11-05

Who made it?

Feature #7 · lineage

Facts about the publisher. We do not turn them into a trust score.

Namespace
io.github.MsingathiM
Repository
github.com/msingathim/swapeazi — does not open publicly
Security policy
none found (we looked for SECURITY.md in the repository and in its owner’s .github repository)

Source: the registry entry and api.github.com · 2026-11-05; security policy read from GitHub · 2026-11-05.

Publish this server? Run these checks against it yourself before release, from your own machine: a server the command starts, or your own server at its URL after a one-time proof that you control it: npx protocolprobe-selftest.

Choosing

Record checks

Public records · not a safety rating

1 of 2 record checks met · 7 do not apply

  • Not ranked by downloads: a remote server publishes no download figure
  • Not ranked by stars: no public GitHub repository
  • MetRegistry entry is active and says how to run itActive, with a package or a remote address.
  • Not metSource repository link opensThe linked repository returned HTTP 404: it does not exist or is private.What changes this check: This check opens the repository link in the registry entry. GitHub's documentation describes changing a repository's visibility in its Settings, under Danger Zone, Change visibility. GitHub: setting repository visibility
  • Does not applyRepository is not archivedNo public GitHub repository to read.
  • Does not applyCode pushed to the repository in the 90 days before our checkNo public GitHub repository to read.
  • Does not applyRepository publishes a security policy (SECURITY.md)No public GitHub repository to read.
  • Does not applyPackage names its licence with a standard (SPDX) identifierRemote server: it ships no package.
  • Does not applyThe version the registry lists can be installed and is not withdrawnRemote server: it ships no package.
  • Does not applynpm package carries build provenance (attestation)Remote server: it ships no package.
  • Does not applyNo known critical or high advisory in the package or its dependenciesRemote server: it ships no package.

Read from public records only: the registry entry, npm/PyPI, GitHub and advisory databases, checked 2026-11-05 (security policy 2026-11-05). No tool was called. Only “met” and “not met” are counted, so the total differs between servers; a check that does not apply or that we could not run is listed, never counted against it. It is not a safety rating, and the same rules apply to every server. How each check works · Leaderboards · How we stay neutral

Common questions about io.github.MsingathiM/swapeazi

Answered from the data above

Who publishes io.github.MsingathiM/swapeazi?

The registry ties the namespace io.github.MsingathiM to the GitHub account MsingathiM; only its owner can publish under it. Its linked repository, github.com/msingathim/swapeazi, does not open publicly (missing or private). These are facts from the registry and GitHub, not a rating.

Is io.github.MsingathiM/swapeazi safe to install?

We do not rate servers as safe or unsafe. 1 of its 2 applicable record checks are met (facts from public records, each listed on this page). What the records show: The repository it links to does not open publicly, so its code cannot be inspected through that link. These are facts with their sources on this page, not a safety guarantee, and we did not run its tools.

Does io.github.MsingathiM/swapeazi need an API key or sign-in?

It opened a session without any credential on 2026-11-05. The registry entry declares no required credential; no declaration is not a guarantee.

Has io.github.MsingathiM/swapeazi been security tested?

Partly. 2 of the 14 checks that apply to it were exercised. It accepted a session without any credential and lists tools whose names suggest they change data. We did not call them. ProtocolProbe publishes no security verdict for a named server.

Does io.github.MsingathiM/swapeazi publish a security policy?

We found no SECURITY.md in its repository (root, .github/ or docs/) or in its owner's .github repository.

Where is the source code of io.github.MsingathiM/swapeazi?

The registry links to github.com/msingathim/swapeazi, but that link does not open publicly, so the code cannot be inspected through it.

Found this page useful?

Anonymous · no sign-in

A quick, anonymous reaction — no account, no email. One per kind from your browser. The tally updates when the page is next refreshed, and it is only a rough count, never a safety rating or a measured number of people.

Compare with another server

Side by side: registry entry, our read-only session, the tools and the 18 classification fields. Same values as each page; no score.

Security testing

What did we test, and what did we leave out?

18 checks · features #1, #2

Open without sign-in

It accepted a session without any credential and lists tools whose names suggest they change data. We did not call them. No security score is given; a check we did not run is never counted as passed.

The 18 checks at a glanceour test · 2026-11-05
  1. Inventory: exercised
  2. Hidden instructions: exercised
  3. Real execution: not run · our policy
  4. Secret leak: not run · nothing to check it against
  5. Internal addresses: not run · our policy
  6. Unconfirmed changes: not run · our policy
  7. Bad input: not run · our policy
  8. Model requests: not run · nothing to check it against
  9. Sensitive questions: not run · nothing to check it against
  10. Folder boundary: not run · our policy
  11. Log leaks: not run · nothing to check it against
  12. Hidden content: not run · nothing to check it against
  13. Fake assistant turns: not applicable
  14. Token passthrough: not applicable
  15. Token audience: not applicable
  16. Sign-in redirect: not run · our policy
  17. Consent handling: not testable from outside
  18. Sign-in metadata: not applicable

2 exercised12 not run (reason given)4 not applicable

Each check ends in exactly one state: exercised, not run (with the reason), or not applicable (with the reason). 2 of the 14 checks that apply to it were exercised. We do not publish security-check outcomes for named servers. These 18 checks are separate from the record checks at the top of this page, which read public records only.

Exercised · 2
  • 1Inventory
    tool-list
    Reads the declared tools, resources and prompts.exercised
  • 2Hidden instructions
    description-poisoning
    Looks for hidden instructions in tool descriptions.exercised
Not run, with the reason · 12
  • 3Real execution
    real-execution
    Calls a tool and checks what really happens.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 4Secret leak
    canary-leak
    Plants a fake secret and checks whether it leaks.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 5Internal addresses
    ssrf
    Checks whether a tool can be steered to internal addresses.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 6Unconfirmed changes
    write-without-confirmation
    Checks whether tools that change data act without asking.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 7Bad input
    error-handling
    Sends bad input and watches how the server answers.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 8Model requests
    sampling
    Checks whether the server asks the client's model to act for it.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 9Sensitive questions
    elicitation-sensitive-data
    Checks whether the server asks users for sensitive data.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 10Folder boundary
    root-boundary
    Checks whether the server reaches outside the folders it was given.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 11Log leaks
    logging-side-channel
    Checks whether log messages carry data they should not.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 12Hidden content
    audience-hiding
    Checks resources that hide content from the user.This check needs content the server returns, and nothing was read or called.not run · nothing to check it against
  • 16Sign-in redirect
    open-redirect
    Checks the sign-in redirect for abuse.Testing the sign-in redirect means sending probes to the operator's sign-in service, which we do not do.not run · our policy
  • 17Consent handling
    confused-deputy
    Checks consent handling when one service acts for another.Depends on the operator's own consent screen, which differs per server and cannot be tested from outside.not testable from outside
Does not apply to this server · 4
  • 13Fake assistant turns
    fake-assistant-turn
    Checks prompts that pose as the assistant's own words.The server exposes no prompts.not applicable
  • 14Token passthrough
    token-passthrough
    Checks whether the server forwards a user's token to other services.The server opened a session without sign-in, so there is no token flow to check.not applicable
  • 15Token audience
    token-audience-validation
    Checks whether tokens meant for another service are accepted.The server opened a session without sign-in, so there is no token flow to check.not applicable
  • 18Sign-in metadata
    oauth-url-scheme
    Checks the published sign-in metadata for unsafe URLs.No sign-in (OAuth) metadata is published, so there are no sign-in addresses to check.not applicable

Source: our own test, 2026-11-05, mcp-runtime-engine@0.1.0. Which checks count and why follows our published scoring model.

What happened during the test?

Feature #8

The steps in order, as the test record holds them.

  1. 0 msStarted a read-only session with the server's remote endpoint
  2. 13,392 msConnected after 0 redirects. No credential was sent or needed.
  3. Read the inventory: 66 tools, 0 resources, 0 prompts.
  4. 22,162 msFinished: 2 checks exercised.

Reference

How is it classified?

18 fields

One value per field, each with its source. Fields written by AI models are marked. A field with no value says why.

TopicAI-classified
pending: added in a later update
listed 2026-11-05; not classified yet
Pricing modelAI-classified
pending: added in a later update
the website is not read yet
Programming language
does not apply
no existing GitHub repository
Hosting type
registry · 2026-11-05
MCP capability
tools
our test · 2026-11-05
Transport
streamable HTTP
registry · 2026-11-05
Required credentials
none declared
registry · 2026-11-05 · no declaration is not a guarantee
Package registry
does not apply
remote-only server: no package is shipped, so there is no package registry
Freshness
0–30 days
registry updatedAt · 2026-11-05
Lifecycle status
registry · 2026-11-05
License class
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Integrity hash
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Signature / provenance
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Dependency advisories
does not apply
ships no package, so there are no dependencies to audit
Popularity
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Publisher signals
not stated
no readable GitHub owner to describe
Maintenance
not stated
repository link is dead (HTTP 404), so activity cannot be read
Environment
the publisher's infrastructure
where it runs, from the hosting type · 2026-11-05

“Not stated” means the source did not state it; “does not apply” means it does not apply to this kind of server; “our limit” means our own lookup failed. A linked value opens the directory filtered to the same value.

Cite or correct this page

Sources and corrections

Suggested citation

ProtocolProbe. “io.github.MsingathiM/swapeazi: MCP server record.” Data checked 2026-11-05. https://protocolprobe.com/mcp/servers/io.github.MsingathiM/swapeazi

Figures are valid for the date shown. Our facts on this page are CC BY 4.0: reuse them with a link and the check date. Quoted text (the publisher’s descriptions, website quotes, tool names) is not ours to license.

As JSON: this record in the API · API documentation.

Badge for your README

ProtocolProbe: 1 of 2 record checks met

[![ProtocolProbe](https://protocolprobe.com/api/v1/badge/io.github.MsingathiM/swapeazi)](https://protocolprobe.com/mcp/servers/io.github.MsingathiM/swapeazi)

It shows this server's record-check count: facts from public records, no tool called. It is not a security rating or a pass. It links here and updates after each data reload.

Something wrong, or is this yours?

If a fact here is wrong, tell us and we will re-check it. If you operate this server, you can run our checks on it yourself with the free self-test command; we call no server’s tools ourselves for anything shown here.

Write to hello@protocolprobe.com · corrections log · methodology