Skip to main content
Glama
koraykoylu

ibanchecker-mcp

README.md
# ibanchecker-mcp

[![npm version](https://img.shields.io/npm/v/@ibanchecker/mcp.svg)](https://www.npmjs.com/package/@ibanchecker/mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
[![Model Context Protocol](https://img.shields.io/badge/MCP-server-6E56CF.svg)](https://modelcontextprotocol.io)

MCP (Model Context Protocol) server for [ibanchecker.cash](https://ibanchecker.cash). Gives AI assistants like Claude five finance tools backed by the ibanchecker.cash validation engine:

| Tool | What it does |
|------|--------------|
| `validate_iban` | Validate a single IBAN: country, length, national BBAN structure, MOD-97 check digits, and bank details when available |
| `validate_bulk_ibans` | Validate up to 100 IBANs in one call |
| `extract_ibans_from_text` | Find and validate every IBAN inside a block of text (emails, invoices, spreadsheets) |
| `get_iban_format` | IBAN format specification for any of 92 supported countries |
| `lookup_bic` | Look up a bank by BIC/SWIFT code |

No IBAN data is logged or stored; validation runs in memory on Cloudflare's edge. See the [security page](https://ibanchecker.cash/security) for details.

## Quick start: hosted remote server

The easiest path is the hosted endpoint. Nothing to install or deploy. Every tool except `get_iban_format` needs an API key (see [API key](#api-key)).

```
https://mcp.ibanchecker.cash/mcp
```

**Claude Code**

```bash
claude mcp add --transport http ibanchecker https://mcp.ibanchecker.cash/mcp --header "Authorization: Bearer YOUR_API_KEY"
```

**Claude Desktop** (`claude_desktop_config.json`), via the [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) bridge:

```json
{
  "mcpServers": {
    "ibanchecker": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.ibanchecker.cash/mcp", "--header", "Authorization:${AUTH_HEADER}"],
      "env": {
        "AUTH_HEADER": "Bearer your-api-key-here"
      }
    }
  }
}
```

## Local stdio server

Run the server locally over stdio (requires Node 18+):

```json
{
  "mcpServers": {
    "ibanchecker": {
      "command": "npx",
      "args": ["-y", "@ibanchecker/mcp"],
      "env": {
        "IBANCHECKER_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

## Example

Calling `validate_iban` with `DE89370400440532013000` returns:

```json
{
  "valid": true,
  "iban": "DE89370400440532013000",
  "formatted": "DE89 3704 0044 0532 0130 00",
  "country_name": "Germany",
  "bank_name": "Commerzbank AG Cologne",
  "bic": "COBADEFFXXX",
  "bank_code": "37040044",
  "account_number": "0532013000",
  "sepa": true
}
```

When the API returns an error (for example a `429` rate limit, a `401` missing or bad key, or a `403` tool outside the key's plan), the tool result is flagged with `isError: true` and a human-readable message, so the assistant can react rather than crash.

## API key

Every tool except `get_iban_format` needs an API key, and what a key can call follows its plan:

| Tool | Free key | Free key with a verified account | Basic / Starter | Growth / Enterprise |
|---|---|---|---|---|
| `validate_iban` | yes | yes | yes | yes |
| `validate_bulk_ibans` | no | up to 10 IBANs a call | up to 100 | up to 100 |
| `lookup_bic` | no | yes | yes | yes |
| `extract_ibans_from_text` | no | up to 5,000 characters a call | trial with a verified account | up to 50,000 |
| `get_iban_format` | yes | yes | yes | yes |

`get_iban_format` also works without a key, up to 100 requests an hour per IP. A free key covers 100 requests a month and arrives by email in seconds: get one at [ibanchecker.cash/api-docs](https://ibanchecker.cash/api-docs). A free account on the same address, at [ibanchecker.cash/dashboard](https://ibanchecker.cash/dashboard), opens the trials. Bulk validation and extraction count one request per IBAN. See [ibanchecker.cash/pricing](https://ibanchecker.cash/pricing) for higher volumes. Pass the key as:

- `IBANCHECKER_API_KEY` env var (stdio mode), or
- `Authorization: Bearer <key>` / `x-api-key` header (remote mode).

## Project layout

```
.
├── bin/stdio.mjs      # npm CLI entry (published as `ibanchecker-mcp`)
├── shared/tools.mjs   # the 5 tool definitions, shared by both transports
└── worker/            # Cloudflare Worker (the hosted remote server)
    ├── src/index.ts
    └── wrangler.toml
```

Both the stdio CLI and the Worker register the exact same tools from `shared/tools.mjs`, so there is a single source of truth.

## Self-hosting the Worker

The remote server is a Cloudflare Worker built on the [Agents SDK](https://developers.cloudflare.com/agents/). Deploy your own:

```bash
cd worker
npm install
npx wrangler deploy
```

Remove the `routes` block in `worker/wrangler.toml` (or point it at your own domain) and optionally set a server-wide key with `npx wrangler secret put IBANCHECKER_API_KEY`.

## License

MIT. See [LICENSE](./LICENSE).

TDQS

A4.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: single validation, bulk validation, text extraction, format specification, and BIC lookup. The descriptions explicitly guide when to use one over another, such as preferring bulk over looping single validation.

Naming Consistency5/5

All tool names use snake_case with a consistent verb_noun structure (validate_iban, validate_bulk_ibans, get_iban_format, lookup_bic). The longer extract_ibans_from_text still follows the same readable pattern.

Tool Count5/5

Five tools is well-scoped for an IBAN validation service. Each tool covers a distinct operation and none feels redundant or excessive.

Completeness4/5

The core validation lifecycle is well covered: single, bulk, extraction from text, format lookup, and BIC resolution. A minor gap is the lack of a tool to enumerate all supported countries or list banks by country, but agents can work around this via format lookups.

Maintenance

ActivityMaintained
ResponsivenessNo issues