Free no-auth tools for Spain: validate IBAN, EU VAT check (VIES), Modelo 303 sums, Veri*factu dates.
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.
Add up the boxes (casillas) of the Spanish quarterly VAT return Modelo 303 with the formulas printed on the official AEAT form: 27, 45, 46, 64, 66, 87, 69 and 71. Input are the tax amounts (cuotas) per box, e.g. {"09": 17430, "29": 9870}. It only sums what it is given: it does not decide which rate or deduction applies and it is not a tax return. To compute the 303 from an existing contix account's own invoices and gastos instead of typed-in boxes, use get_modelo with model 303.
Box number -> amount. Accepted: 152, 167, 03, 155, 06, 09, 11, 13, 15, 158, 170, 18, 21, 24, 26, 29, 31, 33, 35, 37, 39, 41, 42, 43, 44, 58, 76, 65, 77, 110, 78, 68, 108, 70, 109
Add up the boxes (casillas) of the Spanish quarterly VAT return Modelo 303 with the formulas printed on the official AEAT form: 27, 45, 46, 64, 66, 87, 69 and 71. Input are the tax amounts (cuotas) per box, e.g. {"09": 17430, "29": 9870}. It only sums what it is given: it does not decide which rate or deduction applies and it is not a tax return. To compute the 303 from an existing contix account's own invoices and gastos instead of typed-in boxes, use get_modelo with model 303.
| Argument | Type | Description |
|---|---|---|
| casillas* | object | Box number -> amount. Accepted: 152, 167, 03, 155, 06, 09, 11, 13, 15, 158, 170, 18, 21, 24, 26, 29, 31, 33, 35, 37, 39, 41, 42, 43, 44, 58, 76, 65, 77, 110, 78, 68, 108, 70, 109 |
{
"type": "object",
"required": [
"casillas"
],
"properties": {
"casillas": {
"type": "object",
"description": "Box number -> amount. Accepted: 152, 167, 03, 155, 06, 09, 11, 13, 15, 158, 170, 18, 21, 24, 26, 29, 31, 33, 35, 37, 39, 41, 42, 43, 44, 58, 76, 65, 77, 110, 78, 68, 108, 70, 109",
"additionalProperties": {
"type": [
"number",
"string"
]
}
}
}
}Compute the taxable base, VAT (IVA) amount, optional recargo de equivalencia and optional IRPF withholding from an amount. By default `importe` is the taxable base (sin IVA). With incluye_iva=true, `importe` is the TOTAL with VAT already included and the base is derived backwards (quitar IVA / reverse VAT). It only applies the rates it is given: it does NOT decide which VAT or IRPF rate applies to a case. Returns base_imponible, cuota_iva, recargo_importe, retencion_irpf, total_con_iva and total_factura (total after subtracting the IRPF withholding).
| Argument | Type | Description |
|---|---|---|
| irpf | number | string | IRPF withholding rate in %, e.g. 15, 19. Default 0 |
| importe* | number | string | Amount: taxable base, or total with VAT if incluye_iva=true |
| recargo | number | string | Recargo de equivalencia rate in %, e.g. 5.2, 1.4, 0.5, 1.75. Default 0 |
| tipo_iva* | number | string | VAT rate in %, e.g. 21, 10, 4, 0 |
| incluye_iva | boolean | True if `importe` already includes VAT (reverse calculation) |
{
"type": "object",
"required": [
"importe",
"tipo_iva"
],
"properties": {
"irpf": {
"type": [
"number",
"string"
],
"default": 0,
"description": "IRPF withholding rate in %, e.g. 15, 19. Default 0"
},
"importe": {
"type": [
"number",
"string"
],
"description": "Amount: taxable base, or total with VAT if incluye_iva=true"
},
"recargo": {
"type": [
"number",
"string"
],
"default": 0,
"description": "Recargo de equivalencia rate in %, e.g. 5.2, 1.4, 0.5, 1.75. Default 0"
},
"tipo_iva": {
"type": [
"number",
"string"
],
"description": "VAT rate in %, e.g. 21, 10, 4, 0"
},
"incluye_iva": {
"type": "boolean",
"default": false,
"description": "True if `importe` already includes VAT (reverse calculation)"
}
}
}Look up an EU VAT number in the European Commission's VIES registry. Returns what the registry says: whether the number exists and, where the member state publishes it, the name and address. It draws NO tax conclusion. VIES is often down; that is reported as disponible=false, which is NOT the same as an invalid number.
| Argument | Type | Description |
|---|---|---|
| pais | string | ISO country code (e.g. DE); omit when the number carries its prefix |
| numero* | string | VAT number, with or without country prefix |
{
"type": "object",
"required": [
"numero"
],
"properties": {
"pais": {
"type": "string",
"description": "ISO country code (e.g. DE); omit when the number carries its prefix"
},
"numero": {
"type": "string",
"description": "VAT number, with or without country prefix"
}
}
}Deadlines from the published Spanish rules: Veri*factu (RD 1007/2023, dates of RD-ley 15/2025) and mandatory B2B e-invoicing (RD 238/2026, counted from the ministerial order, provisional while the order is a draft). Information about the rules, not advice. Returns a date (or null) and explanatory text for each obligation (verifactu, factura_electronica and, where it applies, estados_facturas).
| Argument | Type | Description |
|---|---|---|
| forma* | string | sociedad = company paying Impuesto sobre Sociedades; autonomo = self-employed |
| mas_8_millones | boolean | Turnover above 8 million EUR last year |
| factura_a_empresas* | boolean | Invoices other businesses or professionals in Spain |
{
"type": "object",
"required": [
"forma",
"factura_a_empresas"
],
"properties": {
"forma": {
"enum": [
"sociedad",
"autonomo"
],
"type": "string",
"description": "sociedad = company paying Impuesto sobre Sociedades; autonomo = self-employed"
},
"mas_8_millones": {
"type": "boolean",
"default": false,
"description": "Turnover above 8 million EUR last year"
},
"factura_a_empresas": {
"type": "boolean",
"description": "Invoices other businesses or professionals in Spain"
}
}
}Check whether an IBAN is well formed: country length (SWIFT IBAN registry) and ISO 13616 check digits. For Spanish IBANs also the two account check digits (DC) and the bank (entidad) with its BIC from the Banco de España registry. A 20-digit Spanish account number (CCC) is converted to its IBAN. Pure arithmetic: it does NOT confirm that the account exists or who owns it.
| Argument | Type | Description |
|---|---|---|
| iban* | string | IBAN or 20-digit Spanish account, spaces allowed |
{
"type": "object",
"required": [
"iban"
],
"properties": {
"iban": {
"type": "string",
"description": "IBAN or 20-digit Spanish account, spaces allowed"
}
}
}Two modes in one input. If `valor` is only 1-8 digits, computes the DNI check letter and returns the full 8-digit-plus-letter DNI (digits are left-padded with zeros). If `valor` is a full document, validates its check character: DNI (8 digits + letter), NIE (X/Y/Z + 7 digits + letter) or CIF (entity letter + 7 digits + check digit or letter, with the entity type per Orden EHA/451/2008). Tolerates spaces, dots, dashes and an ES prefix. Pure arithmetic: it does NOT confirm the document exists, is active or belongs to the person who gave it. In validation mode, returns valido (true/false) and, when it does not match, the correct check character (letra_correcta / control_correcto).
| Argument | Type | Description |
|---|---|---|
| valor* | string | 1-8 digits, or a full DNI/NIE/CIF |
{
"type": "object",
"required": [
"valor"
],
"properties": {
"valor": {
"type": "string",
"description": "1-8 digits, or a full DNI/NIE/CIF"
}
}
}