InvoiceXML

com.invoicexmlPublished by invoicexml.comOfficial publisherv1.0.0Updated Oct 24, 2026

Create, validate, convert & extract compliant e-invoices (UBL, Factur-X, ZUGFeRD, XRechnung)

VerifiedStreamable HTTPWeb executableFinanceBusiness & Commerce

Overview

AI-generated overview

Remote InvoiceXML MCP server that lets an assistant create, validate, convert and extract compliant e-invoices such as UBL, Factur-X, ZUGFeRD and XRechnung.

What you can do
  • Create and generate compliant e-invoices in the supported formats
  • Validate existing e-invoice documents against the supported standards
  • Convert invoices between formats such as UBL, CII, Factur-X, ZUGFeRD and XRechnung
  • Extract data from e-invoice files supplied by upload or by URL fetch
  • Work across Peppol BIS Billing 3.0 and related European e-invoicing profiles
When to use it
Useful when an assistant has to produce, check or reformat electronic invoices for European e-invoicing standards, or pull structured data out of invoice files, without building the format handling itself.
Requirements
The hosted endpoint is remote and requires OAuth 2.1 sign-in against invoicexml.com, which yields the user's API key as the access token. Self-hosting the same codebase needs the .NET 10 SDK and an InvoiceXML API key supplied via INVOICEXML_API_KEY or McpApiKeyValue. Network access to the InvoiceXML API is required.
Before you install
The server handles invoice and billing data, which is often commercially sensitive and may contain personal data; documents and fetched URLs are sent to the InvoiceXML API. In self-hosted API key mode the key is a secret and must not be committed to the repository. OAuth mode forwards the bearer token verbatim to the API, so token scope and lifetime matter. URL-fetch input makes the server retrieve remote files on your behalf.

Installation

In SourceWeft

  1. Open InvoiceXML in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/com.invoicexml%2Finvoicexml/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "invoicexml": {
      "type": "http",
      "url": "https://mcp.invoicexml.com/"
    }
  }
}

README

InvoiceXML MCP Server

A Model Context Protocol server that exposes the InvoiceXML API to AI agents. Covers Factur-X, ZUGFeRD, XRechnung, UBL / CII, and Peppol BIS Billing 3.0.

The same codebase runs in two deployment shapes, selected at startup by one environment variable:

ModeWho runs itAuth
Self-hostedYou, on your own machine or serverA single API key in env or appsettings.json
HostedInvoiceXML, on its own infrastructureOAuth 2.1 + Dynamic Client Registration against invoicexml.com

Both run the same binary; only the configuration differs. The repository is platform-independent — it knows nothing about where or how you host it.

Architecture

+----------------------+   ProjectReference   +----------------------+|  InvoiceXml.Mcp.Core | -------------------> |  InvoiceXml.Mcp.Host ||  (SDK: client+tools) |                      |  (the deployable)    |+----------------------+                      +----------------------+

InvoiceXml.Mcp.Core is a small, transport-agnostic SDK:

  • IInvoiceXmlClient — typed client over the public REST API
  • HttpInvoiceXmlClient — the only implementation; consumes an HttpClient from IHttpClientFactory
  • InvoiceXmlClientOptions — base URL, timeout (no auth)
  • AddInvoiceXmlMcpCore(IServiceCollection, IConfiguration) — DI entry point; returns the IHttpClientBuilder so the host attaches auth as a DelegatingHandler

The SDK never sees credentials. The host applies them through the HTTP pipeline. That seam is what lets one codebase serve both deployment modes.

InvoiceXml.Mcp.Host is an ASP.NET Core 10 app:

  • Reads Mcp:AuthMode (ApiKey or OAuth) at startup
  • Wires the matching DelegatingHandler onto the Core HTTP client via AddHostAuth(...)
  • Serves the MCP endpoint at POST /, a human-friendly welcome page at GET /, and /health

Adding a new auth mode = one arm in AuthExtensions.cs plus a small folder under Auth/<Mode>/. Adding a new tool = one [McpServerTool] class. Nothing else changes.

Repository layout

