mcp-europe-business
Provides tools for validating IBANs and other EU business compliance tasks relevant to SEPA payments.
MCP Europe Business Suite
European business compliance suite for AI agents — 28 tools covering tax ID validation, IBAN, VAT rates, e-invoicing rules, payment terms, and labor calendar helpers across 18+ European countries.
Part of MCPize — regional MCP servers for AI agents.
Coverage
Module | Country coverage |
Tax IDs | PT (NIF), ES (NIF/NIE/CIF), FR (SIRET, TVA), IT (Codice Fiscale, Partita IVA), DE (USt-IdNr), UK (VAT), NL (KVK) |
IBAN | 18 EU countries (PT, ES, FR, DE, IT, NL, BE, PL, SE, DK, FI, AT, IE, GR, HU, RO, CZ, HR) |
VAT rates | 19 countries (18 EU + UK) |
Payment terms | 10 countries (PT, ES, FR, DE, IT, NL, BE, UK, SE, PL) |
E-invoicing | 10 countries with timelines and formats |
Holidays | 8 countries with Easter-based moveable holidays |
Postal codes | 16 countries |
Related MCP server: mcp-latam-business
Tools (28 total)
Validation (17): validate_nif, validate_iban, get_vat_rate, get_portugal_holidays, get_spain_holidays, get_france_holidays, validate_nif_es, validate_siret, validate_tva_fr, calculate_working_days, format_number_european, validate_codice_fiscale, validate_partita_iva, validate_vat_de, validate_vat_uk, validate_kvk_nl, validate_postal_code
Business Rules (4): get_payment_terms, get_invoice_requirements, get_vat_exemption_threshold, get_einvoicing_rules
Labor Helpers (3): get_public_holidays_range, calculate_working_days_eu, get_next_payment_date
Invoice & VAT (4): validate_invoice_schema, calculate_vat_breakdown, suggest_vat_treatment, calculate_vat_amount
What's new in v1.2.0
Timezone-safe date formatting (no more UTC offset bugs)
Easter-based moveable holidays added to Portugal (Sexta-feira Santa) and Spain (Viernes Santo)
nth_working_dayrule now correctly handles months without enough working daysConsistent
outputSchema(Zod) on every tool — Smithery Typed Output readyRefactored shared helpers (no duplicated Easter calculations across tools)
New
/healthendpoint for Railway/Docker healthchecks
Local development
npm install
npm start # stdio transport (for Glama / Claude Desktop)
npm run start:http # HTTP transport on port 8080 (for Railway / hosted use)Endpoints (HTTP mode)
GET /— server metadata and tool listGET /health— health check (returns{"status":"ok"})POST /mcp— MCP Streamable HTTP endpoint
Disclaimer
All compliance, tax, and legal information returned by these tools is reference only — not legal or tax advice. VAT rates, e-invoicing rules, and holiday calendars change frequently. Always verify with the relevant tax authority and a qualified professional before use in production.
License
MIT
Available Tools
28 toolscalculate_vat_amountARead-onlyIdempotent
Calculates VAT amounts from either a net (excluding VAT) or gross (including VAT) amount for a given VAT rate. Returns { net_amount, vat_amount, gross_amount, vat_rate, currency }. Use when building pricing tools, invoice calculators, or checkout flows that need to split gross prices into net + VAT components.
Inputs: amount (required), vat_rate (required), amount_type (required), currency. Returns: net_amount, vat_amount, gross_amount, vat_rate, +1 more
calculate_vat_breakdownARead-onlyIdempotent
Calculates a complete VAT breakdown for a list of invoice line items, grouping amounts by VAT rate and computing totals. Returns { lines_summary, vat_breakdown: [{rate, base_amount, vat_amount}], total_excl_vat, total_vat, total_incl_vat, currency }. Each line item requires { description, quantity, unit_price, vat_rate }. Use when generating invoices, building checkout summaries, or verifying VAT calculations in agent workflows.
Inputs: lines (required), currency, round_decimals. Returns: lines_summary, vat_breakdown, total_excl_vat, total_vat, +2 more
calculate_working_daysARead-onlyIdempotent
Counts the number of working days between two dates (inclusive), excluding Saturdays, Sundays, and all 10 Portuguese national public holidays. Returns { start_date, end_date, working_days: number }. Use when calculating Portuguese invoice payment deadlines, legal notice periods, or SLA response times.
Inputs: start_date (required), end_date (required). Returns: start_date, end_date, working_days, error
calculate_working_days_euARead-onlyIdempotent
Counts the number of working days between two dates (inclusive) for a given European country, excluding weekends and that country's national public holidays. Returns { country, start_date, end_date, working_days, holidays_excluded }. Supports PT, ES, FR, DE, IT, NL, BE, UK. Use when calculating cross-border SLA periods, invoice payment deadlines, or project timelines that must account for different national holiday calendars.
Inputs: country_code (required), start_date (required), end_date (required). Returns: country, start_date, end_date, working_days, +2 more
format_number_europeanARead-onlyIdempotent
Formats a number using the locale conventions of a specific European country — correct decimal and thousands separators. Returns { original, formatted, locale, country_code }. Supports PT, ES, FR, DE, IT, NL, BE, PL, SE, DK, FI, AT, IE, GR, HU, RO, UK.
Inputs: number (required), country_code (required), decimals. Returns: original, formatted, locale, country_code
get_einvoicing_rulesARead-onlyIdempotent
Returns the current e-invoicing (electronic invoicing) obligations for a given European country — whether it is mandatory for B2G (business-to-government), B2B (business-to-business), or B2C transactions, the required formats, and implementation timeline. Returns { country, b2g_mandatory, b2b_mandatory, b2c_mandatory, formats, timeline, platform, notes }. Use when building invoice generation systems, determining compliance requirements for EU customers, or automating invoice submission workflows.
Inputs: country_code (required). Returns: country, b2g_mandatory, b2b_mandatory, b2c_mandatory, +6 more
get_france_holidaysARead-onlyIdempotent
Returns all French national public holidays for a given year. Easter-dependent holidays (Easter Monday, Ascension, Whit Monday) are dynamically calculated using the Anonymous Gregorian algorithm. Returns 11 mandatory holidays defined by French law.
Inputs: year (required). Returns: year, country, total_holidays, holidays
get_invoice_requirementsARead-onlyIdempotent
Returns the mandatory fields required on a valid VAT invoice for a given European country, as defined by EU VAT Directive 2006/112/EC and local implementations. Returns { country, mandatory_fields: [], optional_fields: [], notes }. Use when generating invoices for EU customers, validating invoice templates, or building invoice compliance checks in agent workflows. Information provided as reference only — not legal advice.
Inputs: country_code (required). Returns: country, mandatory_fields, optional_fields, notes, +2 more
get_next_payment_dateARead-onlyIdempotent
Calculates the next valid payment date based on a reference date and a payment rule for a given European country, skipping weekends and national public holidays. Supports rules: 'last_working_day_of_month' (salary payment), 'first_working_day_of_month', 'nth_working_day' (e.g. 5th working day), 'next_working_day' (next business day after reference). Returns { country, reference_date, rule, result_date, notes }. Use when scheduling salary payments, invoice due dates, or any automated payment workflow that must avoid non-working days.
Inputs: country_code (required), reference_date (required), rule (required), n. Returns: country, reference_date, rule, result_date, +1 more
get_payment_termsARead-onlyIdempotent
Returns the legal B2B payment terms for a given European country — the default payment period, maximum allowed period, and late payment rules as defined by EU Directive 2011/7/EU and local implementations. Returns { country, default_days, max_days, late_payment_interest, notes }. Use when generating invoices, setting payment due dates, or automating accounts receivable workflows. Information provided as reference only — not legal advice.
Inputs: country_code (required). Returns: country, default_days, max_days, late_payment_interest, +4 more
get_portugal_holidaysARead-onlyIdempotent
Returns all Portuguese national public holidays for a given year as a structured list. Each holiday includes { date: 'YYYY-MM-DD', name: string, name_en: string }. Returns 10 mandatory national holidays defined by Portuguese law. Use when calculating business deadlines, delivery dates, payment due dates, SLA periods, or scheduling tasks that must avoid non-working days in Portugal.
Inputs: year (required). Returns: year, country, total_holidays, holidays
get_public_holidays_rangeARead-onlyIdempotent
Returns all public holidays that fall within a given date range for a specified European country. Returns { country, start_date, end_date, total_holidays, holidays: [{date, name, name_en}] }. Supports PT, ES, FR, DE, IT, NL, BE, UK. Use when calculating SLA periods, project timelines, delivery windows, or any workflow that must skip non-working days across multiple European countries.
Inputs: country_code (required), start_date (required), end_date (required). Returns: country, start_date, end_date, total_holidays, +2 more
get_spain_holidaysARead-onlyIdempotent
Returns all Spanish national public holidays for a given year as a structured list. Each holiday includes { date: 'YYYY-MM-DD', name: string, name_en: string }. Returns 9 mandatory national holidays defined by Spanish law. Does not include regional holidays that vary by autonomous community.
Inputs: year (required). Returns: year, country, total_holidays, holidays
get_vat_exemption_thresholdARead-onlyIdempotent
Returns the annual turnover threshold below which a business may be exempt from VAT registration in a given European country — the small business VAT exemption scheme. Returns { country, threshold_local_currency, currency, threshold_eur_approx, notes }. Use when determining if a small business needs to register for VAT, or when building onboarding flows for European freelancers and micro-enterprises. Information provided as reference only — not legal advice.
Inputs: country_code (required). Returns: country, threshold_local_currency, currency, threshold_eur_approx, +4 more
get_vat_rateARead-onlyIdempotent
Returns all VAT (Value Added Tax) rates for a given EU country — standard, reduced, intermediate, and super-reduced rates where applicable, as numeric percentages. Returns { country, standard, reduced?, intermediate?, superreduced? } for supported countries, or { error, available } listing all valid codes if the country is not found. Supports 18 EU member states: PT, ES, FR, DE, IT, NL, BE, PL, SE, DK, FI, AT, IE, GR, HU, RO, CZ, HR. Use when calculating EU cross-border invoice tax, determining correct rate for e-commerce checkout by customer country, generating compliant VAT breakdowns, or any workflow requiring accurate and current EU VAT rates per jurisdiction.
Inputs: country_code (required). Returns: country, standard, reduced, intermediate, +2 more
suggest_vat_treatmentARead-onlyIdempotent
Suggests the likely VAT treatment for a transaction based on seller country, buyer country, buyer VAT registration status, and goods/services type — covering standard VAT, reverse charge, OSS/IOSS, and zero-rating scenarios under EU VAT rules. Returns { treatment, description, seller_charges_vat, applicable_rate, notes, disclaimer }. Use when building checkout VAT logic, invoice generation, or cross-border EU compliance workflows. For digital services sold to EU consumers, OSS is indicated automatically. Always verify with a tax advisor for real transactions.
Inputs: seller_country (required), buyer_country (required), buyer_is_vat_registered (required), goods_type (required). Returns: treatment, description, seller_charges_vat, applicable_rate, +6 more
validate_codice_fiscaleARead-onlyIdempotent
Validates an Italian Codice Fiscale (fiscal code) for individuals — a 16-character alphanumeric code issued by the Italian Revenue Agency (Agenzia delle Entrate). Applies the official odd/even position checksum algorithm. Returns { valid: boolean, codice_fiscale: string } or { valid: false, reason: string }. Use when processing Italian invoices, onboarding Italian individuals, or any Italian compliance workflow requiring a verified personal fiscal code.
Inputs: codice_fiscale (required). Returns: valid, codice_fiscale, reason
validate_ibanARead-onlyIdempotent
Validates an IBAN (International Bank Account Number) using the ISO 13616 MOD-97 algorithm. Supports 18 European countries: PT, ES, FR, DE, IT, NL, BE, PL, SE, DK, FI, AT, IE, GR, HU, RO, CZ, HR. Returns { valid: boolean, country: string, iban: string } — country is extracted from the 2-letter prefix. Returns { valid: false, reason: string } for malformed input. Spaces are automatically stripped before validation. Use when validating supplier bank details for SEPA transfers, processing direct debit mandates, verifying payment data in e-commerce checkouts, or any workflow requiring a verified EU bank account number. Validates structure and checksum only — does not confirm account existence.
Inputs: iban (required). Returns: valid, country, iban, reason
validate_invoice_schemaARead-onlyIdempotent
Validates whether an invoice JSON object contains all mandatory fields required for a valid VAT invoice in a given European country, based on EU VAT Directive 2006/112/EC and local implementations. Returns { valid: boolean, country, missing_fields: [], present_fields: [], warnings: [] }. Use when building invoice generation pipelines, pre-submission validation, or compliance checks in agent workflows. Information is reference only — not legal advice.
Inputs: country_code (required), invoice (required). Returns: valid, country, missing_fields, present_fields, +2 more
validate_kvk_nlARead-onlyIdempotent
Validates a Dutch KVK (Kamer van Koophandel) chamber of commerce number — an 8-digit registration number assigned to all businesses registered in the Netherlands. Verifies the format and applies the official weighted checksum algorithm. Returns { valid: boolean, kvk: string, country: 'NL' } or { valid: false, reason: string }. Use when processing Dutch invoices, validating Dutch suppliers, or onboarding Dutch business partners.
Inputs: kvk (required). Returns: valid, kvk, country, reason
validate_nifARead-onlyIdempotent
Validates a Portuguese NIF (Número de Identificação Fiscal) — the 9-digit tax identification number issued by the Portuguese Tax Authority (AT) to individuals and companies. Applies the official modulo-11 checksum algorithm to verify the check digit. Returns { valid: true, nif: string } for valid NIFs, or { valid: false, reason: string } for invalid format or failed checksum. First-digit rules are enforced: 1–3 for individuals, 5 for corporations, 6 for public entities, 7–8 for other entities, 9 for occasional taxpayers. Use when processing Portuguese invoices (faturas), onboarding suppliers, validating user registrations, or any fiscal compliance workflow. Does not query the AT database — offline format and checksum validation only.
Inputs: nif (required). Returns: valid, nif, reason
validate_nif_esARead-onlyIdempotent
Validates Spanish tax identification numbers — NIF (DNI, 8 digits + check letter, for Spanish citizens), NIE (Número de Identidad de Extranjero, starts with X/Y/Z, for foreign residents), and CIF (Código de Identificación Fiscal, letter + 7 digits + control, for companies). Automatically detects the document type. Returns { valid: boolean, type: 'NIF'|'NIE'|'CIF', id: string }.
Inputs: id (required). Returns: valid, type, id, reason
validate_partita_ivaARead-onlyIdempotent
Validates an Italian Partita IVA (VAT number for companies and self-employed) — an 11-digit number issued by the Italian Revenue Agency. Applies the official Luhn-variant checksum algorithm used by Italian tax authorities. Returns { valid: boolean, partita_iva: string } or { valid: false, reason: string }. Use when processing Italian B2B invoices, validating Italian suppliers, or any Italian business compliance workflow.
Inputs: partita_iva (required). Returns: valid, partita_iva, reason
validate_postal_codeARead-onlyIdempotent
Validates a postal code format for a given European country using the official pattern for that country. Returns { valid: boolean, postal_code: string, country: string, format: string }. Supports PT (4+3 digit), ES (5 digit), FR (5 digit), DE (5 digit), IT (5 digit), NL (4 digits + 2 letters), BE (4 digit), PL (5+2 digit), SE (5 digit), AT (4 digit), IE (Eircode 3+4), GR (5 digit), HU (4 digit), RO (6 digit), UK (complex alphanumeric). Use in e-commerce checkout validation, address verification, or logistics workflows.
Inputs: postal_code (required), country_code (required). Returns: valid, postal_code, country, format, +1 more
validate_siretARead-onlyIdempotent
Validates a French SIRET (14-digit company establishment number) using the official Luhn algorithm. The first 9 digits are the SIREN (company identifier) and the last 5 identify the specific establishment. Returns { valid: boolean, siren: string, establishment: string, siret: string }. Handles the La Poste special case automatically.
Inputs: siret (required). Returns: valid, siren, establishment, siret, +1 more
validate_tva_frARead-onlyIdempotent
Validates a French TVA intracom (VAT) number — format 'FR' + 2 alphanumeric key characters + 9-digit SIREN. Returns { valid: boolean, key: string, siren: string, tva: string }. When the key is numeric, validates using the official formula: key = (12 + 3 × (SIREN mod 97)) mod 97.
Inputs: tva (required). Returns: valid, key, siren, tva, +2 more
validate_vat_deARead-onlyIdempotent
Validates a German VAT identification number (Umsatzsteuer-Identifikationsnummer, USt-IdNr) — format 'DE' followed by 9 digits. Verifies the format and applies the official ISO 7064 MOD-11-10 checksum algorithm. Returns { valid: boolean, vat_number: string, country: 'DE' } or { valid: false, reason: string }. Use when processing German invoices, validating German suppliers for intra-EU transactions, or any B2B workflow involving German companies.
Inputs: vat_number (required). Returns: valid, vat_number, country, reason
validate_vat_ukARead-onlyIdempotent
Validates a UK VAT registration number — format 'GB' followed by 9 digits (standard), 12 digits (branch traders), or 'GD'/'HA' followed by 3 digits (government/health authorities). Applies the official HMRC modulo-97 algorithm for 9-digit numbers. Returns { valid: boolean, vat_number: string, type: string, country: 'GB' }. Use when processing UK invoices, validating UK suppliers post-Brexit, or any B2B workflow involving UK VAT numbers.
Inputs: vat_number (required). Returns: valid, vat_number, type, country, +1 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 28 tools
Each tool has a clearly distinct purpose: VAT calculations, working days, holidays, validations per country/ID type, etc. Even overlapping tools like calculate_vat_amount and calculate_vat_breakdown differ in output granularity. No ambiguity.
All tool names follow a consistent verb_noun pattern: get_, calculate_, validate_, suggest_, format_. No mixing of styles; predictable and intuitive.
28 tools is slightly high but still reasonable for the broad domain of European business compliance. Each tool addresses a distinct subdomain (VAT, holidays, ID validation, etc.), so the count is justified.
Covers most key areas: VAT calc/rates, working days/holidays, invoice requirements, payment terms, e-invoicing, and ID validation for multiple countries. Minor gaps (e.g., missing some EU member VAT rates, no currency conversion) but generally thorough.
Maintenance
Related MCP Connectors
15 deterministic validation tools for AI agents: tax IDs (15 countries), VAT, IBAN, LEI, HS codes.
Validate EU, UK, AU VAT numbers for AI agents. EU ViDA e-invoicing compliance.
Utility data for AI agents: IBAN, EU holidays, VAT rates, time zones, ECB FX. Pay per call.
EU compliance checks for AI agents: sanctions, company, VAT ID, IBAN, email. Pay per call.
Related MCP Servers
- AlicenseAqualityCmaintenanceStructured business intelligence for AI agents. 11.3M verified entities, 40.3M BORME mercantile acts, EU VAT validation (VIES), GLEIF LEI and healthcare registries. 12 tools.61MIT
- AlicenseAqualityDmaintenanceLatin American business compliance suite — 28 tools for tax ID validation (CPF, CNPJ, RFC, RUT, CUIT, NIT), banking (PIX, CLABE, CBU), VAT rules, e-invoicing (NF-e, CFDI, DTE), holidays, and labor calendar across Brazil, Mexico, Chile, Argentina, and Colombia.28MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to answer tax compliance questions (VAT, sales tax, GST) and validate EU VAT numbers in real time via the VIES registry.28 npmMIT
- AlicenseNot gradedqualityDmaintenanceeu-verify lets AI agents verify any European business partner: company existence (official French SIREN registry), insolvency records (BODACC), EU VAT validation before invoicing (VIES), SIRET/IBAN/LEI checks, address and email verification, French business-day deadlines and EU public tenders. 10 paid MCP tools + a free catalog tool, plus 81 HTTP endpoints. Each call costs $0.001-$0.01 in USDC on1MIT