mcp-eboekhouden
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
mcp-eboekhouden
MCP server (stdio) that lets an AI assistant such as Claude keep the books in e-Boekhouden through the official e-Boekhouden REST API.
It can create mutations and relations and query the administration. Changing or deleting existing mutations is deliberately not supported: corrections are made by hand in e-Boekhouden.
Tools
Tool | Kind | What it does |
| read | List mutations, filter by type, date range, invoice number, description text |
| read | One mutation with rows and VAT totals |
| read | List relations, filter by name/code (substring), type, e-mail, city |
| read | One relation with name, contact details, VAT number, IBAN |
| read | List ledger accounts with category |
| read | Cost centers for |
| read | Unpaid purchase (creditors) or sales (debtors) invoices |
| read | Dutch VAT codes accepted by the API (static, from the docs; the API has no VAT endpoint) |
| read | Balance or period movement of one ledger |
| read | Control overview per VAT code and per VAT return box (incl. reverse-charged VAT), amount payable/refundable. Not a VAT return. |
| write | All 7 mutation types: invoice received/sent, invoice payment received/sent, money received/sent, general journal entry |
| write | New customer/supplier |
| write | Change fields of a relation (only the fields passed) |
Safeguards on create_mutation
Marker: every description, on the mutation and on each row, contains a marker (
[claude]by default, set withEBOEKHOUDEN_MARKER), so mutations made through this server are easy to find in e-Boekhouden. If the text does not contain it yet, the server puts it in front; a marker at the end (... [claude]) is kept as is. The mutation description holds 50 characters including the marker.Validation before sending: date (real calendar date), amounts (max 2 decimals, not 0), VAT code (API enum), sales vs. purchase code for invoices,
vatAmountonly withAFW/AFW_VERK, domestic reverse charge (VERL_INK) onlyEX, ledgers exist and row ledgers have an allowed category, relations exist and are active.Idempotency: before creating, the server compares the request with every mutation of the same type on the same date. Same relation, total amount and invoice number (or description when there is no invoice number) returns the existing mutation (
status: "duplicate") and creates nothing.Possible duplicates: same type, date, relation and amount but a different invoice number or description (for example one entered by hand) is rejected. After checking it in e-Boekhouden, call again with
confirmNotDuplicate: true.Audit log: every write action (created, duplicate, rejected, error) is appended as one JSON line to
logs/audit.jsonlin the install, or toEBOEKHOUDEN_AUDIT_LOG. Credential-like keys are stripped; the file is created with mode0600.
Limits
Dutch administrations only: the VAT codes, VAT return boxes and validation cover the Dutch (NL) VAT codes. Belgian administrations (
BE_*VAT codes) are not supported.No attachments: the API has no endpoint for receipts or invoice PDFs.
Reverse-charged VAT in
vat_quarter_summaryis estimated at 21%, because the API reports 0 VAT for those rows. This is verified forBI_EU_INK; forBU_EU_INKandVERL_INKit is markedestimated_unverified.Substring filters (
descriptionContains,nameContains, ...) escape[.%and?work as wildcards.Rate limits are not documented by e-Boekhouden; the client throttles to one request per 250 ms and retries once on HTTP 429.
Related MCP server: Buchhaltungsbutler MCP
Requirements
Node.js 20+
An e-Boekhouden API token (created in the e-Boekhouden account settings)
Recommended: 1Password CLI (
op) to inject the token at start-up. Any other way of setting the environment variables works too.For development: gitleaks (pre-commit hook)
Configuration
Variable | Required | Description |
| yes | e-Boekhouden API token |
| no | Token expiry (Unix seconds or ISO date); tool results warn from 30 days before |
| no | Marker added to mutation descriptions (default |
| no | Integration identifier for the session (default |
| no | Absolute path of the audit log ( |
With 1Password, copy .env.op.example to .env.op (git-ignored) and fill in your
own op://<vault>/<item>/<field> references. op run resolves them when the
process starts; the token is never written to disk.
Setup
From npm (no build needed):
EBOEKHOUDEN_API_TOKEN=... npx -y @sironite/mcp-eboekhoudenFrom source:
npm install # also enables the git hooks in .githooks/
npm run build
cp .env.op.example .env.op # then edit the op:// referencesRun it with secrets from 1Password:
scripts/start-with-op.sh # uses ./.env.op; or pass another env filestart-with-op.sh checks first that the 1Password CLI is signed in and exits
with a clear message if it is not, instead of hanging on an interactive prompt.
It then runs op run --env-file=<env file> -- node dist/index.js.
Register in Claude Code
From the folder where you want the server to be available (local scope keeps it out of every other folder):
claude mcp add -s local eboekhouden -e OP_BIOMETRIC_UNLOCK_ENABLED=true -- \
/path/to/mcp-eboekhouden/scripts/start-with-op.sh /path/to/mcp-eboekhouden/.env.opOP_BIOMETRIC_UNLOCK_ENABLED=true works around a macOS privacy restriction that
can stop op from detecting the 1Password desktop-app integration ("No accounts
configured" or "not currently signed in"). Check with claude mcp list; restart
Claude Code after changes.
Separate production install (optional)
To keep the server you use for real bookkeeping independent of a development
checkout, install origin/main into its own folder:
npm run install:prod # default target: ~/.local/share/mcp-eboekhoudenThe script clones or updates the repository (from MCP_EBOEKHOUDEN_REPO, or the
origin of this checkout), builds it and keeps its .env.op in sync with
.env.op.example: missing keys are appended, existing lines are never changed, and
commented optional keys are only reported. Register the production copy as shown
above, pointing at its scripts/start-with-op.sh and .env.op.
Development
npm run lint # ESLint + Prettier check
npm test # Vitest; the HTTP layer is mocked, no real API calls
npm run test:scripts # shell tests for the install helpers
npm run build
npm run secrets:scan # gitleaks over git history and working treeGit hooks (.githooks/): pre-commit runs gitleaks, pre-push blocks direct
pushes to main except fast-forwards to a pull request branch (see
CONTRIBUTING.md). CI runs gitleaks over the full history, lint, tests and build.
API research notes (endpoints, fields, error codes, observed behaviour) are in
docs/api-notes.md.
License
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
Connect Claude to Dutch accounting software: e-Boekhouden invoices, contacts and ledgers.
Read e-Boekhouden relations, invoices, ledgers, bookings and products; create relations, invoices.
e-Boekhouden MCP server for ChatGPT, Claude and any AI agent: create invoice, book mutation, add relation, list open items and export ledger in your own e-Boekhouden account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to e-Boekhouden yourself; Cotlet does not store your password and you need no e-Boekhouden API key. About the official e-Boekhouden API: Yes. e-Boekhouden has a REST API with an OpenAPI description (checked 14 Oct 2026). Setup and FAQ: https://cotlet.dev/integrations/e-boekhouden-api-mcp-server
Open-source AI accounting skills verified by licensed accountants (tax, VAT, payroll).
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables interaction with the Estonian e-arveldaja (RIK e-Financials) REST API to manage financial records like invoices and journal entries using natural language. It supports automating purchase invoice entry from PDFs, reconciling bank transactions, and generating financial reports.1301,409 npm39Apache 2.0
- AlicenseAqualityAmaintenanceEnables AI assistants to manage BuchhaltungsButler bookkeeping through all 48 API endpoints, with safety-categorized tools for read, write, and destructive operations.4620 npm9MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to query and manage self-hosted accounting data—invoices, balances, and books—through natural language, with read-only tools by default and optional scoped write operations.3025 PyPI1AGPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables connecting AI assistants to Exact Online through its official REST API with OAuth2 authentication and automatic token refresh. Provides curated tools for reading and, optionally, writing common accounting entities such as accounts, contacts, items, journal entries and sales/purchase invoices, plus generic GET/POST/PUT/DELETE tools for any other endpoint, over local stdio or hosted HTTP transports.1-