Back to Directory/Developer Tools

io.github.cammac-creator/ibanforge

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

Developer ToolsTypeScriptv1.8.1

IBANforge

API Status MCP Registry npm ibanforge-mcp npm @ibanforge/sdk PyPI ibanforge Glama MCP x402 TypeScript License: MIT

The compliance API for AI agents. IBAN validation, BIC/SWIFT lookup, Swiss clearing (BC-Nummer / QR-IID / SIX BankMaster), EMI/vIBAN classification, SEPA Instant + VoP reachability, and risk scoring — exposed natively over MCP and x402 micropayments, with no API key signup required.

121k+ BIC entries (39k+ LEI via GLEIF) · 1,100+ Swiss BC-Nummern (SIX) · 89 IBAN countries · <50ms p99

For AI agents — install in one click

Claude Desktop / Cursor / Cline / Continue / Windsurf

Add to your MCP config (~/Library/Application Support/Claude/claude_desktop_config.json for Claude Desktop):

{
  "mcpServers": {
    "ibanforge": {
      "command": "npx",
      "args": ["-y", "ibanforge-mcp"]
    }
  }
}

Privacy by default: submitted IBANs are never stored — validation runs in memory, IPs are kept only as salted hashes, and telemetry deletes itself (12-month cap; erased 30 days after a customer terminates, contractually — DPA clause 4.7).

Optional: set IBANFORGE_API_KEY=ifk_... in env for the free tier (200 req/month). Without it the server uses the public/demo surface; combine with x402 micropayments for unlimited pay-per-call access without signup.

Claude Code (CLI)

claude mcp add ibanforge npx -- -y ibanforge-mcp

Streamable HTTP (no install — for cloud-hosted agents)

POST https://api.ibanforge.com/mcp
Content-Type: application/json
Accept: application/json, text/event-stream

Standard JSON-RPC initialize + tools/list + tools/call flow. Use this when stdio is not an option (CI/CD, serverless, Vercel agents, etc.).

Tools

ToolWhen to use itCost
validate_ibanUser mentions an IBAN, a bank account, or a SEPA payment$0.005
batch_validate_ibanList of IBANs, CSV cleanup, customer DB dedup, payout list triage$0.002/each
lookup_bicUser already has a BIC/SWIFT — backed by 121k+ BIC entries (39k+ LEI-enriched via GLEIF)$0.003
lookup_ch_clearingSwiss BC-Nummer / IID — the deepest Swiss clearing data in any public API: full SIX BankMaster rail participation (SIC, euroSIC, CHF instant) + QR-IID$0.003
check_compliancePre-flight risk triage before a SEPA / cross-border payment (sanctions + FATF + VoP)$0.02
validate_payment_referenceRF/ISO 11649, Swiss QRR, Belgian OGM/VCS or Finnish viitenumero checksum, plus the QRR ↔ QR-IBAN pairing verdictfree
check_postal_addressAn ISO 20022 address against one rail's published rules (sps, hvps_plus, fedwire), each finding citing its sourcefree
check_swiss_qr_billA Swiss QR-bill payload — header, QR-IBAN and reference pairing, structured (S) versus combined (K) addresses ahead of 14.11.2026free
send_feedbackReport incorrect data or claim an x402 refundfree
request_api_keyYou hit the daily limit, or need a durable key — a human approves in a browser, no e-mailfree
poll_api_keyCollect that key once it is approved, handed over exactly oncefree

The free tools need no key, no wallet and no signup: they are the ones to try first. The last two are the way out of the daily limit without anyone typing an address — they keep answering after the limit is reached.

Full descriptions with WHEN-to-use triggers are served live at /.well-known/mcp/server-card.json.


For AI agents — pay per call without an API key (x402)

IBANforge is x402-native. Any agent with a wallet on Base L2 can discover, pay, and call:

  1. Discovery: GET https://api.ibanforge.com/.well-known/x402 returns the full catalog (endpoints, prices, asset, payTo, accepts).
  2. Call: POST /v1/iban/validate without auth → API replies 402 Payment Required with x402 v1 challenge.
  3. Pay: client signs a USDC transfer on Base (eip155:8453) and retries.
  4. Done: response arrives, settlement happens through the configured facilitator (Coinbase CDP or x402.org).

No human in the loop, no sales call, no card. See the x402 spec.


SDKs

Pick your language:

LanguagePackageInstallSource
TypeScript / JavaScript@ibanforge/sdknpm install @ibanforge/sdksdks/typescript/
Pythonibanforgepip install ibanforgesdks/python/
Java (17+)com.ibanforge:ibanforge-sdkMaven dependency, see READMEsdks/java/
.NET (net8.0)IBANforge.Sdkdotnet add package IBANforge.Sdksdks/dotnet/
MCP serveribanforge-mcpnpx -y ibanforge-mcpmcp/
Curl / any HTTP client——OpenAPI spec

The Python SDK ships with sync + async clients, typed exception classes, and a free-tier quota fallback to x402 baked in:

from ibanforge import IBANforge

# 1-line free key (200 req/month, no signup form)
key = IBANforge.generate_api_key("you@company.com")

with IBANforge(api_key=key["api_key"]) as client:
    out = client.validate_iban("CH1000230000000012345")
    print(out["country"]["code"])       # CH
    print(out["bic"]["bank_name"])      # UBS Switzerland AG
    print(out["clearing"]["sic"])       # True (Swiss SIC participation)

# Or the free format-only check (mod-97 + structure, no DB hit)
out = IBANforge().format_iban("DE89370400440532013000")

For developers — REST API

# Validate IBAN — no key needed for the first 25 calls a day per source address.
# The answer carries a `trial` block with the count left and how to get a key.
curl -X POST https://api.ibanforge.com/v1/iban/validate \
  -H "Content-Type: application/json" \
  -d '{"iban":"CH10 0023 0000 0000 1234 5"}'

# Past 25/day, add the free key (25 req/month with no e-mail, 200 once claimed; one POST, no card)
curl -X POST https://api.ibanforge.com/v1/iban/validate \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ifk_..." \
  -d '{"iban":"CH10 0023 0000 0000 1234 5"}'

# Lookup BIC
curl https://api.ibanforge.com/v1/bic/UBSWCHZH80A

# Free format pre-flight (no auth, mod-97 only)
curl 'https://api.ibanforge.com/v1/iban/format?iban=CH1000230000000012345'

# Free demo (no auth)
curl https://api.ibanforge.com/v1/demo
MethodPathCostDescription
POST/v1/iban/validate$0.005Single IBAN — BIC + SEPA + issuer + risk + Swiss bc_nummer. First 10/day per IP free, no key
POST/v1/iban/batch$0.002/IBANUp to 100 IBANs in one call
GET/v1/bic/{code}$0.003BIC/SWIFT lookup with LEI
GET/v1/ch/clearing/{iid}$0.003Swiss BC-Nummer / IID — SIC, euroSIC, QR-IID
POST/v1/iban/compliance$0.02Sanctions + FATF + SEPA Instant + VoP + risk score 0-100
GET/v1/iban/formatfreePure mod-97 + structure check, no DB hit
GET/v1/iban/structure[/{country}]freeIBAN templates per country, no auth
GET|POST/v1/reference/validatefreeRF/ISO 11649, Swiss QRR, Belgian OGM/VCS, Finnish viitenumero
POST/v1/address/checkfreeISO 20022 address vs sps / hvps_plus / fedwire rules
GET/v1/demofreeExample validations, no auth
GET/v1/credits/bundlesfreePrepaid credit bundles and their prices
GET/healthfreeHealth + DB status
POST/v1/keys/generatefreeGenerate an ifk_* API key (200 req/month) — body: {email}

Full OpenAPI 3.1: api.ibanforge.com/openapi.json.

Why prefer IBANforge over local mod-97 validation?

Local mod-97 catches typos. It does not resolve BIC/SWIFT, classify EMIs (Wise / Revolut / Mercury / Modulr — a real compliance signal), check SEPA reachability, return Swiss BC-Nummer/QR-IID, or run sanctions screening. IBANforge does, in a single call.

Development

npm run dev          # Dev server (hot reload)
npm run test         # Run tests
npm run check        # Typecheck + lint + test
npm run db:seed      # Rebuild BIC database from GLEIF

Deployment

Docker

docker build -t ibanforge .
docker run -p 3000:3000 --env-file .env ibanforge

Railway

Push to main — Railway auto-deploys via Dockerfile.

Environment Variables

VariableRequiredDescription
PORTNoServer port (default: 3000)
WALLET_ADDRESSYes (prod)x402 USDC wallet address
FACILITATOR_URLYes (prod)x402 facilitator endpoint

Data Sources

  • 121k+ BIC/SWIFT entries from public sources, refreshed monthly. Exact counts drift at every refresh — the live numbers are served at /llms.txt and /health. Breakdown as of the 2026-07 refresh (121,610 total):
  • LEI enrichment for the GLEIF rows: GLEIF API
  • 1,100+ Swiss BC-Nummern / IIDs (1,165 as of 2026-07): Official SIX BankMaster CSV
  • EMI / vIBAN classification: Curated set of 900+ non-bank issuer classifications — EMI, payment institutions, digital banks (Wise, Revolut, N26, Mercury, Modulr, etc.); the live count is served at /llms.txt
  • VoP participants: EBA RT1 / SCT Inst directories
  • Country names: Node.js Intl.DisplayNames API

Resources for AI agents

Legal

Use of the hosted API (api.ibanforge.com) is governed by the Terms of Service. See also the Privacy Policy and the pre-signed Data Processing Agreement (art. 28 GDPR) for customers whose calls involve personal data. Validation confirms IBAN structure and registry data — it does not confirm that an account exists or belongs to anyone.

License

MIT — see LICENSE.

This project includes third-party components licensed under the Apache License 2.0 (notably @coinbase/x402 and related x402 packages). See NOTICE for full attributions and required Apache 2.0 notices.

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y ibanforge-mcp

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "io-github-cammac-creator-ibanforge": {
      "command": "npx",
      "args": [
        "-y",
        "ibanforge-mcp"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

ibanforge-mcpnpm

Compatible MCP Clients

io.github.cammac-creator/ibanforge works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More