MCP.so
Sign In
B

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

200

Test 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.

Comments

More Other MCP servers