Checks EU VAT IDs, Swiss UIDs, EORI, Peppol, LEI, IBAN/BIC and tax ID formats, with source.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculates the statutory minimum interest on a late business payment. Euro area: ECB main refinancing rate on 1 January / 1 July of each half-year plus 8 percentage points, split by half-year, plus a fixed 40 EUR compensation (Directive 2011/7/EU); the ECB rate is loaded live. Switzerland: 5 % per year (Art. 104 OR). Returns the formula, the rate for each period and the amounts. Contracts and national laws can differ.
The overdue amount (EUR for euro area countries, CHF for Switzerland).
Two-letter code of the country whose law applies, e.g. DE, SK, CH.
Due date of the invoice, YYYY-MM-DD. Interest runs from the next day.
Optional currency code; default EUR (euro area) or CHF (Switzerland).
Date of payment, YYYY-MM-DD. Default: today.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http b2b-check https://b2b.mdb-group.info/mcp
Calculates the statutory minimum interest on a late business payment. Euro area: ECB main refinancing rate on 1 January / 1 July of each half-year plus 8 percentage points, split by half-year, plus a fixed 40 EUR compensation (Directive 2011/7/EU); the ECB rate is loaded live. Switzerland: 5 % per year (Art. 104 OR). Returns the formula, the rate for each period and the amounts. Contracts and national laws can differ.
| Argument | Type | Description |
|---|---|---|
| amount* | number | The overdue amount (EUR for euro area countries, CHF for Switzerland). |
| country* | string | Two-letter code of the country whose law applies, e.g. DE, SK, CH. |
| currency | string | Optional currency code; default EUR (euro area) or CHF (Switzerland). |
| due_date* | string | Due date of the invoice, YYYY-MM-DD. Interest runs from the next day. |
| payment_date | string | Date of payment, YYYY-MM-DD. Default: today. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"amount",
"due_date",
"country"
],
"properties": {
"amount": {
"type": "number",
"description": "The overdue amount (EUR for euro area countries, CHF for Switzerland).",
"exclusiveMinimum": 0
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter code of the country whose law applies, e.g. DE, SK, CH."
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "Optional currency code; default EUR (euro area) or CHF (Switzerland)."
},
"due_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Due date of the invoice, YYYY-MM-DD. Interest runs from the next day."
},
"payment_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date of payment, YYYY-MM-DD. Default: today."
}
}
}One report on a business partner before invoicing or delivering: VAT ID (VIES or Swiss UID register), EORI customs number (the given one, or the VAT ID tried as EORI), Peppol e-invoicing reachability, and LEI with parent company. Each part names its own source and time and has its own status; a part whose source is down says so without affecting the others. No sanctions screening.
| Argument | Type | Description |
|---|---|---|
| lei | string | Optional: the partner's LEI code. |
| eori | string | Optional: the partner's EORI number, if different from the VAT ID. |
| name | string | Optional: the partner's name, used for the LEI search when the register publishes none. |
| vat_id* | string | The partner's VAT ID or Swiss UID. |
| requester_vat_id | string | Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vat_id"
],
"properties": {
"lei": {
"type": "string",
"maxLength": 30,
"description": "Optional: the partner's LEI code."
},
"eori": {
"type": "string",
"maxLength": 40,
"description": "Optional: the partner's EORI number, if different from the VAT ID."
},
"name": {
"type": "string",
"maxLength": 200,
"description": "Optional: the partner's name, used for the LEI search when the register publishes none."
},
"vat_id": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The partner's VAT ID or Swiss UID."
},
"requester_vat_id": {
"type": "string",
"maxLength": 40,
"description": "Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose."
}
}
}Checks up to 10 EU EORI customs numbers (incl. XI) live in the European Commission's EOS validation service. Returns registered / not registered, and name and address where the holder agreed to publish them. GB EORI numbers are not supported.
| Argument | Type | Description |
|---|---|---|
| eori_numbers* | array | 1 to 10 EORI numbers with country code, e.g. DE1234567890123. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"eori_numbers"
],
"properties": {
"eori_numbers": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "1 to 10 EORI numbers with country code, e.g. DE1234567890123."
}
}
}Offline check of up to 20 IBANs: format, length for the country and check digits. Optionally compares the account's country with the partner's country (give a country code or the partner's VAT ID) and flags a mismatch as a notice. It cannot verify who owns the account.
| Argument | Type | Description |
|---|---|---|
| ibans* | array | 1 to 20 IBANs, with or without spaces. |
| partner | string | Optional: the partner's two-letter country code or VAT ID, to compare with the account's country. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ibans"
],
"properties": {
"ibans": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "1 to 20 IBANs, with or without spaces."
},
"partner": {
"type": "string",
"maxLength": 60,
"description": "Optional: the partner's two-letter country code or VAT ID, to compare with the account's country."
}
}
}Checks one IBAN with an optional BIC before paying or saving bank details: IBAN length for the country (SWIFT IBAN Registry, 89 countries) and check digits; BIC format (8 or 11 characters), BIC country against the IBAN country, and the bank behind the BIC where GLEIF's BIC-to-LEI list has it. Optionally compares the account country with the partner's country. It cannot verify who owns the account.
| Argument | Type | Description |
|---|---|---|
| bic | string | Optional: the BIC (SWIFT code), 8 or 11 characters, e.g. DEUTDEFF or UBSWCHZH80A. |
| iban* | string | The IBAN, with or without spaces. |
| partner | string | Optional: the partner's two-letter country code or VAT ID, to compare with the account's country. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"iban"
],
"properties": {
"bic": {
"type": "string",
"maxLength": 20,
"description": "Optional: the BIC (SWIFT code), 8 or 11 characters, e.g. DEUTDEFF or UBSWCHZH80A."
},
"iban": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "The IBAN, with or without spaces."
},
"partner": {
"type": "string",
"maxLength": 60,
"description": "Optional: the partner's two-letter country code or VAT ID, to compare with the account's country."
}
}
}Checks one EU VAT ID (27 member states plus XI) or one Swiss UID live in the official register (VIES or the Swiss UID register). Returns valid / invalid / unavailable / format_error, the registered name and address where published, the source with the time of the check (UTC) and a ready-to-file record. Accepts any common spelling (spaces, dots, dashes, lower case, 'MWST'). Use before reverse-charge invoices or to verify a business partner.
| Argument | Type | Description |
|---|---|---|
| vat_id* | string | The VAT ID or Swiss UID, with country prefix, e.g. DE123456789, ATU12345678 or CHE-123.456.789 MWST. |
| expected_city | string | Optional: expected city, compared by VIES. |
| expected_name | string | Optional: the company name you expect. VIES compares it with the register where the country supports this (e.g. Spain). |
| expected_street | string | Optional: expected street, compared by VIES. |
| requester_vat_id | string | Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose. |
| expected_postal_code | string | Optional: expected postal code, compared by VIES. |
Checks up to 20 EU VAT IDs and/or Swiss UIDs live in the official registers. Returns one result per number in the same order, plus a summary count. Duplicates are looked up once.
| Argument | Type | Description |
|---|---|---|
| vat_ids* | array | 1 to 20 VAT IDs or Swiss UIDs, each with country prefix. |
| requester_vat_id | string | Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vat_ids"
],
"properties": {
"vat_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"minLength": 1
},
"maxItems": 20,
"minItems": 1,
"description": "1 to 20 VAT IDs or Swiss UIDs, each with country prefix."
},
"requester_vat_id": {
"type": "string",
"maxLength": 40,
"description": "Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose."
}
}
}Looks up a company's LEI in the GLEIF database: by LEI code (with entity status, registration status, BIC and direct and ultimate parent company) or by company name (possible matches, optionally filtered by country).
| Argument | Type | Description |
|---|---|---|
| lei | string | A 20-character LEI code. |
| name | string | Company name, if no LEI is known. |
| country | string | Optional two-letter country code for a name search. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"lei": {
"type": "string",
"maxLength": 30,
"description": "A 20-character LEI code."
},
"name": {
"type": "string",
"maxLength": 120,
"minLength": 3,
"description": "Company name, if no LEI is known."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Optional two-letter country code for a name search."
}
}
}Looks up whether a company is listed in the Peppol Directory and can receive e-invoices via Peppol. Search by VAT ID (the usual Peppol identifiers are derived automatically) or by company name. Returns the Peppol ID(s) and which documents the company receives. Not being listed does not prove the company is unreachable.
| Argument | Type | Description |
|---|---|---|
| name | string | Company name, if no VAT ID is known. |
| vat_id | string | The company's VAT ID or Swiss UID. |
| country | string | Optional two-letter country code for a name search. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 3,
"description": "Company name, if no VAT ID is known."
},
"vat_id": {
"type": "string",
"maxLength": 60,
"description": "The company's VAT ID or Swiss UID."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Optional two-letter country code for a name search."
}
}
}Searches the public Swiss UID register by company name (optionally with postal code or town) and returns up to 10 matches with UID, name, address and VAT registration status. Use it when the user knows a Swiss company's name but not its UID.
| Argument | Type | Description |
|---|---|---|
| name* | string | Company name or a distinctive part of it, at least 3 characters. |
| town | string | Optional town. |
| postal_code | string | Optional Swiss postal code, 4 digits. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"minLength": 3,
"description": "Company name or a distinctive part of it, at least 3 characters."
},
"town": {
"type": "string",
"maxLength": 80,
"description": "Optional town."
},
"postal_code": {
"type": "string",
"pattern": "^\\d{4}$",
"description": "Optional Swiss postal code, 4 digits."
}
}
}Returns the European Central Bank's euro reference rate for a currency on a given date (or the last rate before it, on weekends and holidays), and optionally converts an amount to or from euro. Use it for invoices in foreign currency.
| Argument | Type | Description |
|---|---|---|
| date | string | Date as YYYY-MM-DD, e.g. the invoice date. Default: today. |
| amount | number | Optional amount to convert. |
| currency* | string | Three-letter currency code, e.g. CHF, USD, CZK. |
| direction | string | to_eur (default): the amount is in the currency and is converted to euro. from_eur: the amount is in euro. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"currency"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD, e.g. the invoice date. Default: today."
},
"amount": {
"type": "number",
"description": "Optional amount to convert."
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "Three-letter currency code, e.g. CHF, USD, CZK."
},
"direction": {
"enum": [
"to_eur",
"from_eur"
],
"type": "string",
"description": "to_eur (default): the amount is in the currency and is converted to euro. from_eur: the amount is in euro."
}
}
}Offline check of format and check digit for up to 50 tax or company numbers outside the EU (e.g. GB VAT, NO, AU ABN, NZ IRD, SG UEN, JP corporate number, CA BN, US EIN, IN GSTIN, BR CNPJ, MX RFC, TR, ZA, KR, AR, CL, CN, CO, IL, RU, UA) as well as EU VAT IDs and Swiss UIDs. Each answer states its depth: 'only the format was checked' or 'not supported'. It never says that a number is registered.
| Argument | Type | Description |
|---|---|---|
| tax_ids* | array | 1 to 50 numbers, each with its country. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tax_ids"
],
"properties": {
"tax_ids": {
"type": "array",
"items": {
"type": "object",
"required": [
"country",
"number"
],
"properties": {
"number": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The number, with or without separators."
},
"country": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Two-letter country code, e.g. AU."
}
}
},
"maxItems": 50,
"minItems": 1,
"description": "1 to 50 numbers, each with its country."
}
}
}Offline check of format and check digit for up to 100 EU VAT IDs or Swiss UIDs, without contacting any register. Fast and unlimited. It cannot tell whether a number is registered; use check_vat_id for that.
| Argument | Type | Description |
|---|---|---|
| vat_ids* | array | 1 to 100 VAT IDs or Swiss UIDs. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vat_ids"
],
"properties": {
"vat_ids": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60,
"minLength": 1
},
"maxItems": 100,
"minItems": 1,
"description": "1 to 100 VAT IDs or Swiss UIDs."
}
}
}Checks whether a receipt from this service is genuine and unchanged, using MDB Group's published public keys (https://b2b.mdb-group.info/.well-known/mdb-receipt-keys.json). Pass the receipt object (or the whole tool result that contains it, or its JSON text). Optionally pass the result it belongs to, to confirm that the result was not changed either. Answers "valid" (genuine and unchanged) or "invalid" with a reason: UNKNOWN_KEY_ID, BAD_SIGNATURE, MALFORMED, RESULT_MISMATCH or MALFORMED_RESULT (the given result could not be read). "unavailable" (KEYS_NOT_CONFIGURED) means this server has no usable key right now and could not judge the receipt; that is not "invalid". A genuine receipt proves that this service delivered the result at that time, not that the official source said so (except the VIES consultation number).
| Argument | Type | Description |
|---|---|---|
| result | any | Optional: the tool result the receipt was issued for, to check it against the receipt's result_sha256. |
| receipt* | any | The receipt object, the whole result that carries a 'receipt' field, or the same as JSON text. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"receipt"
],
"properties": {
"result": {
"anyOf": [
{
"type": "string",
"maxLength": 200000
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
],
"description": "Optional: the tool result the receipt was issued for, to check it against the receipt's result_sha256."
},
"receipt": {
"anyOf": [
{
"type": "string",
"maxLength": 100000
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
],
"description": "The receipt object, the whole result that carries a 'receipt' field, or the same as JSON text."
}
}
}Shows which EU member state services in VIES are currently available. Use it when a check returned 'unavailable' to see whether the national service is down.
| Argument | Type | Description |
|---|---|---|
| country_code | string | Optional two-letter country code, e.g. DE. Greece is EL. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"country_code": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Optional two-letter country code, e.g. DE. Greece is EL."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 13, 2026.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"vat_id"
],
"properties": {
"vat_id": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "The VAT ID or Swiss UID, with country prefix, e.g. DE123456789, ATU12345678 or CHE-123.456.789 MWST."
},
"expected_city": {
"type": "string",
"maxLength": 100,
"description": "Optional: expected city, compared by VIES."
},
"expected_name": {
"type": "string",
"maxLength": 200,
"description": "Optional: the company name you expect. VIES compares it with the register where the country supports this (e.g. Spain)."
},
"expected_street": {
"type": "string",
"maxLength": 200,
"description": "Optional: expected street, compared by VIES."
},
"requester_vat_id": {
"type": "string",
"maxLength": 40,
"description": "Optional: the user's OWN EU VAT ID. If given, VIES returns a consultation number as official proof of the check. Only pass it when the user provided their own VAT ID for this purpose."
},
"expected_postal_code": {
"type": "string",
"maxLength": 20,
"description": "Optional: expected postal code, compared by VIES."
}
}
}