Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.cammac-creator/ibanforge

REMOTE · API.IBANFORGE.COM · 2 COMPONENTS

Check the bank behind an IBAN before you pay: bank-code check, BIC with source, bank-level sanctions

0 this week 89 Trust /100

Last scanned (19 hours ago)

Scores higher than 97% of remote servers

Unreachable for 1 day in a row. Last reached 3 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security14
Transport & Reachability0
Schema Quality & AI Usability0
  • Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list.Unverified
Stability & Change Management0
  • Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
  • Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Tool Safety0
  • Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list.Unverified
Capabilities0
  • Capabilities not yet verified: we couldn't read the endpoint's capabilities.Unverified

Unverified: 5 categories

Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 0
    • Endpoint reachability: reachable → unreachable ▼ security
    • TLS certificate: pass → unverified ▼ security
    • HSTS header: pass → unverified ▼ security
    • Authorization: partial → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Stability: pass → unverified ▼ security
    • Transport: pass → fail ▼ security
    • Tool coverage: 100 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Schema quality: 100 → unverified ▼ functional
  • 30 Oct 26 0
    • Tool “check_swiss_qr_bill” rewrote its description, which is the text the model reads security
    • Tool “check_postal_address” rewrote its description, which is the text the model reads security
    • Tool “lookup_ch_clearing” rewrote its description, which is the text the model reads security
  • 29 Oct 26 0
    • Tool “check_postal_address” rewrote its description, which is the text the model reads security
  • 24 Oct 26 +9
    • Authorization: unverified → partial ▲ security
    • Destructive annotations: All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation. functional
  • 29 Sept 26 0
    • Server version: 1.8.0 → 1.8.1 functional
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Sept 26 0
    • Tool “lookup_bic” rewrote its description, which is the text the model reads security
    • Tool “validate_iban” rewrote its description, which is the text the model reads security
    • Tool “check_compliance” rewrote its description, which is the text the model reads security
    • Schema quality: 417 → 459 ▼ functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 4 Nov 2026 · Probed https://api.ibanforge.com/mcp

TLS unreached
DNSSEC secure

Validation of api.ibanforge.com. — Secure

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
ibanforge.com. present 27620 13 Verified
api.ibanforge.com. Verified address RRset verified with the apex keys
Authentication Inconclusive

We could not reach the endpoint well enough to judge its authorisation posture.

Result Inconclusive

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.ibanforge.com/mcp Unreachable
http (plaintext) http://api.ibanforge.com/mcp HTTPS enforced
MCP tools · 11 exposed · ~6,318 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
batch_validate_iban ~331

