MCP server for WeFact — let Claude (Desktop, Code, Cursor) read and modify your WeFact administration via the v2 API.
Project description
wefact-mcp
An MCP server for the Dutch invoicing platform WeFact. Lets any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Zed, …) read and modify your WeFact administration via natural language.
Stop typing in WeFact. Just tell Claude what to do.
Looking for the polished install + EULA + email support? Buy a commercial license: https://easeo.nl/diensten/wefact-mcp.
Quick start
1. Install
pip install wefact-mcp
2. Get a WeFact API key
In WeFact: Instellingen → API. Generate a key and whitelist your machine's IPv4 address (the API does not yet support IPv6).
3. Configure your MCP client
Claude Code
claude mcp add wefact -e WEFACT_API_KEY=your-key-here -- wefact-mcp
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"wefact": {
"command": "wefact-mcp",
"env": { "WEFACT_API_KEY": "your-key-here" }
}
}
}
Restart your MCP client and the WeFact tools should appear. Try:
Use the wefact-mcp
whoamitool.
Tools
Generic escape hatch
| Tool | Purpose |
|---|---|
wefact_request(controller, action, params) |
Call any WeFact endpoint. |
whoami() |
Sanity-check the connection. |
Debtors (klanten)
list_debtors, get_debtor, create_debtor, update_debtor
Invoices (verkoopfacturen)
list_invoices, get_invoice, create_invoice, send_invoice,
credit_invoice, mark_invoice_paid
Products
list_products, get_product
Subscriptions (abonnementen)
list_subscriptions, get_subscription
Credit invoices (inkoopfacturen)
list_credit_invoices, get_credit_invoice
Prompts
| Prompt | Purpose |
|---|---|
export_to_nixfact |
Walk through migrating a WeFact administration to a Frappe/ERPNext successor. |
feature_audit |
Inventory which WeFact features your account actually uses. |
Field names
Tools that take fields or params use the WeFact field names verbatim
(DebtorCode, InvoiceLines, PriceExcl, …). The docs at
developer.wefact.com stay directly
applicable — copy parameter names from the docs without translation.
Pagination & filtering
List tools fetch all pages by default. Pass limit_pages=1 for the
first page only (useful while exploring). Pass
modified_since="2026-01-01" for incremental sync.
Limitations
- WeFact's API is IPv4 only. Hosting this MCP behind an IPv6-only proxy will fail.
- WeFact rate-limits the API. The client retries on transient failures with exponential backoff; persistent 429s surface as errors.
- The API is not RESTful: every call is a POST to a single endpoint.
- Some
listendpoints return a flat list rather than the controller-plural key; the client falls back to the first list-valued field. If you hit an oddity, fall back towefact_requestand parse the response yourself.
Security model
- The MCP server runs on your machine. No data passes through external servers.
- The WeFact API key stays in your local environment (or your MCP client's config) — never in our hands.
- No telemetry, no usage tracking, no phone-home.
- Source available for audit (see Repository).
- Independently reviewed for SQL injection, auth bypass, and credential leak vectors.
License
wefact-mcp is dual-licensed:
- AGPL-3.0-or-later — free for AGPL-compatible use. If you run a modified version on a server that interacts with users over a network, you must offer those users the source code (per AGPL §13).
- Commercial license — €197/year or €497 lifetime, ex VAT. For proprietary integrations, closed-source products, or hosted services that don't meet AGPL §13. Includes email support and 12 months of updates. Buy at https://easeo.nl/diensten/wefact-mcp.
For agency, white-label or platform partnerships — including a WeFact-side official integration — email nick@easeo.nl.
Disclaimer
This project is not affiliated with or endorsed by WeFact B.V. "WeFact" is a trademark of WeFact B.V. Use of this MCP server requires a valid WeFact account and API key, and is bound by WeFact's terms of service.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wefact_mcp-0.1.0.tar.gz.
File metadata
- Download URL: wefact_mcp-0.1.0.tar.gz
- Upload date:
- Size: 23.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f777965687f2258ba39f065ca30a4b4a5ae2b747c351a9442b4c2e045239aaf
|
|
| MD5 |
212ce66f2b5b8a0138e00f2757bf7a57
|
|
| BLAKE2b-256 |
f3d8aad1c18a10f8dd8f412baca1f11d3e16a8a9b885266caa62aa266706a551
|
Provenance
The following attestation bundles were made for wefact_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on NickAldewereld/wefact-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wefact_mcp-0.1.0.tar.gz -
Subject digest:
0f777965687f2258ba39f065ca30a4b4a5ae2b747c351a9442b4c2e045239aaf - Sigstore transparency entry: 1422229191
- Sigstore integration time:
-
Permalink:
NickAldewereld/wefact-mcp@1cea6b05fde12c6f7e180399f5184ae4702e3459 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/NickAldewereld
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cea6b05fde12c6f7e180399f5184ae4702e3459 -
Trigger Event:
push
-
Statement type:
File details
Details for the file wefact_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: wefact_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
289867f8722dda18c25fef88b074fd50a6402f39d2e442178b4466ccf93e41cd
|
|
| MD5 |
24148dd7248edfab455bf1ff8b576c02
|
|
| BLAKE2b-256 |
df754d0d4fbaf7556c194543473029fb2eeb7c56dd5409d47588cf333fd256c8
|
Provenance
The following attestation bundles were made for wefact_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on NickAldewereld/wefact-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wefact_mcp-0.1.0-py3-none-any.whl -
Subject digest:
289867f8722dda18c25fef88b074fd50a6402f39d2e442178b4466ccf93e41cd - Sigstore transparency entry: 1422229292
- Sigstore integration time:
-
Permalink:
NickAldewereld/wefact-mcp@1cea6b05fde12c6f7e180399f5184ae4702e3459 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/NickAldewereld
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cea6b05fde12c6f7e180399f5184ae4702e3459 -
Trigger Event:
push
-
Statement type: