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

NPM · IBANFORGE-MCP · 2 COMPONENTS

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

−4 this week 87 Trust /100

Last scanned (20 hours ago)

Scores higher than 91% of npm servers

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 30 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to cammac-creator/ibanforge). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 27 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability61
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5690 tokens (~437/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management70
  • Stability observed for 21 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "send_feedback" implies "send" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
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 −4
    • Stability: pass → 0.70 functional
  • 22 Oct 26 +1
    • Stability: 0.97 → pass security
  • 21 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 17 Oct 26 +3
    • Stability: 0.80 → pass security
  • 16 Oct 26 −3
    • Stability: pass → 0.80 functional
  • 14 Oct 26 +42
    • Stability: unverified → pass ▲ security
    • Injection markers: unverified → pass ▲ security
    • MCP protocol: unverified → pass ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • Package version: 1.8.1 → 1.9.0 functional
  • 11 Oct 26 −41
    • Tool safety: pass → unverified ▼ security
    • Stability: 0.93 → unverified ▼ security
    • Tool coverage: 100 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Package version: 1.8.1 → 1.9.0 functional
  • 4 Oct 26 0
    • Package version: 1.4.3 → 1.8.1 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 · Analysed npm/ibanforge-mcp@1.9.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo cammac-creator/ibanforge
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/cammac-creator/ibanforge/.github/workflows/release-publish.yml@refs/heads/main
Rekor log index 3133621438
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:ed2332819a2231efb9069ca55810bcdeab5d0b9f17074ab840f9ba4a3978c5166b918a852a48b56a97d4a2886ded69a52748b271f76c80fbc9f80c002

Background: How many MCP packages publish verified provenance →

Dependencies 92 packages
Packages resolved 92
Stale 30
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 13 exposed · ~5,079 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
audit_creditor_file ~610

Audit an entire creditor/supplier payment file (CSV or XLSX) row by row: IBAN structure and checksum, bank code against the national register, bank name and BIC, SEPA reachability and issuer type — plus checks a single IBAN call cannot make because they need the whole file: duplicate IBANs, the BIC the file carries against the BIC the register derives, address country against IBAN country, and Swiss structured-address conformity ahead of the 14 November 2026 deadline. USE WHEN: the user has a spreadsheet or export of creditor/supplier bank accounts (accounts-payable file, vendor master, payment batch) and wants it checked before sending payments, or asks to "audit my creditor file" / "check this supplier list" / "validate this payment batch". HOW: base64-encode the file bytes and pass them as `file_base64`, with the original `filename` (its extension decides CSV vs XLSX parsing). LIMITS: rejects files decoding to more than 5 MB — checked locally, before any network call, because a larger base64 payload breaks the stdio channel; the HTTP route itself accepts up to 10 MB — and sheets over 20,000 rows, which the route rejects (400 too_many_rows). RETURNS a FREE PREVIEW ONLY, never the full report: `job` (the id to reuse with audit_status), `rows`, `paid` (always false from this call), `price` / `currency` naming what the full report costs, `summary` (counts by status and finding code, countries seen, columns detected), and `preview` (the first flagged rows then the first OK ones, up to 20, IBANs masked like "CH10 **** 2346"). The annotated .xlsx report is a PAID deliverable — $149 up to 5,000 rows, $349 up to 20,000 — settled through a one-off Stripe Checkout Session. This tool NEVER pays automatically: pass `checkout: true` to also receive a Checkout URL for a HUMAN to open, then poll audit_status with the same `job` id to learn when it is paid and get the download link. COST: free. Only the full report is paid, and only once a human completes the Stripe checkout.

NameTypeReqDescription
checkoutboolean–When true, immediately create a Stripe Checkout Session after the upload and return its URL for a human to open and pay. Defaults to false. Never pays anything by itself.
file_base64stringyesThe CSV or XLSX file content, base64-encoded — the raw payload only, no "data:" URL prefix.
filenamestringyesOriginal filename with its extension, e.g. "creditors.csv" or "suppliers.xlsx". The extension decides how the file is parsed.
langstring–Language for the summary labels and, later, the annotated report. Defaults to "en".
NameTypeReqDescription
_notestring–Plain-language reminder that this is a free preview and how to get the paid report.
checkoutstring|null–Route to call for payment, e.g. "POST /v1/audit/checkout/{job}". Null once paid.
checkout_session_idstring–Present alongside checkout_url — pass it to audit_status as `session_id` right after a human pays.
checkout_urlstring–Present only when `checkout: true` was passed and the session was created: a Stripe Checkout URL for a human to open.
currencystring––
downloadstring|null–Set only once paid and with the matching session — always null from this tool.
jobstringyesJob id — pass to audit_status to poll payment and get the download link.
langstring––
paidbooleanyesAlways false from this tool — nothing has been paid yet.
previewarrayyesFirst flagged rows then first OK rows, up to 20. IBANs are masked.
pricenumber–Price of the full report, in the currency given by `currency` (USD), decided by row count alone.
retentionstring–How long the job is kept before it purges.
rowsnumberyes–
summaryobjectyesCounts by status and finding code, countries seen, columns detected. Mirrors AuditSummary in the API.
tierstring––

No examples provided.

audit_status ~220

Check the status of a creditor-file audit job created by audit_creditor_file: whether it is paid, and the download link once it is. USE WHEN: following up on a `job` id after a human may have paid through the Checkout URL, to learn whether the full report is ready. RETURNS: the same free-preview fields as audit_creditor_file, plus `paid`, `paid_at`, and `download` — a `GET /v1/audit/report/{job}?session_id=...` path, non-null only once paid AND `session_id` matches the paying session. Pass the `session_id` from the Checkout URL's success redirect (its `session_id=` query parameter) so a just-completed payment is confirmed immediately instead of waiting for the webhook. COST: free.

NameTypeReqDescription
jobstringyesThe job id returned by audit_creditor_file.
session_idstring–The Stripe Checkout session id, from the success redirect (?session_id=...). Confirms payment immediately when the webhook has not landed yet.
NameTypeReqDescription
checkoutstring|null––
currencystring––
downloadstring|null–GET path for the .xlsx report. Non-null only when paid and session_id matched.
expires_atstring––
jobstringyes–
langstring––
paidbooleanyes–
paid_atstring|null––
previewarray––
pricenumber––
retentionstring––
rowsnumber––
summaryobject––
tierstring––

No examples provided.

batch_validate_iban ~234

Validate up to 100 IBANs in a single call. Paid per call in USDC via x402, an IBAN costs $0.002 here instead of $0.005 for validate_iban; on a key or prepaid credits, each IBAN uses one request or one credit either way. 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_usdc }. COST: via x402, 0.002 USDC per IBAN (e.g. 10 IBANs = 0.02, 100 IBANs = 0.20); on a key or prepaid credits, one request or one credit per IBAN.

NameTypeReqDescription
ibansarrayyesArray of IBAN strings (1 to 100 entries).
NameTypeReqDescription
cost_usdcnumber–Actual USDC charged for this call.
countnumberyesNumber of IBANs processed.
resultsarrayyesOne entry per input IBAN, in the same order. Same shape as validate_iban output.
valid_countnumberyesHow many were valid.

No examples provided.

check_compliance ~316

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). COST: 0.02 USDC.

NameTypeReqDescription
ibanstringyesIBAN to run the compliance check against.
NameTypeReqDescription
bicobject|null–null when the bank code resolves no BIC; the bank-level sanctions check then has no bank to screen (compliance.sanctions.bank_screened: false).
complianceobjectyesThe compliance bundle. Read the score at compliance.risk_score / compliance.risk_level.
cost_usdcnumber––
countryobject––
ibanstringyes–
issuerobject––
metaobject–Scope + freshness disclosure. Read this before trusting the result.
risk_indicatorsobject––
sepaobject––
validbooleanyes–

No examples provided.

check_postal_address ~388

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 learn whether the rail accepts it BEFORE submitting. The November 2026 changes (SIC 20.11, Fedwire 16.11, T2 R2026.NOV) remove the fully unstructured address option — this check tells you whether an address survives them. DO NOT USE to verify that a street or town EXISTS: this checks conformity with the message format rules, not postal reality. 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 per finding: pass, fail, 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. That is what makes the verdict auditable. COST: free (routed to POST /v1/address/check). The paid surface is the postal_address block that lookup_bic and validate_iban return for the resolved institution.