Validate up to 100 IBANs in a single call. Paid per call in USDC via x402, it costs $0.002 per IBAN instead of $0.005 per validate_iban call; on an API key or a credit pack each IBAN uses one request or credit, the same as one validate_iban call. USE WHEN: the user pastes a list of IBANs, asks to clean a CSV/spreadsheet of bank accounts, asks to dedupe a customer database, asks to triage a payout list before sending, or whenever you would otherwise call validate_iban more than 2-3 times in a row. RETURNS: { results: [...same shape as validate_iban], count, valid_count }. COST: $0.002 USDC per IBAN via x402 (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

NameTypeReqDescription
ibansarrayyesArray of IBANs (1-100)
NameTypeReqDescription
countnumberyesNumber of IBANs processed.
resultsarrayyesOne result per input IBAN, in the same order. Same shape as validate_iban.
valid_countnumberyesNumber of results whose valid is true.

No examples provided.

check_compliance ~560

Run a pre-flight compliance triage on an IBAN before sending a SEPA / cross-border payment. USE WHEN: the user is about to send a payment / payout / refund and wants to triage risk first, asks whether the payee's bank or its country is under sanctions, asks if a SEPA Instant transfer can reach the bank, or needs a numeric risk score for an internal payment-approval workflow. NOT A REGULATED AML/CFT PRODUCT — informational triage only. For regulated screening use Refinitiv, Acuris, or ComplyAdvantage. CHECKS: IBAN validity + sanctions lists (OFAC, EU, UN) matched on the payee's bank (BIC8), the country checked against a fixed list of sanctioned jurisdictions, never the payee's name + FATF status + SEPA Instant reachability + whether the EPC Verification of Payee (VoP) register lists the bank as ready; the name check itself is done by the payee's bank, never here. RETURNS: the full validate enrichment plus a compliance object with risk_score (0-100, 0 = safest), risk_level (low/medium/elevated/high/critical), sanctions matched_lists + fatf_status, reachability, vop status, and flags[] (e.g. sanctioned_country, fatf_grey_list, emi_issuer, no_vop). compliance.sanctions.institution_listed says whether the payee's bank is on a list (null when no bank was screened, where bank_sanctioned still answers false) and payee_screened is always false; compliance.reachability.listed_in_epc_registers and compliance.vop.register_status name the registers' answers, null when not consulted (screened false); outside the SEPA area the country answers (false, not_listed) whether or not the registers are loaded. The flag bank_code_inferred carries no weight. COST: $0.02 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and P…

NameTypeReqDescription
ibanstringyesIBAN to check
NameTypeReqDescription
bank_code_checkobject––
bank_code_holderstring–confirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, o…
bbanobject––
bic–––
check_digitsstring––
checksobject–One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_ch…
clearing––Swiss clearing data when country is CH or LI.
complianceobjectyes–
cost_usdcnumberyesWhat THIS call was billed. Zero on the free MCP tier.
countryobject––
errorstring––
error_detailstring––
formattedstring–IBAN with 4-char groups for display.
ibanstringyesNormalized IBAN (uppercase, no spaces).
issuerobject––
list_price_usdcnumber–Catalogue price of the same call on the paid REST/x402 route.
metaobjectyes–
modulus_checkobject––
national_check_digitsobject–The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where che…
next_stepsarray–Ordered advice derived from THIS result: what blocks a payment first, what merely enriches it after. Branch on `code`, never on the prose. `because` names the field that produced the step so the advi…
official_identityobject–Who a central bank says holds the resolved code (ECB by LEI and for FR bank codes, Banco de Espana for ES). Present only on a match — absence is not a negative. INFORMATIONAL ONLY: it never changes v…
pra_authorisationobject––
processing_msnumber––
psd_registrationobject––
risk_indicatorsobject––
sepaobject––
validbooleanyes–

No examples provided.

check_postal_address ~655

Check a structured ISO 20022 postal address against a payment rail's published address rules, rule by rule, each verdict citing the document it comes from. USE WHEN: assembling a payment instruction (pain.001, a Fedwire message, a T2 transfer) with a creditor or debtor address, to check conformity with the named document BEFORE submitting. Timetables differ: SPS 2026 in force 14 Nov 2026 requires town and country whenever an address is given, but SIC does not validate addresses and each bank decides what it still accepts. Fedwire moved its release to November 2027. The fetched T2 R2026.NOV does not forbid an AddressLine-only address; the MyStandards usage guideline could not be read. DO NOT USE to verify that a street or a building exists: the findings check conformity with the message format rules, and no street is looked up. For a Swiss or Liechtenstein address (ctry CH or LI, with pst_cd and twn_nm), the separate postcode_locality block says whether postcode and town go together in the official directory of localities of swisstopo (©swisstopo, version date in as_of); it is informative and does not change conforms. SCHEMES: 'sps' (Swiss Payment Standards, SIX), 'hvps_plus' (HVPS+ / T2, ECB), 'fedwire' (Federal Reserve). There is deliberately NO 'cbpr+' scheme: that guideline sits behind swift.com, unreachable to automated readers, and a conformity boolean quoting an unread document would be a guess dressed as a verdict — the note field restates this on every answer. VERDICTS: pass, fail, and not_applicable — the last marks a rule whose precondition is not met and never counts as a pass. conforms is true when no finding failed. IMPORTANT: relay each finding's source string — it names the exact document, version and validity date the rule is quoted from. They are what makes the verdict auditable. FREE: the rules are published commodities. The paid surface is the postal_address block that /v1/bic and /v1/iban/validate return for the resolved institution. COST: $0 pe…

NameTypeReqDescription
addressobjectyesThe ISO 20022 PostalAddress under test, in ISO tag vocabulary (snake_cased).
schemestringyesWhich rail's rules to check against: sps | hvps_plus | fedwire
NameTypeReqDescription
conformsbooleanyesTrue when no finding failed. not_applicable findings never count against it.
findingsarrayyesOne entry per rule of the scheme, in a stable order.
notestringyesWhy 'cbpr+' is not on the menu. Served on every answer.
postcode_locality–yesSwiss and Liechtenstein addresses with a postcode and a town: whether the two go together in the official directory of localities of swisstopo. Informative, beside the format verdicts: it does not ch…
schemestringyessps | hvps_plus | fedwire — the rule set that was applied.

No examples provided.

check_swiss_qr_bill ~686

Check a Swiss QR-bill payload, the text a QR-bill's code carries (starts with SPC), rule by rule, each finding citing the SIX document it comes from. USE WHEN: an agent, an ERP or an accounting tool holds a scanned or generated QR-bill and must know before paying or issuing it whether it is well-formed, whether the reference type matches the IBAN (QRR needs a QR-IBAN, IID 30000-31999), and above all whether the creditor and debtor addresses are STRUCTURED (type S) or still COMBINED (type K): type K has not been permitted since 21.11.2025, and the banks guarantee payment of a type K QR-bill only until the end of September 2026. DO NOT USE to learn which bank holds the account or its payment-rail participation: that is the paid validate_iban. RETURNS: { valid, ready_for_2026_11_14, creditor_iban { value, valid, country, qr_iban, iid }, creditor { present, address, structured, sps_check, proposed_structured }, ultimate_debtor, amount, currency, reference { type, value, valid, note }, findings [{ code, severity, field, detail, source }], next_steps, source }. A combined address comes back with proposed_structured, the S-type fields derived from the combined lines, to relay as a fix. For a type S address in CH or LI, sps_check.postcode_locality compares postcode and town with the official directory of localities of swisstopo (©swisstopo, version date in as_of). A warning (postcode_town_mismatch, postcode_other_country, postcode_not_listed) comes back when the directory lists the postcode for other towns or in the other country, or lists neither the postcode nor the town in that postal area; never an error, and valid does not change. A postcode missing from the directory, while the town is listed there under another postcode of the same postal area (likely a post-office box postcode), comes back not_verifiable, without a warning: the absence of a warning does not mean the pair was verified. IMPORTANT: relay each finding's source string. COST: $0 per call, on every surfac…

NameTypeReqDescription
payloadstringyesThe Swiss QR Code text with real line breaks: SPC, 0200, 1, IBAN, creditor (7 lines), ultimate creditor (7 empty lines), amount, currency, ultimate debtor (7 lines), reference type, reference, messag…
NameTypeReqDescription
alternative_schemesarrayyes–
amountstring|nullyes–
billing_informationstring|nullyes–
codingstringyes–
creditorobjectyes–
creditor_ibanobjectyes–
currencystring|nullyes–
findingsarrayyes–
next_stepsarrayyes–
qr_typestringyes–
ready_for_2026_11_14booleanyesvalid AND every present address is structured (type S). The name is kept for compatibility and is not a deadline: type K has not been permitted since 21.11.2025, and the banks guarantee payment of a…
referenceobjectyes–
sourcestringyes–
trailerstringyes–
ultimate_creditor_emptybooleanyes–
ultimate_debtorobjectyes–
unstructured_messagestring|nullyes–
validbooleanyesTrue when no finding has severity error.
versionstringyes–

No examples provided.

lookup_bic ~528

Resolve a BIC / SWIFT code into the underlying bank: name, country, city, LEI, and registered head-office address (where available). USE WHEN: the user already has a BIC/SWIFT (8 or 11 chars, alphanumeric, e.g., "UBSWCHZH80A", "DEUTDEFF") and asks which bank it belongs to, where the bank is, or its LEI for compliance/regulatory matching. DO NOT USE for IBAN inputs — call validate_iban instead, it resolves the BIC for you. BACKED BY: BIC directory, 121,000+ entries (entries, not institutions): GLEIF and national registers, refreshed monthly, plus a public copy of the SWIFT directory frozen in January 2018 that still makes up about two thirds of the rows. 39,000+ of the rows carry an LEI from GLEIF. SOURCE: source names the dataset of this row and source_name spells it out; source_as_of is present only when that dataset is a copy frozen at that month (the public copy of the SWIFT directory, frozen in January 2018). listed_in_current_source says whether this BIC8 still appears in a list refreshed this cycle (GLEIF, a national register, the EPC scheme registers, the EBA STEP2 and NBP lists): true when one of them carries it, null when it was not found in what could be read in full. It never answers false today: the EBA STEP2 and NBP lists are only read through our deduplicated directory, which can drop a BIC they carry, so an absence is not proven. It does not prove the bank still exists under this name. COST: $0.003 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

NameTypeReqDescription
bicstringyesBIC/SWIFT code (8 or 11 chars)
NameTypeReqDescription
address––Registered head-office address of the legal entity, from the same directory row as GET /v1/bic/:code and the bic.address of validate_iban, with its source and as_of (the date the entity last filed it…
address_availableboolean–True when address is not null.
bicstringyesEcho of the input, normalized to uppercase.
bic11string–11-char form including branch.
bic8string–8-char form (institution-level).
branch_codestring––
branch_infostring|null––
citystring|null–Null, never an empty string, when the source leaves the town blank.
countryobject–Same shape as REST GET /v1/bic/:code. name is the row's country name, then the ISO name, and falls back to the country code only when neither exists.
country_codestring–DEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.code.
country_namestring|null–DEPRECATED since 1.4.0, removed no earlier than 2027-01-01. Use country.name, which is never null: the row's country name, else the ISO name, else the code.
errorstring––
foundboolean–True only when the row names an institution: a record is complete or not found.
institutionstring|null–Bank legal name.
is_test_bicboolean––
leistring|null–Legal Entity Identifier (ISO 17442) if available.
lei_statusstring|null––
listed_in_current_sourceboolean|null–Whether this BIC8 still appears in a list refreshed this cycle: GLEIF, the directory sources that carry no vintage, a national register, the EPC scheme registers. true when one of them carries it; nu…
notestring–Present only when found is false and the part of the directory served from a private file (EBA STEP2, NBP and OeNB records) is not loaded on this deployment: the absence was not looked up there.
sourcestring|null–Code of the dataset this row comes from.
source_as_ofstring–Year-month the source DATA is from, present only for a frozen copy.
source_namestring|null–source names the dataset of this row and source_name spells it out; source_as_of is present only when that dataset is a copy frozen at that month. listed_in_current_source says whether this BIC8 stil…
validboolean–Set when the BIC failed format validation.
valid_formatboolean––

No examples provided.

lookup_ch_clearing ~406

Resolve a Swiss BC-Nummer / IID (1 to 5 digits) into the underlying institution. USE WHEN: the user mentions a Swiss bank by BC-Nummer or IID, pastes a CH or LI IBAN clearing code, asks routing details for a Swiss instant transfer (SIC, euroSIC), asks about QR-bill QR-IID resolution, or needs to classify a Swiss financial institution (bank vs PFS vs SIC-only participant). EVERY IID OF THE SIX BANKMASTER, with its full payment-rail participation (SIC, RTGS CHF, Instant Payments CHF, euroSIC, LSV+/BDD) plus QR-IID allocation, not just a name lookup. BACKED BY: 1,100+ SIX BankMaster entries (Swiss official source, re-read weekly). RETURNS: institution { name, type, iid_type, headquarters_iid }, address, bic, payment_services { sic, rtgs_chf, instant_payments_chf, eurosic, lsv_bdd_chf, lsv_bdd_eur }, sic_iid, qr_iid, valid_on. Only relevant for CH and LI accounts. COST: $0.003 per call (free with no key on this transport: 25 units a week per source address, one per call and one per IBAN in batch_validate_iban, reset on Monday 00:00 UTC. Or an ifk_ key with no e-mail at all: POST https://api.ibanforge.com/v1/keys/generate with no body for 25 calls/month, on the REST API or on this transport, and POST /v1/keys/claim lifts that same key to 200 a month. Send the key here as Authorization: Bearer ifk_… (or X-API-Key) and each call counts against it exactly as on the REST API).

NameTypeReqDescription
iidstringyesSwiss IID (1-5 digit number)
NameTypeReqDescription
addressobject––
bicstring|null–BIC if mapped.
cost_usdcnumber–What THIS call was billed. Zero on the free MCP tier.
errorstring––
foundboolean––
iidstring–Normalized 5-digit BC-Nummer.
institutionobject––
is_qr_iidboolean–Present (true) only when the IID asked about is a QR-IID (SIX QR-bill range 30000-31999); iid then carries the standard IID of the institution and qr_iid the QR-IID asked about.
list_price_usdcnumber–Catalogue price of the same call on the paid REST/x402 route.
messagestring––
notestring––
payment_servicesobject––
qr_iidstring|null–QR-bill enabled IID.
qr_iid_source––How qr_iid was obtained. register = SIX BankMaster publishes this pairing; headquarters = inherited from the head office (headquarters_iid), an inference and not a published SIX pairing. Null when qr…
qr_iidsarray–Every QR-IID SIX allocates to the institution, present only when there is more than one; qr_iid carries the lowest.
redirected_fromstring––
sic_iidstring|null––
state_guaranteeobject–Present for the 24 Swiss cantonal banks only, matched by head-office IID; a branch or QR-IID takes its head office's entry. A description of the institution, not an assessment of the bank or of any a…
valid_onstring––

No examples provided.

poll_api_key ~290

Collect the API key once a human has approved the request opened by request_api_key. USE WHEN: you have called request_api_key and shown the code to your human. HOW TO CALL IT: leave `device_code` empty to reuse the last request from this session. The server usually waits up to thirty seconds before answering, and sometimes answers at once when it is busy — either way, calling it once per minute is enough, never in a tight loop. WHAT THE ANSWERS MEAN: `authorization_pending` is normal and means nobody has approved yet — wait `retry_in_seconds` and call again; `approved` carries the key ONCE and never again, so hand it to your human immediately together with `config_line`, or the header "Authorization: Bearer <key>" for the hosted server; `access_denied` means somebody refused — tell your human, ask THEM whether to try again, and open at most ONE more request; `expired_token` means the code timed out — you may call request_api_key ONE more time, and if that expires too, stop and keep using the keyless allowance or x402; `invalid_grant` means this code can no longer be used at all — stop. This tool is free and does NOT count against the free allowance.

NameTypeReqDescription
device_codestring–Optional. Leave it empty to reuse the last request from this session.
NameTypeReqDescription
api_keystring|nullyesPresent exactly once, on the first approved poll.
config_linestring|nullyesThe exact command line to give the human. Do not run it yourself.
emailstring|nullyesAbsent on the anonymous tier: no address was ever given.
expires_innumber|nullyes–
key_prefixstring|nullyes–
messagestringyesOne sentence for the human.
monthly_limitnumber|nullyes–
retry_in_secondsnumber|nullyes–
statusstringyesauthorization_pending is normal: wait `retry_in_seconds` and call again.
tier–yesanonymous = the entry allowance, email/claimed/paid = the raised one.

No examples provided.

request_api_key ~398

Start the process that gives your human a free IBANforge API key, without any e-mail address. The key does not unlock this session: it works once your human puts it in the MCP client configuration and reconnects, or sends it to the REST API, so tell them where it goes when you hand it over: `config_line` (returned by poll_api_key) for Claude Code with the npm package; for the hosted server https://api.ibanforge.com/mcp, the header "Authorization: Bearer <key>", which Claude and Claude Desktop take under Request headers when the custom connector is added; ChatGPT sends no key to a connector, so in ChatGPT the key serves on the REST API only. USE WHEN: you used up the free allowance, a call answers 402, or your human is about to run more than a handful of validations. WHAT YOU MUST DO WITH THE RESULT: read `status` first — `ok` means a code was issued, anything else means no code exists and `display_to_human` tells you and your human what to do instead. On `ok`, show `display_to_human` to your human VERBATIM (the user_code and the link) and say, in your own words, that opening the link and approving takes about fifteen seconds and asks for nothing. Do NOT open the link yourself, do NOT fill anything in on their behalf, and do NOT invent an e-mail address: the page gives a key with no address at all, and your human may add one if THEY choose. Then call poll_api_key. This tool is free and does NOT count against the free allowance — it works even after the allowance is spent.

NameTypeReqDescription
client_namestring–Optional. Who is asking, shown to the human on the approval page.
reasonstring–Optional. What the key is for, shown to the human on the approval page.
NameTypeReqDescription
display_to_humanstringyesA ready-made block of text to show verbatim. Do not paraphrase it.
expires_innumber|nullyesSeconds until the code stops working.
intervalnumber|nullyesMinimum seconds between two poll_api_key calls.
statusstringyesok means a code was issued. Anything else: read display_to_human and fall back.
user_codestring|nullyesShow this to the human, exactly as written, e.g. WDJB-MJHT.
verification_uristring|nullyesThe page the human opens. Never open it yourself.
verification_uri_completestring|nullyesSame page with the code pre-filled. This is the one to show.

No examples provided.

send_feedback ~278

Report a problem or a need directly to the IBANforge operators: incorrect validation result, stale or missing BIC/bank data, latency, or anything blocking you from using or PAYING for the service (missing network, unclear pricing, quota shape). USE WHEN: a result looks wrong, data you need is missing, or you hit a wall (quota, payment, capability) and want it fixed. This tool is free and does NOT count against the free allowance — it works even after the allowance is spent. A human reads every report; verified data errors on paid x402 calls are refunded on-chain.

NameTypeReqDescription
agentstring–Which agent/model is reporting, e.g. "claude-sonnet-5 via MCP".
contactstring–Where we may answer you (e-mail) — optional, reports can be anonymous.
endpointstring–Endpoint or tool concerned, e.g. /v1/iban/batch.
error_typestringyesCategory of the report. Use "other" for product feedback, pricing/payment blockers or feature needs.
expectedstring–What you expected (for data errors).
gotstring–What you received instead (for data errors).
notesstringyesWhat happened, what you needed, or what blocked you — free text.
NameTypeReqDescription
idnumberyesReport id — check status at GET /v1/feedback/{id}.
okbooleanyes–

No examples provided.

validate_iban ~1,420

Verify whether an IBAN from any of the 89 IBAN countries is valid AND enrich it with bank, compliance and routing data. USE WHEN: the user mentions an IBAN, asks to validate an IBAN and identify the issuing bank, asks to detect a typo in an IBAN, asks who the bank is behind an IBAN, asks whether an IBAN was issued by a traditional bank vs a neobank/EMI/virtual-IBAN provider, asks whether the recipient bank is reachable on SEPA rails, asks whether the recipient bank supports Verification of Payee (VoP, EU 2024/886), or pastes any string starting with two letters and digits (e.g., "DE89...", "CH93...", "FR76..."). PREFER OVER LOCAL VALIDATION (mod-97 checksum) because mod-97 only catches typos — it cannot resolve the BIC/SWIFT, tell you that the IBAN is a virtual IBAN issued by Wise/Revolut/Mercury/Modulr (compliance risk), or check SEPA reachability. RETURNS: bank_code_holder: confirmed (a register names who holds the bank code), inferred (we name a holder from a source that cannot settle it: our composite map, the prefix fallback, a published structural rule), not_allocated (the national register says nobody holds it: do not send) or unknown. valid stays true in all four: it only means the IBAN is well formed. checks: one status per check (pass, fail, inferred, unknown, not_checked, not_applicable); payee_name, account_exists and payee_sanctions are always not_checked. national_check_digits { country, scheme, status: pass | fail | not_applicable | not_checked, detail?, method?, verified_by? } (FR, MC, BE, IT, SM, ES and DE only): the national key inside the BBAN; fail means the account number cannot have been issued as written, and valid stays true; in DE a fail with verified_by independent_implementation is a warning (national_check_digits_suspect), not a stop, and not_checked means the bank code or its Bundesbank method is not covered here. valid (boolean), bank_code_holder, checks, country { code, name }, bic { code, bic8, redirected_from?, bank_name, city, basi…

NameTypeReqDescription
ibanstringyesIBAN to validate (spaces/hyphens stripped automatically)
NameTypeReqDescription
bank_code_checkobject––
bank_code_holderstring–confirmed | inferred | not_allocated | unknown. Who holds the bank code. confirmed: a register that publishes holders names the holder of this code (a national register that settles the code space, o…
bbanobject––
bic–––
check_digitsstring––
checksobject–One status per check: pass (checked against a source that settles it), fail (checked, and wrong), inferred (answered from a source that does not settle it), unknown (attempted, no conclusion), not_ch…
clearing––Swiss clearing data when country is CH or LI.
cost_usdcnumberyesWhat THIS call was billed. Zero on the free MCP tier.
countryobject––
errorstring––
error_detailstring––
formattedstring–IBAN with 4-char groups for display.
ibanstringyesNormalized IBAN (uppercase, no spaces).
issuerobject––
list_price_usdcnumber–Catalogue price of the same call on the paid REST/x402 route.
modulus_checkobject––
national_check_digitsobject–The check key a country keeps inside the BBAN, recomputed from the IBAN alone. Present only on a valid IBAN of FR, MC, BE, IT, SM, ES or DE (GB has modulus_check instead); absent elsewhere, where che…
next_stepsarray–Ordered advice derived from THIS result: what blocks a payment first, what merely enriches it after. Branch on `code`, never on the prose. `because` names the field that produced the step so the advi…
official_identityobject–Who a central bank says holds the resolved code (ECB by LEI and for FR bank codes, Banco de Espana for ES). Present only on a match — absence is not a negative. INFORMATIONAL ONLY: it never changes v…
pra_authorisationobject––
processing_msnumber––
psd_registrationobject––
risk_indicatorsobject––
sepaobject––
validbooleanyes–

No examples provided.

validate_payment_reference ~766

Validate a structured payment reference and, when an IBAN is supplied, decide whether the two may legally travel together. USE WHEN: assembling a payment instruction from an invoice, a QR-bill or a remittance advice; whenever a Swiss IBAN and a reference appear together (the pairing rule is what most integrations get wrong); or when the user pastes an "RF..." string, a 27-digit number, a +++123/4567/89012+++ block, or asks whether a payment reference is correct. DO NOT USE to validate the IBAN itself — that is validate_iban. SCHEMES: RF Creditor Reference (ISO 11649, "SCOR" in Swiss Payment Standards, mod 97-10); Swiss QR reference ("QRR", 27 digits, modulo 10 recursive); Belgian OGM/VCS (12 digits, modulo 97, a remainder of 0 written 97); Finnish viitenumero (4-20 digits, weights 7-3-1 from the right). Norwegian KID and Swedish OCR are RECOGNISED but never judged: they answer valid: null with status unverifiable_without_creditor_config, because modulus type and length are configured per creditor account by the beneficiary bank and are not a property of the string. NEVER relay those to a user as "invalid" — say the check needs the creditor bank configuration. AMBIGUITY: only a leading "RF" and a 27-digit length pin a scheme down. A bare 12-digit string is both a Belgian OGM and a legal Finnish length, so the more specific reading is returned and the other appears in also_valid_as. Pass reference_type when you know the country. THE PAIRING RULE — the part no checksum library reproduces: pass an iban and you also get a pairing verdict. Per the Swiss Implementation Guidelines a QRR reference may ONLY be used with a QR-IBAN (institution identifier in the SIX range 30000-31999), and an ISO 11649 reference may NOT be used with one. Outside CH and LI, pairing is not_applicable — there is no QR-IBAN to pair against — and that does not affect the reference's own checksum verdict. IMPORTANT: valid and pairing are INDEPENDENT. A reference can be arithmetically valid and still…

NameTypeReqDescription
ibanstring–Optional creditor IBAN — supply it to get the pairing verdict
referencestringyesThe reference as printed; spaces, slashes and the +++…+++ wrapper are stripped
reference_typestring–Optional hint: rf | scor | qrr | ogm | vcs | viitenumero | kid | ocr
NameTypeReqDescription
also_valid_asobject–The second reading of an ambiguous string, with its own verdict.
as_ofstring–YYYY-MM of that document.
check_digit_expectedstring–A STRING, so a two-digit value beginning with zero survives (OGM remainder 3 is "03", remainder 0 is "97").
notestringyesWhat was checked, and what was not.
pairingstring–Present only when an iban was supplied: ok | qrr_requires_qr_iban | scor_forbidden_with_qr_iban | not_applicable
pairing_as_ofstring––
pairing_sourcestring–The document publishing the pairing rule — a DIFFERENT one from source.
referencestringyesNormalized: uppercase, separators removed.
schemestring|nullyesrf | qrr | ogm | viitenumero | kid | ocr, or null when nothing matched.
sourcestring|nullyesThe document publishing the rule. Null only when no scheme matched. Relay it.
statusstringyeschecked | unverifiable_without_creditor_config | unrecognised
validboolean|nullyesnull means the scheme was recognised and cannot be checked without the creditor bank configuration. Never report null as false.

No examples provided.

Install

How do I install the io.github.cammac-creator/ibanforge MCP server?

io.github.cammac-creator/ibanforge is a hosted endpoint at https://api.ibanforge.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.ibanforge.com

# add to Claude Code
claude mcp add --transport http cammac-creator-ibanforge 'https://api.ibanforge.com/mcp'
Common questions

What is the io.github.cammac-creator/ibanforge MCP server?

io.github.cammac-creator/ibanforge is an MCP server listed in the public MCP registry as io.github.cammac-creator/ibanforge. Check the bank behind an IBAN before you pay: bank-code check, BIC with source, bank-level sanctions. This page covers its hosted endpoint (https://api.ibanforge.com/mcp).

Is the io.github.cammac-creator/ibanforge MCP server safe to use?

io.github.cammac-creator/ibanforge scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.cammac-creator/ibanforge MCP server expose?

io.github.cammac-creator/ibanforge exposes 11 tools: validate_iban, batch_validate_iban, lookup_bic, check_compliance, validate_payment_reference, and 6 more. Their descriptions and schemas cost roughly 6,318 tokens of context every time the server is loaded.

Does the io.github.cammac-creator/ibanforge MCP server require authentication?

Its publisher declares no required credentials for io.github.cammac-creator/ibanforge. We have not been able to confirm that against the live endpoint, and a server can require authorisation without declaring it here.

Is the io.github.cammac-creator/ibanforge MCP server still maintained?

io.github.cammac-creator/ibanforge is still listed in the MCP registry, though our most recent checks did not reach this channel. We last reached this channel on 3 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.