BexioCAUTION
Complete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 310 tools for invoices, contacts, projects & more. Created by Lukas Hertig.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Complete Swiss accounting integration for Bexio via the Model Context Protocol (MCP). Works with Claude Desktop, n8n, and any MCP-compatible client.
Manage invoices, contacts, projects, time tracking, and 300+ more tools through AI conversation or workflow automation.
⚠️ Early Release Software This project is under active development. While it's functional and tested, you may encounter bugs or unexpected behavior. Features will continue to be added and improved over time. Please report any issues you find!
Compatibility
Quick Start
For Claude Desktop
Option A: MCPB Bundle (Easiest)
- Download the latest
.mcpbfile from GitHub Releases - Install it in Claude Desktop, either way works:
- Double-click the
.mcpbfile (or drag it onto the Claude Desktop window), or - go to Settings → Extensions → Advanced settings, and under Extension Developer click Install Extension... and select the file
- Enter your Bexio API token when prompted. It is stored in your operating system's keychain.
- Optional: switch on Interactive panels in the extension's settings for invoice previews, contact cards and a dashboard.
No Node.js installation is needed: Claude Desktop runs extensions with its built-in Node.js. Updating from 2.6.1 or older? Re-enter your token if Claude Desktop asks for it.
Option B: npm (manual config)
Requires Node.js (LTS). In Claude Desktop, open Settings → Developer → Edit Config and add:
8b0d48f30c69OBSERVED · 2026-10-09Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add bexio-mcp-server -- npx -y @promptpartner/[email protected]
Exposed tools (200)
170 read · 76 write · 30 destructive. Blast radius: 30 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
accept_quote | read | Accept a quote |
advanced_search_contacts | read | Perform advanced search on contacts using multiple criteria |
archive_project | read | Archive a project in Bexio. Archived projects are hidden but not deleted. |
bulk_create_contacts | write | Create multiple contacts in one call. Returns per-item results with success/failure status. |
cancel_invoice | read | Cancel an invoice |
copy_invoice | read | Copy an invoice |
copy_quote | read | Copy/duplicate a quote |
create_absence | write | Create a new absence record (vacation, sick leave, etc.). Requires Bexio Payroll module subscription. |
create_account | write | Create a new account in the chart of accounts |
create_additional_address | write | Create an additional address for a contact |
create_bill | write | 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); |
create_business_activity | write | Create a new business activity (service type for time tracking) |
create_comment | write | Create a new comment on a document |
create_contact | write | Create a new contact in Bexio. Set contact_type to |
create_contact_group | write | Create a new contact group for categorizing contacts |
create_contact_relation | write | Create a new contact relation |
create_contact_sector | write | [NOT SUPPORTED] Create a new contact sector (industry type). Note: Bexio API does not support creating contact sectors. This resource is read-only. |
create_country | write | Create a new country entry |
create_currency | write | Create a new currency in Bexio. Swiss default: round_factor 0.05 (5 rappen). Common currencies: CHF, EUR, USD, GBP. |
create_delivery_from_order | write | Create a delivery from an order |
create_employee | write | Create a new employee in the payroll system. Requires Bexio Payroll module subscription. Links a Bexio user to payroll. |
create_expense | write | Create a new expense record |
create_fictional_user | write | Create a new fictional user. Requires salutation_type, firstname, lastname, and email. |
create_iban_payment | write | ⚠️ 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_invoice | write | Create a new invoice in Bexio |
create_invoice_from_order | write | Create an invoice from an order |
create_invoice_from_quote | write | Create an invoice from a quote |
create_item | write | Create a new item in Bexio |
create_language | write | [NOT SUPPORTED] Create a new language entry. Note: Bexio API returns 501 Not Implemented for this endpoint. This resource is read-only. |
create_manual_entry | write | 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. |
create_milestone | write | Create a new milestone in a project. Milestones track key deadlines and deliverables. |
create_note | write | Create a new note attached to a resource (contact, invoice, quote, order, delivery, project, or bill) |
create_order | write | Create a new order in Bexio |
create_order_from_quote | write | Create an order from a quote |
create_payment | write | Create a new payment for an invoice |
create_payment_type | write | Create a new payment type for invoices and payments |
create_project | write | Create a new project in Bexio. Requires user_id (owner) and name. |
create_purchase_order | write | Create a new purchase order to a supplier |
create_qr_payment | write | ⚠️ 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_quote | write | Create a new quote (offer) for an existing contact |
create_reminder | write | Create a new reminder for an invoice |
create_salutation | write | Create a new salutation (e.g., Mr., Mrs., Dr.) |
create_task | write | Create a new task with optional resource linking to a contact, invoice, quote, order, etc. |
create_timesheet | write | Create a new timesheet entry. Duration must be in HH:MM format (e.g., |
create_title | write | Create a new title (e.g., CEO, Manager, Director) |
create_unit | write | Create a new unit of measurement |
create_work_package | write | Create a new work package in a project. Work packages organize deliverables and track estimated effort. |
decline_quote | read | Decline a quote |
delete_absence | destructive | Delete an absence record. Requires Bexio Payroll module subscription. |
delete_additional_address | destructive | Delete an additional address from a contact |
delete_bill | destructive | Delete a bill (creditor invoice) |
delete_contact | destructive | Delete a contact (soft delete -- moves to trash). Use restore_contact to recover. |
delete_contact_group | destructive | Delete a contact group by ID |
delete_contact_relation | destructive | Delete a contact relation |
delete_country | destructive | Delete a country by ID |
delete_currency | destructive | Delete a currency by ID. Cannot delete currencies in use by documents. |
delete_expense | destructive | Delete an expense |
delete_fictional_user | destructive | Delete a fictional user |
delete_file | destructive | Delete a file from Bexio |
delete_invoice | destructive | Delete an invoice |
delete_item | destructive | Delete an item |
delete_manual_entry | destructive | Delete a manual entry |
delete_milestone | destructive | Delete a milestone from a project in Bexio |
delete_note | destructive | Delete a note by ID |
delete_order | destructive | Delete an order |
delete_order_repetition | destructive | Delete repetition settings for an order |
delete_outgoing_payment | destructive | Delete an outgoing payment |
delete_payment | destructive | Delete a payment |
delete_project | destructive | Delete a project from Bexio by ID. Consider using archive_project instead for data retention. |
delete_purchase_order | destructive | Delete a purchase order |
delete_quote | destructive | Delete a quote |
delete_reminder | destructive | Delete a reminder |
delete_salutation | destructive | Delete a salutation by ID |
delete_task | destructive | Delete a task by ID |
delete_timesheet | destructive | Delete a timesheet entry by ID |
delete_title | destructive | Delete a title by ID |
delete_unit | destructive | Delete a unit by ID |
delete_work_package | destructive | Delete a work package from a project in Bexio |
download_file | read | Download a file |
edit_invoice | write | Edit/update an existing invoice |
edit_item | write | Edit/update an existing item |
edit_order | write | Edit/update an existing order |
edit_order_repetition | write | Edit repetition settings for an order |
edit_quote | write | Edit/update an existing quote |
find_contact_by_name | read | Find contacts by name (searches through all pages) |
find_contact_by_number | read | Find a specific contact by its contact number (e.g., |
get_absence | read | Get a specific absence record by ID. Requires Bexio Payroll module subscription. |
get_account | read | Get a specific account by ID from the chart of accounts |
get_additional_address | read | Get a specific additional address for a contact |
get_bank_account | read | Get details of a specific bank account by ID |
get_bill | read | Get a specific bill (creditor invoice) by UUID |
get_business_activity | read | Get a specific business activity by ID |
get_calendar_year | read | Get a specific calendar year by ID |
get_comment | read | Get a specific comment by ID from a document |
get_communication_type | read | Get a specific communication type by ID |
get_company_profile | read | Get the company profile including name, address, and settings |
get_contact | read | Get a specific contact by ID |
get_contact_group | read | Get a specific contact group by ID |
get_contact_relation | read | Get a specific contact relation by ID |
get_contact_sector | read | Get a specific contact sector by ID |
get_country | read | Get a specific country by ID |
get_currency | read | Get details of a specific currency by ID |
get_currency_exchange_rates | read | Get exchange rates for a specific currency (by ID, from list_currencies), optionally for a historical date. Useful for multi-currency reporting and conversions. |
get_current_user | read | Get the currently authenticated user |
get_customer_revenue_report | read | Get customer revenue report for a specific period |
get_delivery | read | Get a specific delivery by ID |
get_employee | read | Get a specific employee by ID. Requires Bexio Payroll module subscription. |
get_employee_payslip_pdf | read | Fetch a single employee |
get_expense | read | Get a specific expense by UUID |
get_fictional_user | read | Get a specific fictional user by ID |
get_file | read | Get a specific file |
get_iban_payment | read | Get details of an IBAN payment by ID |
get_invoice | read | Get a specific invoice by ID |
get_invoice_pdf | read | Get an invoice as PDF (returns base64-encoded content) |
get_invoice_status_report | read | Get invoice status report for a specific period |
get_item | read | Get a specific item by ID |
get_language | read | Get a specific language by ID |
get_manual_entry | read | Get a specific manual entry by ID |
get_milestone | read | Get a specific milestone by ID from a project in Bexio |
get_monthly_revenue_report | read | Get monthly revenue report for a specific month |
get_note | read | Get a specific note by ID |
get_open_invoices | read | Get all open invoices (draft and sent/pending) |
get_order | write | Get a specific order by ID |
get_order_pdf | write | Get an order as PDF (returns base64-encoded content) |
get_order_repetition | write | Get repetition settings for an order |
get_outgoing_payment | read | Get a specific outgoing payment by UUID |
get_overdue_invoices | read | Get all overdue invoices |
get_overdue_invoices_report | read | Get overdue invoices report |
get_payment | read | Get a specific payment by ID |
get_payment_type | read | Get a specific payment type by ID |
get_project | read | Get a specific project by ID from Bexio |
get_project_status | read | Get a specific project status by ID from Bexio |
get_project_type | read | Get a specific project type by ID from Bexio |
get_purchase_order | write | Get a specific purchase order by ID |
get_qr_payment | read | Get details of a QR payment by ID |
get_quote | read | Get a specific quote by ID |
get_quote_pdf | read | Get a quote as PDF (returns base64-encoded content) |
get_reminder | read | Get a specific reminder by ID |
get_reminder_pdf | read | Get a reminder as PDF (returns base64-encoded content) |
get_reminders_sent_this_week | read | Get all reminders sent this week |
get_revenue_report | read | Get revenue report for a specific period |
get_salutation | read | Get a specific salutation by ID |
get_task | read | Get a specific task by ID |
get_tasks_due_this_week | read | Get all tasks due this week (invoices with due date this week) |
get_tax | read | Get a specific tax by ID |
get_timesheet | read | Get a specific timesheet entry by ID |
get_title | read | Get a specific title by ID |
get_top_customers_by_revenue | read | Get top customers by revenue |
get_unit | read | Get a specific unit by ID |
get_user | read | Get a specific real Bexio user by ID |
get_work_package | read | Get a specific work package by ID from a project in Bexio |
issue_bill | read | 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). |
issue_delivery | read | Issue a delivery |
issue_invoice | read | Issue an invoice |
issue_quote | read | Issue a quote |
list_absences | read | List a specific employee |
list_account_groups | read | List account groups (read-only hierarchy). Account groups organize the chart of accounts into categories. |
list_accounts | read | List chart of accounts with pagination. Returns all accounts in the chart of accounts. |
list_additional_addresses | read | List additional addresses for a contact |
list_all_invoices | read | List every invoice in Bexio by paging automatically |
list_all_statuses | read | List all document statuses for invoices, quotes, and orders |
list_bank_accounts | read | 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. |
list_bills | read | List all bills (creditor invoices) with optional pagination |
list_business_activities | read | List business activities (service types for time tracking). Used to categorize work. |
list_business_years | read | List business/fiscal years (read-only). Business years define fiscal periods for accounting. |
list_calendar_years | read | List calendar years defined in the system |
list_comments | write | List all comments for a specific document (quote, order, invoice, or delivery) |
list_communication_types | read | List all communication types (e.g., email, phone, meeting) |
list_companies | read | List the Bexio companies (mandates) this server is configured for. Returns each company |
list_contact_groups | read | List all contact groups for categorizing contacts |
list_contact_relations | read | List all contact relations |
list_contact_sectors | read | List all contact sectors (industry types for contacts) |
list_contacts | read | List contacts from Bexio with optional pagination and filtering |
list_countries | read | List all countries available in Bexio |
list_currencies | read | List all currencies configured in Bexio. Returns currency codes (CHF, EUR, USD, etc.) with their rounding factors for invoicing. |
list_currency_codes | read | List all ISO currency codes Bexio supports (for use when creating currencies). |
list_deliveries | read | List deliveries from Bexio with optional pagination |
list_document_settings | read | List all document settings (header/footer, number ranges, etc.) |
list_document_templates | read | List all document templates available for generating documents |
list_employees | read | List employees in the payroll system. Requires Bexio Payroll module subscription. Use to get employee IDs for timesheets and absences. |
list_expenses | read | List all expenses with optional pagination |
list_fictional_users | read | List fictional users from Bexio with optional pagination |
list_files | read | List files from Bexio with optional pagination |
list_invoice_statuses | read | List all available invoice statuses with their meanings |
list_invoices | read | List invoices from Bexio with optional pagination |
list_items | read | List items from Bexio with optional pagination |
list_languages | read | List all languages available in Bexio |
list_manual_entries | read | List manual journal entries |
list_milestones | read | List milestones for a specific project in Bexio |
list_notes | read | List notes from Bexio. Optionally filter by resource type and resource ID to get notes for a specific contact, invoice, quote, order, delivery, project, or bill. |
list_orders | read | List orders from Bexio with optional pagination |
list_outgoing_payments | read | List outgoing payments for a specific bill. Bexio requires a bill_id (payments are listed per bill). |
list_payment_types | read | List all payment types available for invoices and payments |
list_payments | read | List payments for a specific invoice |
list_payroll_documents | read | List payroll documents (payslips, etc.). Requires Bexio Payroll module subscription. Optional employee filter. |
list_permissions | read | List all available user permissions in the Bexio account (v3.0 API) |
list_project_statuses | read | List all project statuses available in Bexio (e.g., Active, Completed, On Hold) |
list_project_types | read | List all project types available in Bexio (e.g., Internal, Customer Project) |
list_projects | read | List all projects in Bexio with pagination support |
list_purchase_orders | read | List all purchase orders with optional pagination |
Trust audit
CAUTIONgrade B · trust 88/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (9 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (11)
try { target = await (await fetch(`http://127.0.0.1:${port}/json/new?file://${hostFile}`, { method: "PUT" })).json(); }const TOKEN = "s3cret-token-for-tests-0123456789";
delete_absence, delete_additional_address, delete_bill, delete_contact, delete_contact_group, delete_contact_relation, delete_country, delete_currency, delete_expense, delete_fictional_user, delete_fi
.mcpbignore
const p = await writeDownloadToTemp(bytes, "../../../etc/passwd");
import { BexioClient } from "../../bexio-client.js";import { McpError } from "../../shared/errors.js";} from "../../types/index.js";
import { BexioClient } from "../../bexio-client.js";@fastify/cors, @modelcontextprotocol/ext-apps, @modelcontextprotocol/sdk, axios, dotenv, fastify, @types/node, concurrently
- The server does not log, store, or transmit your token to any other party
Gates applied: no_behavioural_pass.
8b0d48f30c69full audit observations/trust-audit/mcp-server/promptpartner__bexio.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-09 | 8b0d48f30c69 | CAUTION | B | 88 | first audit |
Questions
What is the Bexio MCP server?
Complete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 310 tools for invoices, contacts, projects & more. Created by Lukas Hertig.
What tools does Bexio expose?
200 in total: 170 read-only, 76 that write, and 30 that can delete or overwrite (delete_absence, delete_additional_address, delete_bill, delete_contact, delete_contact_group). Every one is listed on this page with its risk.
Is Bexio safe to connect to an agent?
With care. The audit graded it B (88/100) and found 11 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 30 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does Bexio need?
It reads BEXIO_API_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does Bexio run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @promptpartner/bexio-mcp-server at 2.6.2.
How current is this page?
The grade is for one exact copy of the source (8b0d48f30c69), read on 2026-10-09. The repository is watched and re-audited when it changes.