Bexio MCP
@PromptPartner
About Bexio MCP
Complete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 221 tools for invoices, contacts, projects & more.
Config
Add this server to your MCP-compatible client using the configuration below.
{
"mcpServers": {
"bexio": {
"command": "npx",
"args": [
"@promptpartner/bexio-mcp-server"
],
"env": {
"BEXIO_API_TOKEN": "your-token-here"
}
}
}
}Tools
200Test tool that returns pong - validates SDK integration
List all contact groups for categorizing contacts
Get a specific contact group by ID
Create a new contact group for categorizing contacts
Delete a contact group by ID
Update a contact group's name
Search contact groups by name
List all contact sectors (industry types for contacts)
Get a specific contact sector by ID
[NOT SUPPORTED] Create a new contact sector (industry type). Note: Bexio API does not support creating contact sectors. This resource is read-only.
Search contact sectors by name
List all salutations (e.g., Mr., Mrs., Dr.)
Get a specific salutation by ID
Create a new salutation (e.g., Mr., Mrs., Dr.)
Delete a salutation by ID
Update a salutation's name
Search salutations by name
List all titles (e.g., CEO, Manager, Director)
Get a specific title by ID
Create a new title (e.g., CEO, Manager, Director)
Delete a title by ID
Update a title's name
Search titles by name
List all countries available in Bexio
Get a specific country by ID
Create a new country entry
Delete a country by ID
List all languages available in Bexio
Get a specific language by ID
[NOT SUPPORTED] Create a new language entry. Note: Bexio API returns 501 Not Implemented for this endpoint. This resource is read-only.
List all units of measurement (e.g., hours, pieces, kg)
Get a specific unit by ID
Create a new unit of measurement
Delete a unit by ID
Get the company profile including name, address, and settings
Update company profile settings
List all available user permissions in the Bexio account (v3.0 API)
List all payment types available for invoices and payments
Get a specific payment type by ID
Create a new payment type for invoices and payments
List all configured bank accounts in Bexio. Returns account details including IBAN, bank name, and currency. Use this to get valid bank_account_id values before creating payments.
Get details of a specific bank account by ID
List all currencies configured in Bexio. Returns currency codes (CHF, EUR, USD, etc.) with their rounding factors for invoicing.
Get details of a specific currency by ID
Create a new currency in Bexio. Swiss default: round_factor 0.05 (5 rappen). Common currencies: CHF, EUR, USD, GBP.
Update an existing currency's settings
Delete a currency by ID. Cannot delete currencies in use by documents.
Get exchange rates for a specific currency (by ID, from list_currencies), optionally for a historical date. Useful for multi-currency reporting and conversions.
List all ISO currency codes Bexio supports (for use when creating currencies).
⚠️ Creates a STANDALONE bank payment that is NOT linked to any supplier bill. To pay a supplier bill (and have it marked paid), use `create_outgoing_payment` with a `bill_id` instead — that works for both IBAN and QR and records the payment against the bill. A standalone payment created here CANNOT be attached to a bill afterward. Use this tool only for ad-hoc payments that have no underlying bill. Create an IBAN payment (Swiss ISO 20022 standard). First use list_bank_accounts to get a valid bank_account_id. Only CHF and EUR currencies are supported. Recipient address must use structured format (street, house_number, zip, city, country_code).
Get details of an IBAN payment by ID
Update a pending IBAN payment. Only pending payments can be modified. Note: this cannot attach the payment to a supplier bill — Bexio returns 403. To pay a bill, create the payment via `create_outgoing_payment` with a `bill_id`.
⚠️ Creates a STANDALONE bank payment that is NOT linked to any supplier bill. To pay a supplier bill (and have it marked paid), use `create_outgoing_payment` with a `bill_id` instead — that works for both IBAN and QR and records the payment against the bill. A standalone payment created here CANNOT be attached to a bill afterward. Use this tool only for ad-hoc payments that have no underlying bill. Create a QR payment (Swiss QR-invoice standard per SIX Group spec v2.3). First use list_bank_accounts to get a valid bank_account_id. Only CHF and EUR currencies are supported. QR reference must be exactly 27 digits if provided. Recipient address must use structured format.
Get details of a QR payment by ID
Update a pending QR payment. Only pending payments can be modified.
List all projects in Bexio with pagination support
Get a specific project by ID from Bexio
Create a new project in Bexio. Requires user_id (owner) and name.
Update an existing project in Bexio
Delete a project from Bexio by ID. Consider using archive_project instead for data retention.
Archive a project in Bexio. Archived projects are hidden but not deleted.
Unarchive a previously archived project in Bexio, making it active again.
Search for projects in Bexio using field-based criteria. Supports exact match and partial matching.
List all project types available in Bexio (e.g., Internal, Customer Project)
Get a specific project type by ID from Bexio
List all project statuses available in Bexio (e.g., Active, Completed, On Hold)
Get a specific project status by ID from Bexio
List milestones for a specific project in Bexio
Get a specific milestone by ID from a project in Bexio
Create a new milestone in a project. Milestones track key deadlines and deliverables.
Delete a milestone from a project in Bexio
List work packages for a specific project in Bexio
Get a specific work package by ID from a project in Bexio
Create a new work package in a project. Work packages organize deliverables and track estimated effort.
Update an existing work package in a project
Delete a work package from a project in Bexio
List all timesheet entries with pagination
Get a specific timesheet entry by ID
Create a new timesheet entry. Duration must be in HH:MM format (e.g., '02:30' for 2.5 hours)
Delete a timesheet entry by ID
Search timesheets by criteria (field, value, criteria). Common fields: user_id, pr_project_id, date
List all timesheet statuses (e.g., open, approved, locked)
List business activities (service types for time tracking). Used to categorize work.
Get a specific business activity by ID
Create a new business activity (service type for time tracking)
List all communication types (e.g., email, phone, meeting)
Get a specific communication type by ID
List chart of accounts with pagination. Returns all accounts in the chart of accounts.
Get a specific account by ID from the chart of accounts
Create a new account in the chart of accounts
Search accounts by criteria. Use field/value/criteria pattern for flexible searching.
List account groups (read-only hierarchy). Account groups organize the chart of accounts into categories.
List calendar years defined in the system
Get a specific calendar year by ID
List business/fiscal years (read-only). Business years define fiscal periods for accounting.
List manual journal entries
Get a specific manual entry by ID
Create a manual journal entry (double-entry bookkeeping). Provide flat params; the handler transforms to nested entries array internally. Bexio validates that debits equal credits.
Update a manual entry
Delete a manual entry
List VAT periods (read-only). VAT periods define reporting periods for value-added tax.
Query the accounting journal with optional date range. Returns journal entries for the specified period.
Get account balances (Saldenliste) computed from the accounting journal. Bexio has no native balance endpoint, so balances are derived: balance = sum(debits) - sum(credits) per account over the date range. Defaults to the current business year, which includes opening/carry-forward entries and therefore reflects the current balance. Returns each account with account_no, name, debit/credit totals and balance.
List all bills (creditor invoices) with optional pagination
Get a specific bill (creditor invoice) by UUID
Create a new bill (creditor invoice) from a supplier (Bexio v4.0). IMPORTANT field names: use supplier_id (NOT contact_id), line_items (NOT positions), and booking_account_id on each line (NOT account_id); 'address' is a structured object. The API also requires contact_partner_id, bill_date, due_date, currency_code, item_net and manual_amount (+ amount_calc when manual_amount is false). New bills are created as DRAFT — use issue_bill to book them, then create_outgoing_payment to mark them paid.
Update an existing bill (creditor invoice). This is a SAFE PARTIAL update: the server fetches the current bill, merges your changes, and preserves untouched fields (including document_no), so you only need to send the fields you want to change. EXCEPTION: line_items is replaced wholesale — to change one line you must send the FULL line_items array, or omit line_items to leave them unchanged.
Delete a bill (creditor invoice)
Search/filter bills (creditor invoices) by criteria. Uses GET with query params (Bexio v4.0 does not support POST /search for bills).
Finalize (book) a DRAFT bill (creditor invoice): transitions it from DRAFT to BOOKED so it posts to the ledger and can be paid. Bexio v4.0 books bills via PUT /purchase/bills/{id}/bookings/BOOKED (there is no POST /issue endpoint).
Mark a bill as paid. NOTE: Bexio v4.0 has no mark-as-paid endpoint — a bill is marked paid by recording a payment against it. Use create_outgoing_payment with payment_data.bill_id set to this bill's UUID (that flips the bill to PAID). Calling this tool returns that guidance rather than performing a no-op request.
List all expenses with optional pagination
Get a specific expense by UUID
Create a new expense record
Update an existing expense
Delete an expense
List all purchase orders with optional pagination
Get a specific purchase order by ID
Create a new purchase order to a supplier
Update an existing purchase order
Delete a purchase order
List outgoing payments for a specific bill. Bexio requires a bill_id (payments are listed per bill).
Get a specific outgoing payment by UUID
Create an outgoing payment for a supplier bill (Bexio v4.0). This is how you PAY/settle a bill: creating a payment linked via bill_id marks that bill PAID. Required fields: bill_id, payment_type (IBAN | QR | MANUAL), amount, currency_code, exchange_rate (1 for same currency), execution_date and is_salary_payment. For payment_type MANUAL, sender_bank_account_id is also required. QR payments carry reference_no (the QR reference); IBAN payments carry message (the remittance text). fee_type (e.g. 'NO_FEE' for domestic) and receiver_* address fields apply to real bank transfers.
Update an existing outgoing payment (Bexio v4.0). The update is a PUT to the collection with the id in the body (there is no per-id update URL). The API requires execution_date, amount and is_salary_payment, and also accepts fee_type, reference_no (QR) / message (IBAN) and receiver_* fields. NOTE: currency_code and exchange_rate are NOT updatable (they are set at creation) — they are ignored if sent. Omitting a required field returns a validation error. If you only need to change the amount or date, it is often simpler to delete_outgoing_payment and create a new one.
Delete an outgoing payment
List files from Bexio with optional pagination
Get a specific file's metadata by ID
Upload a file to Bexio. File content must be provided as base64 encoded string for MCP JSON transport.
Download a file's content from Bexio. Small files (<= 64 KB by default) are returned inline as a base64 string (`content_base64`). Larger files are written to a file on the server and the tool returns `file_path` instead of the base64 (this prevents context overflow). Pass `output_path` to control where the file is written, or set the BEXIO_DOWNLOAD_INLINE_MAX_BYTES env var to change the inline threshold. NOTE: in HTTP/n8n mode the returned path is on the SERVER host, not the MCP client machine.
Update a file's metadata in Bexio
Delete a file from Bexio
List additional addresses for a contact
Get a specific additional address for a contact
Create an additional address for a contact
Update an additional address for a contact
Search additional addresses for a contact by criteria
Delete an additional address from a contact
List employees in the payroll system. Requires Bexio Payroll module subscription. Use to get employee IDs for timesheets and absences.
Get a specific employee by ID. Requires Bexio Payroll module subscription.
Create a new employee in the payroll system. Requires Bexio Payroll module subscription. Links a Bexio user to payroll.
Update an existing employee. Requires Bexio Payroll module subscription.
List a specific employee's absences (vacation, sick leave, etc.). Requires Bexio Payroll module subscription. Optional year filter.
Get a specific absence record by ID. Requires Bexio Payroll module subscription.
Create a new absence record (vacation, sick leave, etc.). Requires Bexio Payroll module subscription.
Update an existing absence record. Requires Bexio Payroll module subscription.
Delete an absence record. Requires Bexio Payroll module subscription.
List payroll documents (payslips, etc.). Requires Bexio Payroll module subscription. Optional employee filter.
Fetch a single employee's payslip (Lohnabrechnung) as a base64-encoded PDF for a given year and month. Requires Bexio Payroll module. Returns { content (base64), content_type, filename }.
List contacts from Bexio with optional pagination and filtering
Get a specific contact by ID
Search contacts by name, email, or other fields
Perform advanced search on contacts using multiple criteria
Find a specific contact by its contact number (e.g., '001008')
Find contacts by name (searches through all pages)
Update an existing contact's information
Create a new contact in Bexio. Set contact_type to 'person' for individuals or 'company' for organizations.
Delete a contact (soft delete -- moves to trash). Use restore_contact to recover.
Create multiple contacts in one call. Returns per-item results with success/failure status.
Restore a previously deleted contact from trash.
List invoices from Bexio with optional pagination
List every invoice in Bexio by paging automatically
Get a specific invoice by ID
Search invoices via the Bexio search endpoint
Search invoices by customer name (finds contact, then invoices)
Create a new invoice in Bexio
Issue an invoice
Cancel an invoice
Mark an invoice as sent
Send an invoice
Copy an invoice
List all available invoice statuses with their meanings
List all document statuses for invoices, quotes, and orders
Get all open invoices (draft and sent/pending)
Get all overdue invoices
Edit/update an existing invoice
Delete an invoice
Get an invoice as PDF (returns base64-encoded content)
Revert an issued invoice back to draft status
List orders from Bexio with optional pagination
Get a specific order by ID
Create a new order in Bexio
Search orders via the Bexio search endpoint. Use query for simple text search, or filters for advanced criteria.
Search orders by customer name (2-step process: find contact by name, then find orders by contact_id)
Create a delivery from an order
Create an invoice from an order
Edit/update an existing order
Delete an order
Get an order as PDF (returns base64-encoded content)
Get repetition settings for an order
Edit repetition settings for an order
Delete repetition settings for an order
List quotes (offers) from Bexio with optional pagination
Get a specific quote by ID
Create a new quote (offer) for an existing contact
Search quotes via the Bexio search endpoint. Use query for simple text search, or filters for advanced criteria.
Search quotes by customer name (2-step process: find contact by name, then find quotes by contact_id)
Issue a quote
Accept a quote
Decline a quote
Overview
What is Bexio MCP?
Bexio MCP is a Swiss accounting integration for Bexio via the Model Context Protocol (MCP). It provides 221 tools across all Bexio domains—invoices, contacts, projects, time tracking, accounting, and more—and works with Claude Desktop, n8n, and any MCP-compatible client.
How to use Bexio MCP?
Install via the MCPB bundle (download from Releases and double-click) or via npm. For Claude Desktop, add a configuration entry in claude_desktop_config.json with your Bexio API token. For n8n or other HTTP clients, start the server in HTTP mode with --mode http --port 8000. The server runs on stdio by default.
Key features of Bexio MCP
- 221 tools covering all Bexio API domains
- Full invoice lifecycle (create, issue, send, cancel)
- Swiss QR-bill and ISO 20022 payment support
- Project management with milestones and timesheets
- Contact & CRM management with groups and relations
- Accounting: chart of accounts, journal entries, VAT
- File upload/download and document management
Use cases of Bexio MCP
- Automate invoice creation and sending through AI chat
- Manage contacts and projects hands‑free via Claude Desktop
- Track time entries and project milestones automatically
- Process payments and reconcile accounts with natural language
- Integrate Bexio data into n8n workflows for custom automation
FAQ from Bexio MCP
How do I get my Bexio API token?
Go to developer.bexio.com, log in, navigate to Personal Access Tokens, and create a new token. Use that token as the BEXIO_API_TOKEN environment variable.
What transport modes are supported?
The server supports both stdio (for Claude Desktop and Claude Code) and HTTP (for n8n and other clients). Default mode is stdio.
Where is data stored?
This MCP server acts as a pass‑through to the Bexio API and does not store any data. Your data is processed according to Bexio’s privacy policy.
Why do payroll tools return “module not available”?
Payroll tools require the Bexio Payroll module subscription. Contact Bexio support to enable the module.
Claude Desktop doesn’t see the server – what should I do?
Restart Claude Desktop after configuration changes, verify the config file path is correct for your OS, and check Claude Desktop logs for error messages.
Frequently asked questions
How do I get my Bexio API token?
Go to developer.bexio.com, log in, navigate to Personal Access Tokens, and create a new token. Use that token as the `BEXIO_API_TOKEN` environment variable.
What transport modes are supported?
The server supports both stdio (for Claude Desktop and Claude Code) and HTTP (for n8n and other clients). Default mode is stdio.
Where is data stored?
This MCP server acts as a pass‑through to the Bexio API and does not store any data. Your data is processed according to Bexio’s privacy policy.
Why do payroll tools return “module not available”?
Payroll tools require the Bexio Payroll module subscription. Contact Bexio support to enable the module.
Claude Desktop doesn’t see the server – what should I do?
Restart Claude Desktop after configuration changes, verify the config file path is correct for your OS, and check Claude Desktop logs for error messages.
Basic information
More Other MCP servers
MCP Registry
modelcontextprotocolA community driven registry service for Model Context Protocol (MCP) servers.
🪟 Windows-MCP
CursorTouchMCP Server for Computer Use in Windows
Mcp
browsermcpBrowser MCP is a Model Context Provider (MCP) server that allows AI applications to control your browser
ICSS
chokcoco不止于 CSS

Glasswarp
GlasswarpSee and control a real Windows PC you own — from any MCP client, locally or remotely. Observe (UIA + screenshots), click/type/drag/scroll, launch apps, owner Live View. BYOH: your machine, your key.
Comments