8 invoice/payment tools; 5 free, no login. IBAN, bank changes, Peppol. Paid VAT and invoice review.
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.
Check a supplier's bank-detail change before the vendor record is touched: returns no_change, verify_first, stop or invalid_new_account with call-back steps. It never says an account is safe. Free, no token.
The account number in the change request, as written — spaces and dashes are fine, e.g. "DE89 3704 0044 0532 0130 00".
The account currently on the vendor record.
ISO 3166-1 alpha-2 country where the supplier is established, e.g. BE.
Check a supplier's bank-detail change before the vendor record is touched: returns no_change, verify_first, stop or invalid_new_account with call-back steps. It never says an account is safe. Free, no token.
| Argument | Type | Description |
|---|---|---|
| newIban* | string | The account number in the change request, as written — spaces and dashes are fine, e.g. "DE89 3704 0044 0532 0130 00". |
| ibanOnFile | string | The account currently on the vendor record. |
| supplierCountry | string | ISO 3166-1 alpha-2 country where the supplier is established, e.g. BE. |
{
"type": "object",
"required": [
"newIban"
],
"properties": {
"newIban": {
"type": "string",
"description": "The account number in the change request, as written — spaces and dashes are fine, e.g. \"DE89 3704 0044 0532 0130 00\"."
},
"ibanOnFile": {
"type": "string",
"description": "The account currently on the vendor record."
},
"supplierCountry": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"maxLength": 2,
"minLength": 2,
"description": "ISO 3166-1 alpha-2 country where the supplier is established, e.g. BE."
}
}
}Check your own invoice against 21 published Peppol BIS Billing 3.0 rules, and whether the customer's Peppol address is registered; each finding names the rule and the fix. A listed subset, not the official validator. Free, no token.
| Argument | Type | Description |
|---|---|---|
| lines | array | |
| currency | string | Three-letter currency code (BT-5), e.g. EUR. |
| customer | object | The customer, the receiver. |
| supplier | object | You, the sender. |
| totalVat | number | Total VAT (BT-110). |
| issueDate | string | The issue date (BT-2). |
| totalWithVat | number | Invoice total including VAT (BT-112). |
| invoiceNumber | string | The invoice number (BT-1). |
| buyerReference | string | The reference the customer asked you to put on the invoice (BT-10). Peppol requires this OR an order reference. |
Check up to 20 rows of EU VAT numbers in EU VIES, row for row; a malformed or non-EU row is judged locally (`not_covered`, never `invalid`). UNKNOWN COSTS NOTHING, and the balance must cover the whole call (20 credits for 20 rows) before it runs. Optional requesterVatId adds a consultation number registered to you; a requester VIES refuses costs nothing. 1 credit (EUR 0.01) per answered row; needs a bearer token.
| Argument | Type | Description |
|---|---|---|
| rows* | array | The list: 1 to 20 rows per call. |
| requesterVatId | string | Your OWN EU VAT number with country prefix (e.g. BE0403170701). Never stored. |
{
"type": "object",
"required": [
"rows"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"vatId"
],
"properties": {
"vatId": {
"type": "string",
"description": "The VAT number as written, WITH its two-letter country prefix, e.g. \"BE0400378485\" or \"NL 8558.76.323.B01\"."
},
"reference": {
"type": "string",
"description": "Your own label for the row — a customer number, a name. It is echoed back, never interpreted."
}
}
},
"maxItems": 20,
"minItems": 1,
"description": "The list: 1 to 20 rows per call."
},
"requesterVatId": {
"type": "string",
"maxLength": 20,
"description": "Your OWN EU VAT number with country prefix (e.g. BE0403170701). Never stored."
}
}
}VAT status / does this company exist: look up one EU VAT or enterprise number in EU VIES (Belgian KBO/BCE included). Returns registered name, VAT id, address and status; not proof of every company without VAT registration. 2 credits (EUR 0.02) per successful call; needs a bearer token.
| Argument | Type | Description |
|---|---|---|
| vatNumber* | string | EU VAT number, with or without its country prefix — e.g. "BE0123456789", "NL855876323B01", "DE811569869" or the bare Belgian enterprise number "0123456789". |
| countryCode | string | ISO 3166-1 alpha-2 country code of the issuing EU member state (uppercase), e.g. BE, NL, DE, FR. |
{
"type": "object",
"required": [
"vatNumber"
],
"properties": {
"vatNumber": {
"type": "string",
"maxLength": 40,
"description": "EU VAT number, with or without its country prefix — e.g. \"BE0123456789\", \"NL855876323B01\", \"DE811569869\" or the bare Belgian enterprise number \"0123456789\"."
},
"countryCode": {
"type": "string",
"default": "BE",
"description": "ISO 3166-1 alpha-2 country code of the issuing EU member state (uppercase), e.g. BE, NL, DE, FR."
}
}
}Ask live Peppol registers about e-invoice reception, document types and failure contacts; never guarantees delivery. Not a VAT or company-register check; use kbo_company_search (one company) or check_vat_list (a list). Free, no token.
| Argument | Type | Description |
|---|---|---|
| scheme | string | The four-digit Peppol scheme the number is registered under, when you know it: "0208" for a Belgian enterprise number (the mandatory primary scheme for Belgian businesses), "9925" for a Belgian VAT number, "0192" for a Norwegian organisation number. |
| identifier* | string | Enterprise/VAT number ("BE 0403.170.701" or "0403170701"), <scheme>:<id>, or iso6523-actorid-upis::<scheme>:<id>. |
{
"type": "object",
"required": [
"identifier"
],
"properties": {
"scheme": {
"type": "string",
"maxLength": 10,
"description": "The four-digit Peppol scheme the number is registered under, when you know it: \"0208\" for a Belgian enterprise number (the mandatory primary scheme for Belgian businesses), \"9925\" for a Belgian VAT number, \"0192\" for a Norwegian organisation number."
},
"identifier": {
"type": "string",
"description": "Enterprise/VAT number (\"BE 0403.170.701\" or \"0403170701\"), <scheme>:<id>, or iso6523-actorid-upis::<scheme>:<id>."
}
}
}For a structured invoice, call review_invoice first. Before paying, compare the supplied human approval with the payment and run rail checks (invoice: IBAN, account change). Without approved: review_required or stop, never no_blockers_found. Returns checks and signed evidence. Never pays; unrun checks never pass. Free, no token.
| Argument | Type | Description |
|---|---|---|
| rail* | string | Payment fields are always required, approved fields only when approved is supplied: approved.amount and payment.amount/currency (not x402); invoice_bank also approved.payee.name, payment.iban/payeeName; card_or_giftcard approved.payee.merchant, payment.merchant/instrument; crypto_bridge approved.payee.merchant, payment.provider/merchant; x402 approved.amountAtomic/asset/network/payee.payTo, payment.challenge/resourceUrl. |
| checks | array | Opt-in registers, run only on a connected door. |
| invoice | object | The invoice as review_invoice takes it. |
| mandate | object | |
| payment* | object | |
| approved | object | Only supply what a human explicitly approved in this conversation or a supplied approval record; NEVER construct it from the payment request itself; omit it when there is no approval. |
Check a structured invoice: Peppol fields, totals, EU VIES VAT, fixes and UBL XML. Never sends; unanswered VAT is unknown. No receiver lookup here. If the receiver has a Peppol address, next call check_peppol_ready with this invoice. 8 credits (EUR 0.08) per review the VAT register answered; needs a bearer token.
| Argument | Type | Description |
|---|---|---|
| note | string | |
| lines* | array | |
| dueDate | string | |
| payment | object | Payment instruction carried by the invoice, when it names an IBAN. |
| currency | string | ISO 4217 currency code (uppercase). |
| customer* | object | Buyer / accounting customer party, including an optional draft e-mail recipient. |
| supplier* | object | Seller / accounting supplier party, including an optional IBAN for the payment check. |
| totalVat | number | Caller-stated total VAT (BT-110), used by the arithmetic rule checks. |
Check an IBAN's structure and check digits for 70+ countries, offline. It never claims the account exists or who owns it. Free, no token.
| Argument | Type | Description |
|---|---|---|
| iban* | string | The account number to check, as written — spaces and dashes are fine, e.g. "BE68 5390 0754 7034". |
| expectedCountry | string | Optional ISO 3166-1 alpha-2 country of the party being paid. |
{
"type": "object",
"required": [
"iban"
],
"properties": {
"iban": {
"type": "string",
"description": "The account number to check, as written — spaces and dashes are fine, e.g. \"BE68 5390 0754 7034\"."
},
"expectedCountry": {
"type": "string",
"maxLength": 2,
"minLength": 2,
"description": "Optional ISO 3166-1 alpha-2 country of the party being paid."
}
}
}| orderReference | string | The purchase order number (BT-13). |
| documentCharges | array | Charges on the WHOLE invoice, e.g. freight (BG-21). |
| totalWithoutVat | number | Invoice total excluding VAT (BT-109). |
| documentAllowances | array | Discounts on the WHOLE invoice, not on one line (BG-20). |
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"quantity": {
"type": "number"
},
"unitPrice": {
"type": "number"
},
"vatPercent": {
"type": "number",
"description": "The VAT rate on this line, as a percentage, e.g. 21."
},
"description": {
"type": "string"
},
"lineNetAmount": {
"type": "number",
"description": "The line total excluding VAT, when you already computed it."
}
}
},
"maxItems": 1000
},
"currency": {
"type": "string",
"maxLength": 8,
"description": "Three-letter currency code (BT-5), e.g. EUR."
},
"customer": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"endpointId": {
"type": "string",
"description": "The customer's literal UBL EndpointID value, e.g. \"0403170701\": from lookup_peppol_participant copy data.endpointId here, NEVER its whole participantId when endpointScheme is set. Checked as written, NEVER rewritten: another spelling is another address."
},
"countryCode": {
"type": "string",
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. BE."
},
"endpointScheme": {
"type": "string",
"maxLength": 10,
"description": "The four-digit EAS code the address is stated under, e.g. \"0208\" for a Belgian enterprise number: from lookup_peppol_participant copy data.endpointScheme here."
}
},
"description": "The customer, the receiver."
},
"supplier": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"endpointId": {
"type": "string",
"description": "The party's Peppol address — the identifier the network delivers to, e.g. a Belgian enterprise number."
},
"countryCode": {
"type": "string",
"maxLength": 2,
"description": "ISO 3166-1 alpha-2 country code, e.g. BE."
},
"endpointScheme": {
"type": "string",
"maxLength": 10,
"description": "The four-digit EAS code the address is stated under, e.g. \"0208\" for a Belgian enterprise number."
}
},
"description": "You, the sender."
},
"totalVat": {
"type": "number",
"description": "Total VAT (BT-110)."
},
"issueDate": {
"type": "string",
"maxLength": 40,
"description": "The issue date (BT-2)."
},
"totalWithVat": {
"type": "number",
"description": "Invoice total including VAT (BT-112)."
},
"invoiceNumber": {
"type": "string",
"description": "The invoice number (BT-1)."
},
"buyerReference": {
"type": "string",
"description": "The reference the customer asked you to put on the invoice (BT-10). Peppol requires this OR an order reference."
},
"orderReference": {
"type": "string",
"description": "The purchase order number (BT-13)."
},
"documentCharges": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The amount, excluding VAT (BT-92 for an allowance, BT-99 for a charge)."
},
"reason": {
"type": "string",
"description": "Why, e.g. \"Discount\" or \"Freight\"."
},
"vatPercent": {
"type": "number",
"description": "The VAT rate it is taxed at, e.g. 21 (BT-96 / BT-103)."
}
}
},
"maxItems": 100,
"description": "Charges on the WHOLE invoice, e.g. freight (BG-21)."
},
"totalWithoutVat": {
"type": "number",
"description": "Invoice total excluding VAT (BT-109)."
},
"documentAllowances": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The amount, excluding VAT (BT-92 for an allowance, BT-99 for a charge)."
},
"reason": {
"type": "string",
"description": "Why, e.g. \"Discount\" or \"Freight\"."
},
"vatPercent": {
"type": "number",
"description": "The VAT rate it is taxed at, e.g. 21 (BT-96 / BT-103)."
}
}
},
"maxItems": 100,
"description": "Discounts on the WHOLE invoice, not on one line (BG-20)."
}
}
}| ibanOnFile |
| string |
| The account on the vendor record. |
| instructionSource | string | Only supply what a human explicitly approved in this conversation or a supplied approval record; NEVER construct it from the payment request itself; omit it when there is no approval. |
{
"type": "object",
"required": [
"rail",
"payment"
],
"properties": {
"rail": {
"enum": [
"invoice_bank",
"x402",
"card_or_giftcard",
"crypto_bridge"
],
"type": "string",
"description": "Payment fields are always required, approved fields only when approved is supplied: approved.amount and payment.amount/currency (not x402); invoice_bank also approved.payee.name, payment.iban/payeeName; card_or_giftcard approved.payee.merchant, payment.merchant/instrument; crypto_bridge approved.payee.merchant, payment.provider/merchant; x402 approved.amountAtomic/asset/network/payee.payTo, payment.challenge/resourceUrl."
},
"checks": {
"type": "array",
"items": {
"enum": [
"vat_register",
"sanctions"
],
"type": "string"
},
"maxItems": 2,
"description": "Opt-in registers, run only on a connected door."
},
"invoice": {
"type": "object",
"description": "The invoice as review_invoice takes it."
},
"mandate": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"maxAmount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"validUntil": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{1,9})?)?(Z|[+-]\\d{2}:\\d{2})$"
},
"maxAmountAtomic": {
"type": "string",
"pattern": "^\\d{1,78}$"
}
},
"additionalProperties": false
},
"payment": {
"type": "object",
"properties": {
"iban": {
"type": "string"
},
"payTo": {
"type": "string"
},
"payer": {
"type": "string"
},
"amount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"merchant": {
"type": "string"
},
"peppolId": {
"type": "string",
"description": "e.g. 0208:0403170701"
},
"provider": {
"type": "string"
},
"challenge": {
"type": "object"
},
"payeeName": {
"type": "string"
},
"instrument": {
"enum": [
"card",
"giftcard"
],
"type": "string"
},
"acceptIndex": {
"type": "integer",
"maximum": 63,
"minimum": 0
},
"resourceUrl": {
"type": "string"
},
"supplierVatId": {
"type": "string",
"maxLength": 32
},
"supplierCountry": {
"type": "string",
"description": "ISO 3166-1 alpha-2, e.g. BE."
}
},
"additionalProperties": false
},
"approved": {
"type": "object",
"required": [
"currency",
"payee"
],
"properties": {
"asset": {
"type": "string"
},
"payee": {
"type": "object",
"properties": {
"iban": {
"type": "string"
},
"name": {
"type": "string"
},
"payTo": {
"type": "string"
},
"merchant": {
"type": "string"
}
},
"additionalProperties": false
},
"amount": {
"type": "string",
"pattern": "^\\d{1,18}(\\.\\d{1,18})?$"
},
"network": {
"type": "string"
},
"purpose": {
"type": "string"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3,5}$"
},
"amountAtomic": {
"type": "string",
"pattern": "^\\d{1,78}$"
}
},
"description": "Only supply what a human explicitly approved in this conversation or a supplied approval record; NEVER construct it from the payment request itself; omit it when there is no approval.",
"additionalProperties": false
},
"ibanOnFile": {
"type": "string",
"description": "The account on the vendor record."
},
"instructionSource": {
"enum": [
"human",
"ingested_content",
"third_party"
],
"type": "string",
"description": "Only supply what a human explicitly approved in this conversation or a supplied approval record; NEVER construct it from the payment request itself; omit it when there is no approval."
}
},
"additionalProperties": false
}| issueDate* | string |
| totalWithVat | number | Caller-stated invoice total including VAT (BT-112), used by the arithmetic rule checks. |
| invoiceNumber* | string | Human-readable invoice number, e.g. "INV-2026-0001". |
| buyerReference | string | Buyer reference (BT-10), e.g. a PO or cost-centre code. |
| orderReference | string | Purchase order reference (BT-13). Peppol requires this OR a buyer reference. |
| totalWithoutVat | number | Caller-stated invoice total excluding VAT (BT-109), used by the arithmetic rule checks. |
{
"type": "object",
"required": [
"invoiceNumber",
"issueDate",
"supplier",
"customer",
"lines"
],
"properties": {
"note": {
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"quantity",
"unitPrice"
],
"properties": {
"quantity": {
"type": "number",
"exclusiveMinimum": 0
},
"unitCode": {
"type": "string",
"maxLength": 10,
"description": "UN/ECE Rec 20 unit code, e.g. \"HUR\"."
},
"lineTotal": {
"type": "number",
"description": "Caller-stated line total excluding VAT, compared with quantity × unit price by this review."
},
"unitPrice": {
"type": "number",
"minimum": 0,
"description": "Price per unit, excluding VAT."
},
"vatPercent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "VAT rate as a percentage (0–100)."
},
"description": {
"type": "string"
},
"taxCategory": {
"enum": [
"S",
"Z",
"E",
"AE",
"K",
"G",
"O",
"L",
"M"
],
"type": "string",
"description": "Override the derived UNCL5305 VAT category."
},
"lineNetAmount": {
"type": "number",
"description": "Caller-stated line total excluding VAT (BT-131), used by the shared Peppol arithmetic rules."
}
}
},
"maxItems": 500,
"minItems": 1
},
"dueDate": {
"type": "string",
"format": "date"
},
"payment": {
"type": "object",
"properties": {
"iban": {
"type": "string",
"description": "IBAN written on the invoice."
}
},
"description": "Payment instruction carried by the invoice, when it names an IBAN."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code (uppercase)."
},
"customer": {
"type": "object",
"required": [
"name",
"countryCode"
],
"properties": {
"city": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"vatId": {
"type": "string",
"description": "Legal / VAT registration id, e.g. \"BE0123456789\"."
},
"street": {
"type": "string"
},
"endpointId": {
"type": "string",
"description": "Peppol participant endpoint identifier, e.g. a GLN."
},
"postalZone": {
"type": "string",
"maxLength": 20
},
"countryCode": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (uppercase), e.g. BE."
},
"endpointScheme": {
"type": "string",
"maxLength": 10,
"description": "Endpoint scheme id (EAS code), e.g. \"0208\" for a Belgian enterprise number or \"0088\" for a GLN."
},
"registrationName": {
"type": "string"
}
},
"description": "Buyer / accounting customer party, including an optional draft e-mail recipient."
},
"supplier": {
"type": "object",
"required": [
"name",
"countryCode"
],
"properties": {
"city": {
"type": "string"
},
"iban": {
"type": "string",
"description": "IBAN written on the invoice."
},
"name": {
"type": "string"
},
"vatId": {
"type": "string",
"description": "Legal / VAT registration id, e.g. \"BE0123456789\"."
},
"street": {
"type": "string"
},
"endpointId": {
"type": "string",
"description": "Peppol participant endpoint identifier, e.g. a GLN."
},
"postalZone": {
"type": "string",
"maxLength": 20
},
"countryCode": {
"type": "string",
"description": "ISO 3166-1 alpha-2 country code (uppercase), e.g. BE."
},
"endpointScheme": {
"type": "string",
"maxLength": 10,
"description": "Endpoint scheme id (EAS code), e.g. \"0208\" for a Belgian enterprise number or \"0088\" for a GLN."
},
"registrationName": {
"type": "string"
}
},
"description": "Seller / accounting supplier party, including an optional IBAN for the payment check."
},
"totalVat": {
"type": "number",
"description": "Caller-stated total VAT (BT-110), used by the arithmetic rule checks."
},
"issueDate": {
"type": "string",
"format": "date"
},
"totalWithVat": {
"type": "number",
"description": "Caller-stated invoice total including VAT (BT-112), used by the arithmetic rule checks."
},
"invoiceNumber": {
"type": "string",
"description": "Human-readable invoice number, e.g. \"INV-2026-0001\"."
},
"buyerReference": {
"type": "string",
"description": "Buyer reference (BT-10), e.g. a PO or cost-centre code."
},
"orderReference": {
"type": "string",
"description": "Purchase order reference (BT-13). Peppol requires this OR a buyer reference."
},
"totalWithoutVat": {
"type": "number",
"description": "Caller-stated invoice total excluding VAT (BT-109), used by the arithmetic rule checks."
}
}
}