InvoiceForge

Generate, validate and read EN 16931 and Peppol BIS 3.0 e-invoices, in UBL and CII.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
72%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,662Tokens (tool definitions)
~3.1 KBTypical response size
Moderate attention impact (1.30% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "invoiceforge": {
      "url": "https://invoiceforge.agenttoolworks.com/mcp"
    }
  }
}

Remote endpoints

https://invoiceforge.agenttoolworks.com/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢generate_invoice(invoice, profile)

Turns invoice data into a compliant UBL 2.1 XML document following the EN 16931 semantic model, with totals and the VAT breakdown computed for you. Choose the plain EN 16931 profile or the Peppol BIS Billing 3.0 customization. The document is validated before it is returned, so you never get back XML that would be rejected. Costs 1 credit.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice": {
      "type": "object",
      "properties": {
        "invoiceNumber": {
          "type": "string",
          "minLength": 1
        },
        "issueDate": {
          "type": "string",
          "description": "ISO date, e.g. '2026-09-01'"
        },
        "dueDate": {
          "type": "string"
        },
        "typeCode": {
          "default": "380",
          "type": "string"
        },
        "currency": {
          "type": "string",
          "minLength": 3,
          "maxLength": 3,
          "description": "ISO 4217, e.g. 'EUR'"
        },
        "buyerReference": {
          "type": "string"
        },
        "seller": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1,
              "description": "Legal name of the party"
            },
            "vatId": {
              "description": "VAT identifier, e.g. 'FR40303265045'",
              "type": "string"
            },
            "legalId": {
              "description": "Legal registration id, e.g. SIREN",
              "type": "string"
            },
            "addressLine": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "countryCode": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "ISO 3166-1 alpha-2, e.g. 'FR'"
            }
          },
          "required": [
            "name",
            "countryCode"
          ],
          "additionalProperties": false
        },
        "buyer": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "minLength": 1,
              "description": "Legal name of the party"
            },
            "vatId": {
              "description": "VAT identifier, e.g. 'FR40303265045'",
              "type": "string"
            },
            "legalId": {
              "description": "Legal registration id, e.g. SIREN",
              "type": "string"
            },
            "addressLine": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "countryCode": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "description": "ISO 3166-1 alpha-2, e.g. 'FR'"
            }
          },
          "required": [
            "name",
            "countryCode"
          ],
          "additionalProperties": false
        },
        "lines": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "minLength": 1
              },
              "name": {
                "type": "string",
                "minLength": 1,
                "description": "Item name"
              },
              "quantity": {
                "type": "number"
              },
              "unitCode": {
                "default": "C62",
                "type": "string"
              },
              "unitPrice": {
                "type": "number"
              },
              "netAmount": {
                "type": "number"
              },
              "vatCategory": {
                "default": "S",
                "description": "VAT category code, e.g. 'S' standard, 'Z' zero, 'E' exempt",
                "type": "string"
              },
              "vatRate": {
                "type": "number"
              }
            },
            "required": [
              "id",
              "name",
              "quantity",
              "unitPrice",
              "netAmount"
            ],
            "additionalProperties": false
          }
        },
        "vatExemptions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "category": {
                "type": "string",
                "minLength": 1,
                "description": "VAT category code the reason applies to, e.g. 'AE'"
              },
              "reasonCode": {
                "description": "VATEX code, e.g. 'VATEX-EU-AE'",
                "type": "string"
              },
              "reasonText": {
                "description": "Reason in words, e.g. 'Reverse charge'. Either text or code is enough.",
                "type": "string"
              }
            },
            "required": [
              "category"
            ],
            "additionalProperties": false
          }
        },
        "prepaidAmount": {
          "type": "number"
        },
        "paymentTerms": {
          "type": "string"
        },
        "payeeIban": {
          "type": "string"
        }
      },
      "required": [
        "invoiceNumber",
        "issueDate",
        "currency",
        "seller",
        "buyer",
        "lines"
      ],
      "additionalProperties": false,
      "description": "The invoice to produce"
    },
    "profile": {
      "default": "en16931",
      "description": "Which specification identifier to stamp on the document",
      "type": "string",
      "enum": [
        "en16931",
        "peppol"
      ]
    }
  },
  "required": [
    "invoice"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
⚪validate_invoice(invoice)

Checks invoice data against a documented subset of the EN 16931 business rules: mandatory fields, code lists, VAT category consistency and the arithmetic that most often gets invoices rejected. Accepts incomplete or malformed data on purpose, since that is what you want checked, and answers with each violation, its rule identifier and its business term, plus exactly which rules were checked. It never claims full compliance with the norm. Costs 1 credit.

Input Schema

{
  "type": "object",
  "properties": {
    "invoice": {
      "type": "object",
      "properties": {
        "invoiceNumber": {
          "default": "",
          "type": "string"
        },
        "issueDate": {
          "default": "",
          "type": "string"
        },
        "dueDate": {
          "type": "string"
        },
        "typeCode": {
          "default": "380",
          "type": "string"
        },
        "currency": {
          "default": "",
          "type": "string"
        },
        "buyerReference": {
          "type": "string"
        },
        "vatExemptions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "category": {
                "default": "",
                "type": "string"
              },
              "reasonCode": {
                "type": "string"
              },
              "reasonText": {
                "type": "string"
              }
            },
            "additionalProperties": {}
          }
        },
        "seller": {
          "default": {
            "name": "",
            "countryCode": ""
          },
          "type": "object",
          "properties": {
            "name": {
              "default": "",
              "type": "string"
            },
            "vatId": {
              "type": "string"
            },
            "legalId": {
              "type": "string"
            },
            "addressLine": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "countryCode": {
              "default": "",
              "type": "string"
            }
          },
          "additionalProperties": {}
        },
        "buyer": {
          "default": {
            "name": "",
            "countryCode": ""
          },
          "type": "object",
          "properties": {
            "name": {
              "default": "",
              "type": "string"
            },
            "vatId": {
              "type": "string"
            },
            "legalId": {
              "type": "string"
            },
            "addressLine": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "postalCode": {
              "type": "string"
            },
            "countryCode": {
              "default": "",
              "type": "string"
            }
          },
          "additionalProperties": {}
        },
        "lines": {
          "default": [],
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "default": "",
                "type": "string"
              },
              "name": {
                "default": "",
                "type": "string"
              },
              "quantity": {
                "default": 0,
                "type": "number"
              },
              "unitCode": {
                "default": "C62",
                "type": "string"
              },
              "unitPrice": {
                "default": 0,
                "type": "number"
              },
              "netAmount": {
                "default": 0,
                "type": "number"
              },
              "vatCategory": {
                "default": "S",
                "type": "string"
              },
              "vatRate": {
                "type": "number"
              }
            },
            "additionalProperties": {}
          }
        },
        "prepaidAmount": {
          "type": "number"
        },
        "paymentTerms": {
          "type": "string"
        },
        "payeeIban": {
          "type": "string"
        }
      },
      "additionalProperties": {},
      "description": "The invoice to check, however incomplete"
    }
  },
  "required": [
    "invoice"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢extract_invoice(xml)

Reads an incoming UBL or CII (Factur-X) invoice XML and returns the data as structured JSON, listing any field the document did not contain rather than guessing it. Use it to ingest supplier invoices before booking them. Costs 1 credit.

Input Schema

{
  "type": "object",
  "properties": {
    "xml": {
      "type": "string",
      "minLength": 40,
      "description": "The invoice XML, UBL 2.1 or CII"
    }
  },
  "required": [
    "xml"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢describe_coverage

Returns the exact EN 16931 rules this server checks, the syntaxes it can produce and read, and the things it deliberately does not do, such as transmitting invoices over Peppol or acting as a French accredited platform. Light read: costs 0.2 credit.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢get_usage

Returns your current plan, remaining credit balance and call volume over the last 30 days. Free to call.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools