Reported issues for bexio-mcp-server
Pod holds 15 of 15 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to bexio-mcp-server.
Most discussed
Orphaned server processes busy-loop at ~100% CPU after client disconnect (stdio)
Summary
When the MCP client disconnects (window close / session restart) without a graceful
shutdown, the bexio-mcp-server process does not exit. Instead it appears to
busy-loop and pins a full CPU core at ~100%. Orphaned instances accumulate over a
work session, each spinning — three were running simultaneously here (~300% CPU
total) while completely idle (no requests).
Environment
@promptpartner/bexio-mcp-server2.4.0 (latest on npm)- Launched via
npxover stdio by
Read the thread · 2026-06-19 · closed · external user · 2 comments
create_bill / create_outgoing_payment: misleading description and undocumented required fields
Summary
create_bill and create_outgoing_payment accept an open additionalProperties object whose required structure is undocumented, and create_bill's description is actively misleading. Creating a single bill + payment took ~10 trial-and-error round trips driven only by the API's validation errors.
Environment
- v2.3.0 (unchanged in v2.4.0)
create_bill
Description says: "Bill data including contact_id, title, positions, etc."
Reality (v4 purchase/bills):
- `contact_
Read the thread · 2026-06-16 · closed · external user · 2 comments
All write tool parameters received as undefined — write operations don't work
Bug Report
All create/update/delete tools fail because the server receives every parameter as undefined,
even when explicitly provided by the Claude client. Read-only tools with no required parameters
(e.g. list_invoices) work fine.
Steps to Reproduce
Call create_contact with the following parameters:
contact_type:"company"name_1:"Test GmbH"
Expected Behavior
Contact is created successfully in Bexio.
Actual Behavior
{
"code": "VALIDATION_ERROR",
[Read the thread](https://github.com/PromptPartner/bexio-mcp-server/issues/2) · 2026-03-13 · closed · external user · 2 comments
### create_iban_payment produces a standalone payment with no bill link (silently breaks bill reconciliation)
## Summary
`create_iban_payment` creates a **standalone banking payment that is not linked to any bill** (`bill_id` is always `null`). When an agent or user reaches for it to pay a supplier bill — the obvious-sounding choice for "an IBAN payment" — the result silently breaks the normal accounting workflow: the bill stays in status **"Offen"**, its **Zahlungen** section stays empty, and **automatic bank reconciliation can never match the payment to the bill**. Nothing in the tool description warn
[Read the thread](https://github.com/PromptPartner/bexio-mcp-server/issues/12) · 2026-06-19 · closed · external user · 1 comment
### download_file returns entire file as inline base64, overflowing client context
## Summary
`download_file` returns the entire file as an inline base64 string inside the JSON tool result. For anything but tiny files this overflows the MCP client's context window. A 226 KB PDF produced a ~308,000-character result that the client refused to load.
## Environment
- **v2.3.0** (unchanged in v2.4.0)
## Root cause
`src/bexio-client.ts`:
```ts
async downloadFile(fileId) {
const response = await axios.get(`.../3.0/files/${fileId}/download`, { responseType: "arraybuffer", ... });
[Read the thread](https://github.com/PromptPartner/bexio-mcp-server/issues/10) · 2026-06-16 · closed · external user · 1 comment
### update_outgoing_payment always returns 405 (endpoint does not accept PUT)
## Summary
`update_outgoing_payment` always fails with **405 Method Not Allowed**: the v4 `purchase/outgoing-payments/{id}` endpoint does not accept PUT. The tool is therefore non-functional as advertised.
## Environment
- **v2.3.0** (unchanged in v2.4.0)
## Reproduction
1. `create_outgoing_payment(...)` → payment created (`status: "PENDING"`).
2. `update_outgoing_payment({ payment_id, payment_data })`
Actual:
Bexio API error: Request method 'PUT' is not supported. PUT https://api.bexio.c
Read the thread · 2026-06-16 · closed · external user · 1 comment
issue_bill and mark_bill_as_paid POST to non-existent v4 endpoints (404)
Summary
issue_bill and mark_bill_as_paid always fail with 404 Not Found. Both POST to action sub-paths that do not exist on the Bexio v4.0 purchase/bills API. Consequently a bill created via create_bill (which lands in DRAFT) cannot be finalized or marked paid through the MCP at all — and an outgoing payment cannot be created either, since that requires a non-DRAFT bill.
Environment
- bexio-mcp-server v2.3.0 (confirmed still present in v2.4.0 —
src/tools/purchase/
Read the thread · 2026-06-16 · closed · external user · 1 comment
update_bill full-PUT silently nulls omitted fields (loses document_no, blocks finalization)
Summary
update_bill issues a full-replace PUT with exactly the bill_data passed in. Any field omitted from bill_data is set to null server-side. In particular, omitting document_no wipes the bill's number — after which the bill can no longer be finalized (the UI's "Als offen markieren" is disabled because the now-empty, required "Nr." field fails validation).
Environment
- v2.3.0 (unchanged in v2.4.0)
Reproduction
create_bill(...)→ response has `document_no: "LR3
Read the thread · 2026-06-16 · closed · external user · 1 comment
Most recent
upload_file always fails with HTTP 415 — Bexio's POST /3.0/files requires a bare Accept: application/json header
Summary
upload_file fails for every input with INTERNAL_ERROR: Request failed with status code 415. It is not size- or content-related: a 4-byte file fails exactly like a 484 KB PDF.
Root cause: Bexio's POST /3.0/files validates the Accept header strictly and only accepts the exact value application/json. BexioClient.uploadFile() sets only the multipart headers from form-data plus Authorization, so axios' default Accept: application/json, text/plain, */* goes out — and Bex
Read the thread · 2026-07-28 · open · external user · 0 comments
edit_invoice always fails: PUT /kb_invoice/{id} is not a valid Bexio 2.0 route (edit is POST), and the merged payload includes fields the edit form rejects
Every call to the edit_invoice tool fails with:
Bexio API error: The form could not be saved due to the following errors:.
regardless of the payload. Three separate problems combine here — the first one is the blocker, the other two made it undiagnosable / will make it fail again once the first is fixed:
1. Wrong HTTP method (blocker)
editInvoice sends PUT /kb_invoice/{id}, but the Bexio 2.0 API has no PUT route for
kb_invoice — the edit operation is `POST /2.0/kb_inv
Read the thread · 2026-07-18 · open · external user · 0 comments
#11 regression: EPIPE feedback loop in global uncaughtException handler — orphaned stdio server spins at 100% CPU again (v2.4.1)
Summary
The #11 fix (exit on stdin end/close) works for a clean disconnect, but the global uncaughtException handler added in v2.4.0 (index.ts, "log, do NOT exit") re-introduces the 100%-CPU orphan through a different path: once stderr's pipe/socket peer is gone, every logger.error() call throws EPIPE, which lands in the uncaughtException handler, which logs it via logger.error() to the same dead stderr → next EPIPE → self-sustaining loop (~1000 exceptions/sec, one CPU core pin
Read the thread · 2026-07-08 · open · external user · 0 comments
create_contact / bulk_create_contacts: advertised address field is rejected by Bexio (empty 422) — writable fields are street_name / house_number
Observed (2026-07-03, live company, latest npx build)
Creating a contact with the address field the tool schema advertises (src/tools/contacts/definitions.ts:186, and :252 in the bulk variant — address: { type: "string", description: "Street address" }) is rejected by Bexio with a 422 whose error list is empty, which makes the failure very hard to diagnose from the tool result. It cost our agent three failed calls before it found the working shape.
What Bexio actually accepts fo
Read the thread · 2026-07-03 · open · external user · 0 comments
upload_file: accept a local file path (symmetric to download_file's output_path)
Context
We drive this server from an agent (Claude Code) that registers receipt PDFs as purchase-bill attachments. Real-world PDFs are hundreds of KB to several MB.
Problem
upload_file accepts file content only as inline base64 (src/tools/files/handlers.ts:45-47 — params go straight to client.uploadFile). Through an LLM tool call that is impractical and corruption-prone: the base64 blob has to pass through the model's context (token cost, hard size ceiling, and any re-tokenization
Read the thread · 2026-07-03 · open · external user · 0 comments
Optional receipt-gating for irreversible writes (payments / issue·cancel·send invoice / deletes) — one file, zero deps, off by default
Hi — really nice project; the planning docs, tests, and the standalone-payment warning on create_iban_payment show you take the dangerous surface seriously. That's exactly why I'm raising this.
A handful of your tools take irreversible, money-touching actions that an agent can trigger with no record that an accountable human approved that specific action:
create_iban_payment,create_qr_payment,create_outgoing_payment— move real moneyissue_invoice,cancel_invoice, `send
Read the thread · 2026-06-30 · open · external user · 0 comments
Bills (kb_bill) endpoints use v2.0 API instead of v4.0
Problem
The purchase bill endpoints (list_bills, get_bill, create_bill, search_bills, etc.) all return 404 Not Found because they use the v2.0 API base URL (https://api.bexio.com/2.0/kb_bill).
Bexio has moved the bills API to v4.0 at https://api.bexio.com/4.0/purchase/bills.
Affected code
In bexio-client.js, all bill methods use the v2.0 base URL:
async listBills(params = {}) {
return this.makeRequest("GET", "/kb_bill", params); // 404 on v2.0
}
Read the thread · 2026-02-18 · closed · external user · 1 comment
The remaining reports are on the project's issue tracker.