NameTypeReqDescription
addressobjectyesThe ISO 20022 PostalAddress under test, in ISO tag vocabulary (snake_cased).
schemestringyesWhich rail's rules to check against.
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.
schemestringyes–

No examples provided.

check_swiss_qr_bill ~400

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. IMPORTANT: relay each finding's source string. COST: free (routed to POST /v1/ch/qr-bill/check).

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_schemesarray––
amountstring|null––
billing_informationstring|null––
codingstring––
creditorobject––
creditor_ibanobject––
currencystring|null––
findingsarrayyes–
next_stepsarrayyes–
qr_typestring––
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…
referenceobject––
sourcestringyes–
trailerstring––
ultimate_creditor_emptyboolean––
ultimate_debtorobject––
unstructured_messagestring|null––
validbooleanyesTrue when no finding has severity error.
versionstring––

No examples provided.

lookup_bic ~272

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: a BIC directory of GLEIF and national registers, refreshed monthly, plus a public copy of the SWIFT directory frozen in January 2018 that still makes up most of the rows; only the GLEIF rows carry an LEI. Live counts: https://api.ibanforge.com/llms.txt. RETURNS: bank_name, country, country_name, city, lei, address (if available). COST: 0.003 USDC.

NameTypeReqDescription
bicstringyesBIC / SWIFT code, 8 or 11 alphanumeric characters. Example: "UBSWCHZH80A" (UBS Switzerland) or "DEUTDEFF" (Deutsche Bank Frankfurt).
NameTypeReqDescription
addressobject|null–Registered head-office address (GLEIF). null when the BIC carries no LEI or address.
address_availableboolean––
bicstringyesEcho of the input, normalized to uppercase.
bic11string–11-char form including branch.
bic8string–8-char form (institution-level).
citystring|null––
countryobject––
foundbooleanyes–
institutionstring|null–Bank legal name. null when the BIC is not found.
leistring|null–Legal Entity Identifier (ISO 17442); null when none is on file.
valid_formatbooleanyes–

No examples provided.

lookup_ch_clearing ~297

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: the SIX BankMaster (Swiss official source, refreshed monthly); live count at https://api.ibanforge.com/llms.txt. 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. COST: 0.003 USDC. Only relevant for CH and LI accounts.

NameTypeReqDescription
iidstringyesSwiss IID / BC-Nummer (1 to 5 digits, leading zeros stripped). Example: "230" for UBS Switzerland AG.
NameTypeReqDescription
addressobject––
bicstring|null–BIC if mapped, null otherwise.
foundbooleanyes–
iidstringyes5-digit zero-padded BC-Nummer.
institutionobject––
payment_servicesobject––
qr_iidstring|null–QR-IID allocation, null when none.
sic_iidstring|null––
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|null–Present exactly once, on the first approved poll.
config_linestring|null–The exact command line to give the human. Do not run it yourself.
emailstring|null–Absent on the anonymous tier: no address was ever given.
expires_innumber|null––
key_prefixstring|null––
messagestringyesOne sentence for the human.
monthly_limitnumber|null––
retry_in_secondsnumber|null––
statusstringyesauthorization_pending is normal: wait `retry_in_seconds` and call again.
tierstring|null–anonymous = 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|null–Seconds until the code stops working.
intervalnumber|null–Minimum seconds between two poll_api_key calls.
statusstringyesok means a code was issued. Anything else: read display_to_human and fall back.
user_codestring|null–Show this to the human, exactly as written, e.g. WDJB-MJHT.
verification_uristring|null–The page the human opens. Never open it yourself.
verification_uri_completestring|null–Same 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 ~769

Verify whether an IBAN from any IBAN country 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: valid (boolean), country { code, name }, bic { code, bank_name, city, basis, authoritative — basis says where the bank code to BIC pairing came from, and outside a national_register pairing the BIC is advisory rather than something to settle against }, issuer { type: bank | digital_bank | emi | payment_institution | null when unsubstantiated, name, classification }, bank_code_check { status, authoritative — read authoritative to know how much a "verified" is worth; reason — one token saying WHY an answer is not verified, and in particular whether the code is denied by a register or whether we simply could not answer }, sepa { member, schemes, vop_required, vop_participant — is the recipient bank listed as ready in the EPC VoP register }, next_steps (recommended follow-ups with reasons), risk_indicators { issuer_type, country_risk, test_bic, sepa_reachable, vop_coverage }, and for CH/LI: clearing { iid, name, type, sic, qr_iid }. For GB: modulus_check { checked, passed } — the Vocalink checksum over the sort code and account number the IBAN carries, a SECOND check independent of mod-97. passed false means the pair cannot be…

NameTypeReqDescription
ibanstringyesIBAN to validate. Spaces and lowercase are accepted. Example: "de89370400440532013000" or "CH10 0023 0000 0000 1234 5".
NameTypeReqDescription
bank_code_checkobject–Whether the bank code resolves in reference data. Read authoritative: true means the reference set is the national register (not_in_register = not allocated); false means composite BIC-directory data…
bbanobject––
bicobject|null–Resolved BIC/SWIFT (when BBAN→BIC mapping exists). null if unresolved. Read basis before storing it as a routing instruction: only a national_register pairing is settlement-grade.
check_digitsstring––
clearingobject|null–Swiss clearing data when country is CH or LI. null when the SIX register holds no such IID (an unallocated Swiss bank code).
countryobject––
formattedstring–IBAN with 4-char groups for display.
ibanstringyesNormalized IBAN (uppercase, no spaces).
issuerobject––
modulus_checkobject–UK modulus check when country is GB (absent otherwise). Checksum only: it does not prove the account exists or name its holder.
next_stepsarray–Recommended machine-readable follow-ups, each with the reason it is suggested.
official_identityobject–The official identity a central bank publishes for the institution behind 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 nega…
risk_indicatorsobject–Country + issuer risk signals. Use these instead of a single composite score.
sepaobject––
validbooleanyes–

No examples provided.

validate_payment_reference ~607

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; or when the user pastes an "RF..." string, a 27-digit number, or a +++123/4567/89012+++ block. 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. NEVER relay those to a user as "invalid". 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: 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. valid and pairing are INDEPENDENT verdicts — a reference can be arithmetically valid and still illegal on that account. Relay source/as_of: they make the verdict auditable. COST: free without an iban (routed to GET /v1/reference/validate). WITH an iban it is routed to POST /v1/iban/validate and costs 0.005 USDC, which also returns the full IBAN enrichment — the pairing verdict is what that call buys.

NameTypeReqDescription
ibanstring–Optional creditor IBAN this reference would travel with. Supply it for the pairing verdict; that path is billed at 0.005 USDC.
referencestringyesThe reference as printed. Spaces, slashes and the Belgian +++...+++ wrapper are stripped. Examples: "RF18539007547034", "210000000003139471430009017", "+++010/8068/17183+++".
reference_typestring–Optional scheme hint, used when the string alone is ambiguous.
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 ("03", "97").
notestringyes–
pairingstring–Present only when an iban was supplied.
pairing_as_ofstring––
pairing_sourcestring–A DIFFERENT document from source.
referencestringyesNormalized: uppercase, separators removed.
schemestring|nullyesNull when no supported scheme matches.
sourcestring|nullyesThe document publishing the rule. Null only when no scheme matched. Relay it.
statusstringyes–
validboolean|nullyesnull means recognised but uncheckable without the creditor bank configuration (KID, OCR). 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 runs locally as an npm package, launched with npx -y ibanforge-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · ibanforge-mcp

# add to Claude Code
claude mcp add cammac-creator-ibanforge -- npx -y ibanforge-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 npm package (ibanforge-mcp).

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

io.github.cammac-creator/ibanforge scores 87 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. 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 13 tools: validate_iban, batch_validate_iban, lookup_bic, lookup_ch_clearing, validate_payment_reference, and 8 more. Their descriptions and schemas cost roughly 5,079 tokens of context every time the server is loaded.

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

io.github.cammac-creator/ibanforge is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

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

io.github.cammac-creator/ibanforge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.