@aiwerk/mcp-server-bexio
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@aiwerk/mcp-server-bexioCreate a new invoice for the Baumann project."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@aiwerk/mcp-server-bexio
MCP server for the bexio API, the Swiss business software for invoicing, accounting, CRM, projects and payroll.
310 tools covering the complete public API surface across all three API versions, generated from bexio's official OpenAPI 3.0.2 specification.
Contacts Quotes Invoices Bills Projects
Orders Deliveries Payments Expenses Timesheets
Items Reminders Banking Payroll Files
Accounting Taxes Currencies Users NotesWhy generated
Every endpoint, HTTP verb, parameter and field name comes from the official specification rather than from prose documentation. Hand written API clients drift: they call routes that do not exist, use the wrong verb, target the wrong API version, or advertise fields the server rejects. None of that can be introduced here, because none of it is written by hand.
What a specification cannot tell you are the business rules, so the write paths are also exercised against a live account. See Testing.
Related MCP server: mcp-server-smallinvoice
Install
npm install -g @aiwerk/mcp-server-bexioRequires Node.js 18 or newer.
Authentication
There are two ways in, and which one is appropriate depends on whose account it is.
OAuth 2.0, for an account you do not own
bexio runs its identity layer on Keycloak with PKCE and refresh tokens. Signing in grants only the permissions the integration asks for, and the authorisation does not expire on a fixed schedule.
This is the only appropriate route for a client's account. It is available through
the AIWerk hosted service, which owns the authorisation flow
and the token lifecycle and passes the access token to the server in
BEXIO_API_TOKEN. Running the server standalone with your own OAuth client is
possible, but you have to refresh the token yourself.
Personal access token, for your own account
Create one at developer.bexio.com/pat.
export BEXIO_API_TOKEN="your-token"Two things to know:
It is valid for 60 days and cannot be renewed, only replaced.
It carries every scope, so it grants full access to the company data. bexio documents personal access tokens as strictly personal and not to be shared, so do not ask a client for theirs.
The server accepts either kind of token in the same variable, since both are sent as a bearer credential.
Usage
Claude Code
claude mcp add bexio --env BEXIO_API_TOKEN=your-token -- npx -y @aiwerk/mcp-server-bexioClaude Desktop
{
"mcpServers": {
"bexio": {
"command": "npx",
"args": ["-y", "@aiwerk/mcp-server-bexio"],
"env": { "BEXIO_API_TOKEN": "your-token" }
}
}
}AIWerk hosted service
Install it from the catalogue at aiwerkmcp.com and add your token in the interface. No local setup required.
Safety features
Accounting data is not a good place to find out that a tool did something unexpected, so three guards ship by default.
Dry run
export BEXIO_DRY_RUN=1Every write is stopped inside the process and returns a description of the request that would have been sent. Reads still work normally. Useful for letting an agent plan a change before you allow it to happen.
Pre write snapshots
Before modifying or deleting an existing record, the server fetches its current state
and writes it to ~/.aiwerk/bexio-snapshots/. The tool result carries the file path in
_snapshot, so the previous state is always recoverable.
Several bexio edit endpoints replace the whole record, which means an omitted field becomes empty. The snapshot is what makes that reversible.
If the snapshot cannot be taken, the write is refused. Set
BEXIO_SNAPSHOT_FAIL_OPEN=1 to downgrade that to a warning, or BEXIO_NO_SNAPSHOT=1
to switch snapshots off entirely.
Rate limit handling
bexio applies a per minute limit per company, and the limit is not the same for every endpoint. Measured against a live account, the items endpoint allows 400 requests per minute while contacts, accounts and currencies allow 1000.
The server therefore tracks the remaining allowance separately for each endpoint group, waits out short windows, retries on 429 with the reset hint, and fails with a clear message rather than hanging when the wait would be long.
Configuration
Variable | Default | Purpose |
| required | Personal access token |
|
| Override the host, applies to all API versions |
|
| Per request timeout |
| off |
|
| off |
|
| off |
|
|
| Where snapshots are written |
|
| Longest wait before failing on a rate limit |
| all | Comma separated domain filter, for example |
Narrowing the tool set
All 310 tools are registered by default. A client that prefers a smaller surface can restrict the server to specific domains:
export BEXIO_ENABLED_TAGS="Contacts,Invoices,Quotes,Items"Unknown domain names are reported on startup rather than silently ignored.
Tool naming
Tools follow a predictable shape, so an agent that knows one name can guess the rest:
list_contacts get_contact create_contact
search_contacts update_contact delete_contactCollection verbs (list_, search_) take a plural noun, single record verbs take a
singular one. Document actions keep their own verb: issue_invoice, cancel_invoice,
send_invoice, mark_as_sent_invoice, revert_issue_quote.
A few bexio specifics worth knowing
Three API versions coexist. Contacts, sales documents, items and projects live on 2.0, files and expenses on 3.0, bills and banking on 4.0. The server handles this transparently, but it explains why paths look inconsistent in error messages.
Document positions require a tax id. The specification does not mark
tax_idas required, yet bexio rejects a position without one. Fetch a valid id withlist_taxes.A 403 does not always mean permissions. bexio also answers 403 when the record's state forbids the operation, for example deleting an invoice that has been issued.
Contacts have no single address field. Use
street_name,house_number,postcodeandcity.contact_type_idis1for a company and2for a person.
Testing
npm test # unit tests
npm run smoke # read only, against a live accountThe write paths are covered by a separate script that creates and deletes real records, so it refuses to run without an explicit confirmation:
BEXIO_WRITE_SMOKE=yes node scripts/write-smoke.mjsPoint it at a throwaway trial account, never at production data. It exercises the full lifecycle of contacts, items, invoices and quotes, then cleans up after itself.
Development
The tool layer is generated and must not be edited by hand:
npm run gen-naming # specification -> tool names
npm run gen-tools # specification -> zod schemas and call sites
npm run buildLicence
MIT, see LICENSE.
Built by AIWerk. Not affiliated with bexio AG.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityAmaintenanceComplete Swiss accounting integration for Bexio via MCP. Works with Claude Desktop, n8n, and any MCP client. 221 tools for invoices, contacts, projects & more. Created by Lukas Hertig.26MIT
- AlicenseBqualityCmaintenanceMCP server for smallinvoice.ch — Swiss SME invoicing and accounting with 146 tools and OAuth2 BYOC authentication.10011MIT
- Flicense-qualityBmaintenanceA remote MCP server for the Moxie Public API, deployable to Cloudflare Workers. Exposes all 29 documented Moxie endpoints as MCP tools for managing clients, contacts, projects, tasks, invoices, payments, and more.
- Alicense-qualityDmaintenanceMCP server for the Billingo V3 Hungarian invoicing API. Manage invoices, partners, products, spendings, and bank accounts from any MCP client.14MIT
Related MCP Connectors
34 production API tools over one hosted MCP endpoint.
350+ production-ready APIs through one MCP server — weather, geocoding, validation, financial data.
MCP server exposing the Backtest360 engine API as tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AIWerk/mcp-server-bexio'
If you have feedback or need assistance with the MCP directory API, please join our Discord server