e-Boekhouden MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read e-Boekhouden relations, invoices, ledgers, bookings and products; create relations, invoices.
25 tools: 4 can delete or cancel things, 4 change things and 17 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things4Claude Code: ask: see these tools
- Only reads17Claude Code: allow: see these tools
4 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http e-boekhouden https://e-boekhouden.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "eboekhouden_list_relations" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_relations" says "list": a word for reading.
The server marks "eboekhouden_list_outstanding_invoices" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_outstanding_invoices" says "list": a word for reading.
The server marks "eboekhouden_list_ledgers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_ledgers" says "list": a word for reading.
The server marks "eboekhouden_list_products" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_products" says "list": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
25 tools
Deletes or cancels 4Claude Code: deny
eboekhouden_create_invoiceCreate a sales invoice for a relation.No findings
Why it is in this group
- The name "eboekhouden_create_invoice" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a sales invoice for a relation. PERMANENT: the API cannot change or delete invoices afterwards, and an invoice number is used up. The invoice is created only: it is NOT e-mailed to the customer, NOT booked as a mutation and no direct debit is set. Needs relation_id, template_id (eboekhouden_list_invoice_templates), term_of_payment in days and at least one item with a ledger_id. Returns the new id and invoice number. POST /v1/invoice.
Annotations the server declares
- title: Create an invoice
- destructiveHint: true
eboekhouden_create_productCreate a product or service.No findings
Why it is in this group
- The name "eboekhouden_create_product" says "create": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a product or service. Needs code, description, a sale VAT code and a ledger id, and exactly one of price_excl or price_incl. Returns the new id. POST /v1/product.
Annotations the server declares
- title: Create a product
- destructiveHint: true
eboekhouden_create_relationCreate a new relation (customer or supplier) in the administration.No findings
Why it is in this group
- The name "eboekhouden_create_relation" says "create": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Create a new relation (customer or supplier) in the administration. Only name is required; the code is generated when omitted. Returns the new id and code. POST /v1/relation.
Annotations the server declares
- title: Create a relation
- destructiveHint: true
eboekhouden_update_relationChange fields of an existing relation.No findings
Why it is in this group
- The name "eboekhouden_update_relation" says "update": a word for a change.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Change fields of an existing relation. The tool first reads the relation, then sends its current values with your changes on top (the API requires name on every update), so fields you do not pass keep their values. This overwrites the current values of the fields you pass. GET + PATCH /v1/relation/{id}.
Annotations the server declares
- title: Update a relation
- destructiveHint: true
- idempotentHint: true
Changes things 4Claude Code: ask
eboekhouden_list_ledgersThe ledger accounts (grootboekrekeningen): id, code, description and category (BAL balance, VW profit and loss, FIN, DEB, CRED, AF6, AF19, AFOVERIG, VOOR, BTWRC, AF).1 finding
Why it is in this group
- The name "eboekhouden_list_ledgers" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "eboekhouden_list_ledgers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_ledgers" says "list": a word for reading.
Description, as the server wrote it The ledger accounts (grootboekrekeningen): id, code, description and category (BAL balance, VW profit and loss, FIN, DEB, CRED, AF6, AF19, AFOVERIG, VOOR, BTWRC, AF). Use the id as ledger_id in other tools. Paged: pass next_offset as offset. GET /v1/ledger.
Annotations the server declares
- title: List ledgers (chart of accounts)
- readOnlyHint: true
eboekhouden_list_outstanding_invoicesOpen (unpaid) invoices: debtors (D, sales invoices customers still owe) or creditors (C, purchase invoices still to be paid).1 finding
Why it is in this group
- The name "eboekhouden_list_outstanding_invoices" says "list": a word for reading.
- The description's first verb is "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "eboekhouden_list_outstanding_invoices" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_outstanding_invoices" says "list": a word for reading.
Description, as the server wrote it Open (unpaid) invoices: debtors (D, sales invoices customers still owe) or creditors (C, purchase invoices still to be paid). Paged: pass next_offset as offset. GET /v1/mutation/invoice/outstanding.
Annotations the server declares
- title: List outstanding invoices
- readOnlyHint: true
eboekhouden_list_productsList products and services (articles) with price, VAT code, ledger and unit, optionally by code or group code.1 finding
Why it is in this group
- The name "eboekhouden_list_products" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "eboekhouden_list_products" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_products" says "list": a word for reading.
Description, as the server wrote it List products and services (articles) with price, VAT code, ledger and unit, optionally by code or group code. Paged: pass next_offset as offset. GET /v1/product.
Annotations the server declares
- title: List products
- readOnlyHint: true
eboekhouden_list_relationsList relations (customers and suppliers of the administration), optionally filtered (filters combine with AND).1 finding
Why it is in this group
- The name "eboekhouden_list_relations" says "list": a word for reading.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "eboekhouden_list_relations" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true}; The name "eboekhouden_list_relations" says "list": a word for reading.
Description, as the server wrote it List relations (customers and suppliers of the administration), optionally filtered (filters combine with AND). Text filters match exactly unless match is contains or starts_with. Paged: pass next_offset as offset. GET /v1/relation.
Annotations the server declares
- title: List or search relations
- readOnlyHint: true
Only reads 17Claude Code: allow
eboekhouden_get_cost_centerOne cost center.No findings
Why it is in this group
- The name "eboekhouden_get_cost_center" says "get": a word for reading.
Description, as the server wrote it One cost center. GET /v1/costcenter/{id}.
Annotations the server declares
- title: Get a cost center
- readOnlyHint: true
eboekhouden_get_invoiceOne invoice with its items, amounts and relation.No findings
Why it is in this group
- The name "eboekhouden_get_invoice" says "get": a word for reading.
Description, as the server wrote it One invoice with its items, amounts and relation. GET /v1/invoice/{id}.
Annotations the server declares
- title: Get an invoice
- readOnlyHint: true
eboekhouden_get_ledgerOne ledger account.No findings
Why it is in this group
- The name "eboekhouden_get_ledger" says "get": a word for reading.
Description, as the server wrote it One ledger account. GET /v1/ledger/{id}.
Annotations the server declares
- title: Get a ledger
- readOnlyHint: true
eboekhouden_get_ledger_balanceThe balance of one ledger, optionally per cost center and for a period (from/to).No findings
Why it is in this group
- The name "eboekhouden_get_ledger_balance" says "get": a word for reading.
Description, as the server wrote it The balance of one ledger, optionally per cost center and for a period (from/to). GET /v1/ledger/{id}/balance.
Annotations the server declares
- title: Get a ledger's balance
- readOnlyHint: true
eboekhouden_get_memberOne member; only available to clubs and associations.No findings
Why it is in this group
- The name "eboekhouden_get_member" says "get": a word for reading.
Description, as the server wrote it One member; only available to clubs and associations. GET /v1/member/{id}.
Annotations the server declares
- title: Get a member (clubs and associations)
- readOnlyHint: true
eboekhouden_get_mutationOne mutation with its rows (ledger, VAT code, amount, relation, invoice number).No findings
Why it is in this group
- The name "eboekhouden_get_mutation" says "get": a word for reading.
Description, as the server wrote it One mutation with its rows (ledger, VAT code, amount, relation, invoice number). GET /v1/mutation/{id}.
Annotations the server declares
- title: Get a mutation (booking)
- readOnlyHint: true
eboekhouden_get_productOne product with price, VAT code, ledger, unit and stock setting.No findings
Why it is in this group
- The name "eboekhouden_get_product" says "get": a word for reading.
Description, as the server wrote it One product with price, VAT code, ledger, unit and stock setting. GET /v1/product/{id}.
Annotations the server declares
- title: Get a product
- readOnlyHint: true
eboekhouden_get_relationOne relation with all its fields (addresses, e-mail addresses, VAT and KvK number, IBAN, payment term, ledger).No findings
Why it is in this group
- The name "eboekhouden_get_relation" says "get": a word for reading.
Description, as the server wrote it One relation with all its fields (addresses, e-mail addresses, VAT and KvK number, IBAN, payment term, ledger). GET /v1/relation/{id}.
Annotations the server declares
- title: Get a relation
- readOnlyHint: true
eboekhouden_list_cost_centersList cost centers (kostenplaatsen), optionally by parent id or description.No findings
Why it is in this group
- The name "eboekhouden_list_cost_centers" says "list": a word for reading.
Description, as the server wrote it List cost centers (kostenplaatsen), optionally by parent id or description. Paged: pass next_offset as offset. GET /v1/costcenter.
Annotations the server declares
- title: List cost centers
- readOnlyHint: true
eboekhouden_list_email_templatesList e-mail templates.No findings
Why it is in this group
- The name "eboekhouden_list_email_templates" says "list": a word for reading.
Description, as the server wrote it List e-mail templates. Paged: pass next_offset as offset. GET /v1/emailtemplate.
Annotations the server declares
- title: List e-mail templates
- readOnlyHint: true
eboekhouden_list_invoice_templatesList invoice templates (the template_id for eboekhouden_create_invoice), optionally by name, type (E editor, A advanced) or active.No findings
Why it is in this group
- The name "eboekhouden_list_invoice_templates" says "list": a word for reading.
Description, as the server wrote it List invoice templates (the template_id for eboekhouden_create_invoice), optionally by name, type (E editor, A advanced) or active. Paged: pass next_offset as offset. GET /v1/invoicetemplate.
Annotations the server declares
- title: List invoice templates
- readOnlyHint: true
eboekhouden_list_invoicesSearch the invoices created in the invoicing module, by invoice number, relation or date (exact, or from/to).No findings
Why it is in this group
- The name "eboekhouden_list_invoices" says "list": a word for reading.
Description, as the server wrote it Search the invoices created in the invoicing module, by invoice number, relation or date (exact, or from/to). Paged: pass next_offset as offset. GET /v1/invoice.
Annotations the server declares
- title: List or search invoices
- readOnlyHint: true
eboekhouden_list_ledger_balancesThe balances of all ledgers (a trial balance), optionally per cost center and for a period (from/to).No findings
Why it is in this group
- The name "eboekhouden_list_ledger_balances" says "list": a word for reading.
Description, as the server wrote it The balances of all ledgers (a trial balance), optionally per cost center and for a period (from/to). GET /v1/ledger/balances.
Annotations the server declares
- title: List all ledger balances
- readOnlyHint: true
eboekhouden_list_membersList members; only available to clubs and associations (others get error MEM_056).No findings
Why it is in this group
- The name "eboekhouden_list_members" says "list": a word for reading.
Description, as the server wrote it List members; only available to clubs and associations (others get error MEM_056). Paged: pass next_offset as offset. GET /v1/member.
Annotations the server declares
- title: List members (clubs and associations)
- readOnlyHint: true
eboekhouden_list_mutationsSearch the bookkeeping mutations: type 1 invoice received, 2 invoice sent, 3 invoice payment received, 4 invoice payment sent, 5 money received, 6 money sent, 7 general journal ent…No findings
Why it is in this group
- The name "eboekhouden_list_mutations" says "list": a word for reading.
Description, as the server wrote it Search the bookkeeping mutations: type 1 invoice received, 2 invoice sent, 3 invoice payment received, 4 invoice payment sent, 5 money received, 6 money sent, 7 general journal entry. Filter by type, mutation number, description, invoice number or date. Paged: pass next_offset as offset. GET /v1/mutation.
Annotations the server declares
- title: List or search mutations (bookings)
- readOnlyHint: true
eboekhouden_list_product_groupsAll product groups.No findings
Why it is in this group
- The name "eboekhouden_list_product_groups" says "list": a word for reading.
Description, as the server wrote it All product groups. GET /v1/product/groups.
Annotations the server declares
- title: List product groups
- readOnlyHint: true
eboekhouden_list_unitsList product units (piece, hour, ...) with their ids.No findings
Why it is in this group
- The name "eboekhouden_list_units" says "list": a word for reading.
Description, as the server wrote it List product units (piece, hour, ...) with their ids. Paged: pass next_offset as offset. GET /v1/unit.
Annotations the server declares
- title: List units
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http e-boekhouden https://e-boekhouden.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__e-boekhouden__eboekhouden_get_relation",
"mcp__e-boekhouden__eboekhouden_list_invoices",
"mcp__e-boekhouden__eboekhouden_get_invoice",
"mcp__e-boekhouden__eboekhouden_list_mutations",
"mcp__e-boekhouden__eboekhouden_get_mutation",
"mcp__e-boekhouden__eboekhouden_get_ledger",
"mcp__e-boekhouden__eboekhouden_get_ledger_balance",
"mcp__e-boekhouden__eboekhouden_list_ledger_balances",
"mcp__e-boekhouden__eboekhouden_get_product",
"mcp__e-boekhouden__eboekhouden_list_product_groups",
"mcp__e-boekhouden__eboekhouden_list_cost_centers",
"mcp__e-boekhouden__eboekhouden_get_cost_center",
"mcp__e-boekhouden__eboekhouden_list_units",
"mcp__e-boekhouden__eboekhouden_list_invoice_templates",
"mcp__e-boekhouden__eboekhouden_list_email_templates",
"mcp__e-boekhouden__eboekhouden_list_members",
"mcp__e-boekhouden__eboekhouden_get_member"
],
"ask": [
"mcp__e-boekhouden__eboekhouden_list_relations",
"mcp__e-boekhouden__eboekhouden_list_outstanding_invoices",
"mcp__e-boekhouden__eboekhouden_list_ledgers",
"mcp__e-boekhouden__eboekhouden_list_products"
],
"deny": [
"mcp__e-boekhouden__eboekhouden_create_relation",
"mcp__e-boekhouden__eboekhouden_update_relation",
"mcp__e-boekhouden__eboekhouden_create_product",
"mcp__e-boekhouden__eboekhouden_create_invoice"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as e-boekhouden. Review it before you use it.