invoicexml-mcp/├── src/│   ├── InvoiceXml.Mcp.Core/              # the SDK: client, models, tools│   │   ├── Enums/  Interfaces/  Models/  Options/  Services/  Tools/  Extensions/│   └── InvoiceXml.Mcp.Host/              # the deployable host│       ├── Auth/{ApiKey,OAuth}/          # the two auth modes│       ├── Configuration/│       ├── Program.cs│       └── appsettings.json              # safe defaults, no secrets├── tests/│   ├── InvoiceXml.Mcp.Core.Tests/│   └── InvoiceXml.Mcp.Host.Tests/├── Directory.Build.props                 # repo-wide MSBuild defaults├── Directory.Packages.props              # Central Package Management├── global.json                           # pins the .NET SDK└── InvoiceXml.Mcp.slnx

Running locally

You need a .NET 10 SDK and an InvoiceXML API key.

pwsh
# 1. Provide your API key (pick one):
# A. dotnet user-secrets (recommended — kept outside the repo)dotnet user-secrets --project src/InvoiceXml.Mcp.Host set "Mcp:ApiKey:Value" "your-key"
# B. environment variable$env:INVOICEXML_API_KEY = "your-key"
# 2. Rundotnet run --project src/InvoiceXml.Mcp.Host

GET http://localhost:5004/ shows a welcome page in a browser; the MCP endpoint is POST http://localhost:5004/; GET /health returns { "status": "ok" }.

Configuration

jsonc
{  // Required in OAuth mode. The public origin where this MCP server is reachable.  // Used in the protected-resource metadata response.  "McpUri": "https://mcp.example.com",
  "InvoiceXml": {    "BaseUrl": "https://api.invoicexml.com",   // override for staging / local    "Timeout": "00:01:40"  },
  "Mcp": {    "AuthMode": "ApiKey",                       // "ApiKey" | "OAuth"    "ApiKey": {      "Value": ""                               // ApiKey mode: NEVER commit a real key    },    "OAuth": {      "AuthorizationServer": "https://invoicexml.com",      "ScopesSupported": [ "api_token.read" ]    },    "FileInput": {                              // limits for the URL-fetch input mode      "MaxFileSizeBytes": 5242880,      "FetchTimeout": "00:00:30"    }  }}

Environment variable equivalents (double underscore = nesting):

VariableMaps to
INVOICEXML_API_KEYMcp:ApiKey:Value (friendly alias)
Mcp__ApiKey__ValueMcp:ApiKey:Value
Mcp__AuthModeMcp:AuthMode (ApiKey or OAuth)
Mcp__OAuth__AuthorizationServerMcp:OAuth:AuthorizationServer
McpUriMcpUri (root-level)
InvoiceXml__BaseUrlInvoiceXml:BaseUrl

OAuth mode

When Mcp:AuthMode=OAuth the host stops accepting a static API key and instead:

  1. Returns 401 with WWW-Authenticate: Bearer resource_metadata="…" for any POST / that has no Bearer token.
  2. Serves GET /.well-known/oauth-protected-resource pointing MCP clients at invoicexml.com as the authorization server.
  3. Forwards the inbound Bearer token verbatim on every outbound call to the InvoiceXML API (the API is the source of truth for token validity; the MCP server does not validate tokens locally).

The dance an MCP client performs:

client → MCP  POST /                           → 401 + resource_metadataclient → /.well-known/oauth-protected-resource → { authorization_servers: [invoicexml.com] }client → invoicexml.com/.well-known/oauth-authorization-server                                               → { authorize, token, register endpoints }client → invoicexml.com/oauth/register         → client_id + client_secret  (DCR)client → invoicexml.com/oauth/authorize        → user consents, gets codeclient → invoicexml.com/oauth/token            → access_token  (= user's API key)client → MCP  POST /  + Authorization: Bearer  → 200, tool call flows through

Deployment

The host is a standard ASP.NET Core app — run it however you run .NET services (systemd, a container, a PaaS, etc.; the repo doesn't prescribe one):

pwsh
dotnet publish src/InvoiceXml.Mcp.Host -c Release -o ./publish# then run ./publish/InvoiceXml.Mcp.Host on your host

Set configuration via environment variables on the host (never commit secrets):

  • ASPNETCORE_ENVIRONMENT=Production
  • Mcp__AuthMode=ApiKey (or OAuth)
  • Mcp__ApiKey__Value=… / INVOICEXML_API_KEY=… (ApiKey mode)
  • McpUri=https://your-public-url and Mcp__OAuth__AuthorizationServer=https://invoicexml.com (OAuth mode)

Terminate TLS at your reverse proxy / load balancer and forward to the host's HTTP port. The server is stateless, so you can run multiple instances behind a load balancer.

License

MIT — see LICENSE.

Source: README.md at commit 41942a0

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts