bexio-mcp
OfficialThis server provides comprehensive access to the bexio Swiss business software API, enabling full management of contacts, sales documents, purchasing, accounting, banking, projects, time tracking, payroll, and more.
Contact Management: Create, update, delete, search, and bulk-manage contacts (companies and persons), contact relations, groups, sectors, and additional addresses.
Sales Documents: Full lifecycle management for quotes, orders, deliveries, and invoices — create, issue, accept/cancel, send via email, copy, convert (e.g., quote to order/invoice), and generate PDFs. Manage line items (custom, article, text, subtotal, discount, pagebreak, subposition), comments, and document settings.
Invoice Payments & Reminders: Record payments on invoices, and create/send payment reminders with PDF generation.
Purchasing: Manage supplier bills, expenses, and purchase orders including status changes, duplication, and outgoing payments (IBAN, QR, manual, cash discount).
Accounting: Access and manage chart of accounts, account groups, business/calendar years, VAT periods, taxes, accounting journal, currencies, exchange rates, and manual accounting entries (with file attachments).
Banking: Read configured bank accounts and manage outgoing bank payments.
Items & Stock: Create, update, delete, and search products/services; read stock locations and areas.
Projects & Time Tracking: Create, update, archive, and search projects; manage planning milestones and work packages; track time entries by project, user, or service.
Files: Upload, download, preview, search, update, and delete files; check where files are attached within bexio.
Payroll: Manage employees and absences; download paystub PDFs.
Master Data: Manage lookup tables — salutations, titles, countries, languages, units, payment types, business activities, and communication types.
Notes & Tasks: Create, read, update, delete, and search notes and tasks/todos linked to contacts or projects.
Users & Permissions: List regular users, manage fictional users, and check permissions.
Company Profile: Read company profile information.
Configuration: Supports OAuth2 and personal access tokens, read-only mode, tool group filtering, language settings, rate limit retries, and streamable HTTP transport for server-side deployment.
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., "@bexio-mcplist my recent contacts"
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.
bexio-mcp
MCP server and typed TypeScript client for the bexio API — the Swiss business software for contacts, quotes, orders, invoicing, purchasing, accounting, banking, projects, time tracking and payroll.
Complete: covers all 310 documented operations of the bexio API through 35 well-described MCP tools (enforced by a coverage test against the official OpenAPI spec).
Reusable: the typed API client is a standalone entry point (
bexio-mcp/client) with zero MCP dependencies — use it in any Node.js project.Safe: read-only and conservative draft-only write modes, destructive-action annotations, tool-group filtering, and API errors mapped to actionable messages (expired token, missing scope, rate limit) instead of crashes.
Robust: automatic retry on rate limits (honouring
RateLimit-Reset), retries for transient GET failures, request timeouts, typed error hierarchy.
Get started in two minutes
You need:
Node.js 18 or newer — check with
node --versionClaude Code — or choose another MCP client
A bexio Personal Access Token (PAT) from developer.bexio.com/pat
Add the server to Claude Code, replacing YOUR_BEXIO_TOKEN with your PAT:
claude mcp add --env BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN \
--transport stdio bexio -- npx -y github:nolen-ai/bexio-mcpVerify the connection:
claude mcp listThe result should include:
bexio: npx -y github:nolen-ai/bexio-mcp - ✔ ConnectedThe first start downloads and builds the server and can take a few seconds. After that, open Claude Code and try:
List my 10 most recent open invoices in bexio.
No clone or global install is required. Claude Code stores the token in its local MCP configuration and passes it only to the local server process. Do not commit the token to a repository or paste it into prompts.
Start in read-only mode
For a safer first look, use this command instead of the one above. It disables all create, update, send, and delete actions:
claude mcp add \
--env BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN BEXIO_READ_ONLY=true \
--transport stdio bexio -- npx -y github:nolen-ai/bexio-mcpClaude Desktop and other clients
For Claude Desktop, Cursor, VS Code, Windsurf, Gemini CLI, Codex CLI, Pi, n8n, and agent SDKs, use the matching copy-paste integration guide. Every guide uses an installation method that works today.
Related MCP server: mcp-server-smallinvoice
Authentication
Personal Access Token
A Personal Access Token is the fastest option
for personal use. It has the same access as your bexio user and expires after
six months. Configure it as BEXIO_API_TOKEN.
OAuth app workflow
Use OAuth when you need scoped permissions, automatic token refresh, or a long-running deployment:
Create an app at developer.bexio.com and add
http://127.0.0.1:33771/callbackto its Allowed redirect URLs.Reveal the Client ID and Client Secret under App Details.
Authorize once:
BEXIO_CLIENT_ID=YOUR_CLIENT_ID \ BEXIO_CLIENT_SECRET=YOUR_CLIENT_SECRET \ npx -y github:nolen-ai/bexio-mcp loginA browser opens for consent. Tokens are stored in
~/.bexio-mcp/tokens.json; treat this file like a password.Add the server to your MCP client with
BEXIO_CLIENT_IDandBEXIO_CLIENT_SECRETinstead ofBEXIO_API_TOKEN. The server loads the stored token and refreshes it automatically.
Requested scopes are derived from the enabled tool groups and write mode.
Read-only omits separate write scopes; drafts requests only the edit scopes
needed for its allowlist. Override them with BEXIO_SCOPES or --scopes.
Use the full GitHub command with whoami to verify the authenticated bexio
user, or logout to revoke and remove the stored tokens:
BEXIO_CLIENT_ID=YOUR_CLIENT_ID BEXIO_CLIENT_SECRET=YOUR_CLIENT_SECRET \
npx -y github:nolen-ai/bexio-mcp whoamiTroubleshooting
Claude reports Failed to reconnect … -32000
Make sure the configured command includes the GitHub package specifier. The
short form npx -y bexio-mcp does not work until this project is published on
the npm registry.
Reset an incorrect Claude Code entry with:
claude mcp remove bexio
claude mcp add --env BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN \
--transport stdio bexio -- npx -y github:nolen-ai/bexio-mcp
claude mcp listCheck the server outside your MCP client
This command should print 35 tools and exit:
BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN \
npx -y github:nolen-ai/bexio-mcp --list-toolsThen verify that bexio accepts the token:
BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN \
npx -y github:nolen-ai/bexio-mcp whoamiIf tool listing fails, check node --version is 18 or newer and read the error
printed by npx. If whoami returns 401, create a new PAT and update the token
in your MCP client.
Configuration
Environment variable | CLI flag | Description |
|
| Static token (PAT or OAuth access token). Wins over the app workflow. |
|
| OAuth app client id (app workflow). |
|
| OAuth app client secret (app workflow). |
|
| Scopes for |
|
| Loopback redirect URI (default |
|
| OAuth token file (default |
|
|
|
|
| Comma-separated groups to enable (default: all). See groups below. |
|
| Write policy: |
|
| Compatibility alias that forces |
|
|
|
|
| API host override (default |
|
| Per-request timeout in milliseconds (default 30000). |
Add these variables to your MCP client's env block or --env options. Run
npx -y github:nolen-ai/bexio-mcp --help for every CLI option.
Write modes
Use BEXIO_WRITE_MODE to choose the server-side write policy:
read-onlydisables every write.draftspermits contact create/update, contact-relation create/delete, draft-quote create/update, and custom-position changes on unissued draft quotes. Inline quote positions must also be custom positions. It blocks contact/quote deletion, issue/send/accept/decline, all order/invoice writes, and every other business mutation.fullexposes every operation allowed by the token (the default for backward compatibility).
BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN BEXIO_WRITE_MODE=drafts \
npx -y github:nolen-ai/bexio-mcp --list-toolsPolicy-disabled actions are removed from the advertised action enums and are
also rejected server-side without touching the API. In read-only and
drafts, save_path is blocked because it writes to the server filesystem;
omit it to return a PDF inline.
BEXIO_READ_ONLY=true and --read-only remain supported as aliases for
read-only.
Tool groups
contacts, sales, purchase, accounting, banking, items, projects, files, payroll, misc
BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN BEXIO_TOOL_GROUPS=contacts,sales,items \
npx -y github:nolen-ai/bexio-mcp --list-toolsTools
Tools are grouped per resource with an action argument; each tool's description documents every action and its required arguments.
Group | Tools |
contacts |
|
sales |
|
purchase |
|
accounting |
|
banking |
|
items |
|
projects |
|
files |
|
payroll |
|
misc |
|
Highlights:
Full document lifecycle: create → issue → send/mark-as-sent → payments/reminders → PDF, for quotes, orders, deliveries and invoices — including converting quotes to orders/invoices and orders to deliveries/invoices.
All seven position types (item, custom, text, subtotal, discount, pagebreak, sub-position) on quotes, orders and invoices via one generic
bexio_document_positionstool.PDF and file downloads accept a
save_pathargument so large documents go to disk instead of the context window.Legacy search endpoints take
search_criteria:[{ "field": "name_1", "value": "Muster", "criteria": "like" }], combined with AND.
Server-side & Docker
Use the published Docker image when your MCP client cannot start a local stdio server, or when several clients need the same deployment.
Start the server:
docker run -d --name bexio-mcp -p 8722:8722 \
ghcr.io/nolen-ai/bexio-mcp:latestCheck it:
curl http://127.0.0.1:8722/healthzThe MCP endpoint is http://127.0.0.1:8722/mcp. In this default multi-user
mode, each client sends its own bexio token as
Authorization: Bearer YOUR_BEXIO_TOKEN. Follow the relevant
integration guide for the exact client config.
HTTP authentication modes
Multi-user (pass-through): don't configure any server credentials. Every client sends its own
Authorization: Bearer <bexio PAT or OAuth access token>header; each MCP session acts as that user against bexio, and nothing is stored server-side. Sessions without a token are rejected with 401.Shared identity (single-tenant): configure
BEXIO_API_TOKENor the app credentials — then sessions without their own bearer use the server's identity. This grants unauthenticated, full access to that bexio account to anyone who can reach the port. On non-loopback binds (including Docker) it therefore stays off until you explicitly setBEXIO_HTTP_SHARED_IDENTITY=true; publish the port to loopback or a private network only (-p 127.0.0.1:8722:8722).
For a local, single-account deployment with a PAT:
docker run -d --name bexio-mcp \
-p 127.0.0.1:8722:8722 \
-e BEXIO_API_TOKEN=YOUR_BEXIO_TOKEN \
-e BEXIO_HTTP_SHARED_IDENTITY=true \
ghcr.io/nolen-ai/bexio-mcp:latestDo not expose shared-identity mode to an untrusted network: anyone who can reach it can use the configured bexio account.
Long-running OAuth deployment
Obtain a refresh token once with the OAuth app workflow, then seed the container. The server refreshes and persists rotated tokens in the named volume:
docker run -d --name bexio-mcp \
-p 127.0.0.1:8722:8722 \
-v bexio-tokens:/data \
-e BEXIO_CLIENT_ID=YOUR_CLIENT_ID \
-e BEXIO_CLIENT_SECRET=YOUR_CLIENT_SECRET \
-e BEXIO_REFRESH_TOKEN=YOUR_REFRESH_TOKEN \
-e BEXIO_HTTP_SHARED_IDENTITY=true \
ghcr.io/nolen-ai/bexio-mcp:latestFor remote deployments, terminate TLS in a reverse proxy: bearer tokens must
not cross networks over plain HTTP. Behind a proxy, list its public hostname in
BEXIO_HTTP_ALLOWED_HOSTS. Environment variables are visible through
docker inspect; use your platform's secret mechanism in production.
Environment variable | CLI flag | Description |
|
| Bind address (default |
|
| Port (default |
|
| Endpoint path (default |
|
| Opt-in: anonymous sessions may use the server identity on non-loopback binds (unauthenticated account access — see above). |
|
| Max concurrent MCP sessions (default 64). |
|
| Accepted |
|
| Headless bootstrap: seed the token store from a refresh token. |
Using the client without MCP
Install directly from GitHub:
npm install github:nolen-ai/bexio-mcpThe typed client is dependency-free (uses global fetch) and importable on its
own:
import { BexioClient } from 'bexio-mcp/client';
const bexio = new BexioClient({
token: process.env.BEXIO_API_TOKEN!, // string or async () => string
language: 'de',
});The OAuth building blocks are exported too — BexioOAuth (authorization URL with PKCE, code exchange, refresh with rotation) and OAuthTokenProvider (auto-refreshing token source) from bexio-mcp/client, plus FileTokenStore and runLoginFlow from bexio-mcp:
import { BexioClient, BexioOAuth, OAuthTokenProvider } from 'bexio-mcp/client';
import { FileTokenStore } from 'bexio-mcp';
const oauth = new BexioOAuth({ clientId, clientSecret });
const provider = new OAuthTokenProvider(oauth, new FileTokenStore());
const bexio = new BexioClient({ token: provider.accessTokenProvider() });
// Typed resource APIs mirroring the bexio docs
const contacts = await bexio.contacts.search([{ field: 'name_1', value: 'Muster' }]);
const invoice = await bexio.invoices.createInvoice({ contact_id: contacts[0]!.id, positions: [/* … */] });
await bexio.invoices.issueInvoice(invoice.id);
// Escape hatch for anything else
const me = await bexio.http.get('/3.0/users/me');Errors are typed: BexioApiError (with status, errorCode, body, plus isAuthError/isPermissionError/isNotFound/isRateLimit), BexioRateLimitError, BexioNetworkError, BexioConfigError.
Embedding the server in your own process:
import { BexioClient, createBexioMcpServer } from 'bexio-mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createBexioMcpServer({
client: new BexioClient({ token: myToken }),
groups: ['contacts', 'sales'],
writeMode: 'drafts',
});
await server.connect(new StdioServerTransport());Development
npm install
npm run typecheck # tsc --noEmit
npm test # vitest (includes the API coverage gate)
npm run build # tsup → dist/ (ESM + CJS + d.ts)With just: just check runs the full gate, just docker-build builds the image.
Releasing
Releases are tag-driven: pushing vX.Y.Z triggers the release workflow, which verifies the tag against package.json, runs the full gate, pushes the multi-arch Docker image to ghcr.io/nolen-ai/bexio-mcp (latest, X.Y, X.Y.Z), creates the GitHub release with generated notes, and publishes to npm when the NPM_TOKEN secret is configured.
just bump minor # bump package.json + src/version.ts, commit "Release vX.Y.Z"
git push # let CI pass on main
just tag # tag vX.Y.Z (verifies clean tree, main, pushed, version sync) and push itSee docs/ARCHITECTURE.md for the layering and module conventions. The API surface is pinned in tests/fixtures/operations.json (extracted from the official docs); tests/coverage.test.ts fails when bexio documents operations this package does not cover.
Notes & limitations
The bexio API rate limit is per company; heavy parallel use of tools can hit 429s — the client waits and retries automatically.
bexio deletes are permanent (no trash). Destructive tool actions are annotated and blocked in read-only mode, but be deliberate.
Credit notes and a handful of business processes are not exposed by the bexio API itself (see their FAQ).
This is an unofficial project; not affiliated with bexio AG.
License
MIT
Available Tools
35 toolsbexio_accountingbexio AccountingADestructive
Access the bexio accounting foundation: chart of accounts, account groups, calendar/business years, VAT periods, taxes and the accounting journal. Select a "resource" and an "action". Valid combinations: accounts: "list", "search" (search_criteria required; searchable fields: account_no, name, account_type, fibu_account_group_id); account_groups: "list"; calendar_years: "list", "search" (searchable fields: start, end, is_vat_subject, vat_accounting_method, vat_accounting_type), "get" (id), "create" (payload; useful fields: year, is_vat_subject, is_annual_reporting, vat_accounting_method, vat_accounting_type, default_tax_income_id, default_tax_expense_id — creating a future year generates all years in between and returns them as an array); business_years: "list", "get" (id); vat_periods: "list", "get" (id); taxes: "list" (optional filters scope=active|inactive, date=validity date, types=sales_tax|pre_tax), "get" (id), "delete" (id — permanently deletes the tax, cannot be undone); journal: "list" (optional from/to date range and account_uuid filters; requires the "accounting" API scope). All "list" and "search" actions accept limit/offset pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Resource id (required for "get" and "delete") | |
| to | No | journal only: include entries until this ISO 8601 date | |
| date | No | taxes list only: show taxes active at this ISO 8601 date | |
| from | No | journal only: include entries on/after this ISO 8601 date | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| scope | No | taxes list only: filter active or inactive taxes | |
| types | No | taxes list only: filter by tax type | |
| action | Yes | Operation to perform (see description for valid resource/action combinations) | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Calendar year fields for "create". All fields are optional per the API schema. | |
| resource | Yes | Accounting resource to operate on | |
| account_uuid | No | journal only: only entries of the account with this uuid | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description elaborates on destructive actions (e.g., tax delete is permanent) and non-destructive ones. Also mentions API scope requirements for journal. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with purpose and then enumerates combinations efficiently. While detailed, each sentence adds value. Could be slightly more concise but well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 parameters, nested objects, multiple resources), the description covers most aspects including pagination, optional filters, and return behavior for create. No output schema exists, but the description compensates with behavioral notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value by explaining searchable fields for accounts and calendar_years, the effect of creating a future calendar year, and the meaning of payload fields. This goes beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: accessing the bexio accounting foundation with specific sub-resources. It lists all valid resource/action combinations, distinguishing it from sibling tools like bexio_invoices or bexio_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instructions for each resource and action, including required parameters like search_criteria for search actions and optional filters for taxes and journal. Lacks explicit when-not-to-use guidance but is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_additional_addressesbexio Additional AddressesADestructive
Manage additional addresses of a contact (e.g. delivery addresses). Every action requires contact_id (the parent contact). Actions: "list" (contact_id; optional limit/offset/order_by [id|name|postcode|country_id, append "_desc"]), "search" (contact_id + search_criteria; useful searchable fields: name, postcode, city, country_id), "get" (contact_id + id), "create" (contact_id + payload; provide at least name), "update" (contact_id + id + payload of fields to change), "delete" (contact_id + id — destructive, cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Additional address id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Additional address fields. Provide at least name on create. The legacy combined "address" field is deprecated (read-only); use street_name/house_number/address_addition. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| contact_id | Yes | Id of the parent contact (required for every action) | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses that delete is 'destructive, cannot be undone', which aligns with the destructiveHint annotation (true). It also specifies that create requires at least the name field. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single coherent paragraph that front-loads the main purpose and uses semicolons to separate action details. It is concise and without filler, though formatting could be more structured with bullet points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all actions, required parameters, and constraints (e.g., limit/offset for list, search fields). Lacks examples of payload or return values, but output schema is absent. Adequate for a multi-action CRUD tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 8 parameters with descriptions (100% coverage). The description adds some context by summarizing actions and listing searchable fields, but does not significantly enhance understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it manages additional addresses of a contact, enumerates six specific actions with their required parameters, and differentiates from sibling tools (e.g., bexio_contacts) by focusing on a specific sub-resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides clear context by listing each action's prerequisites (e.g., contact_id required for all actions) and mentions searchable fields for the search action. However, it does not explicitly state when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_bank_accountsbexio Bank AccountsARead-onlyIdempotent
Read bank accounts configured in bexio (name, owner, IBAN, QR-IBAN, currency, linked accounting account). Actions: "list" (all bank accounts, optional limit/offset), "get" (single account by numeric id). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Bank account id (required for "get") | |
| limit | No | Max results for "list" | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, making safety clear. The description adds that it is 'Read-only' (redundant) and describes the two actions, but does not disclose additional behavioral traits like rate limits, caching, or whether results are paginated beyond the schema's limit/offset. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (2 sentences) and front-loaded with the tool's primary purpose. Every sentence adds value: the first defines the read operation and fields, the second clarifies actions and parameter roles. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists the fields returned (name, owner, IBAN, etc.) and specifies the two actions with required parameters. For a read-only tool with full schema coverage and safety annotations, this is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described. The description reiterates the action enum and adds minor context ('optional limit/offset', 'numeric id'), but does not add significant meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read bank accounts configured in bexio' and lists specific fields (name, owner, IBAN, etc.). It explicitly defines the two actions 'list' and 'get' with parameter roles, effectively distinguishing this tool from siblings like bexio_accounting or bexio_banking_payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose ('read bank accounts'), but the description provides no explicit guidance on when to use this tool over alternatives (e.g., bexio_accounting, bexio_banking_payments). There are no when-not-to-use or exclusion criteria, leaving the agent to infer context from the 34 sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_banking_paymentsbexio Bank PaymentsADestructive
Manage outgoing bank payments (bexio banking 4.0 API). Actions: "list" (optional filter_by expression, page/per_page), "get" (payment by id/uuid), "create" (payload required: account_id, amount, currency, execution_date, is_salary, recipient, type), "update" (id + payload of fields to change; only open payments; account_id, type and purchase_reference cannot be changed), "cancel" (cancel a transmitted/downloaded payment by id — cannot be undone), "delete" (permanently delete a payment by id — cannot be undone). Payment ids are strings (uuid or numeric id).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Payment id or uuid (required for get/update/cancel/delete) | |
| page | No | Page number for "list"; the first page is 0 (API default) | |
| action | Yes | Operation to perform | |
| payload | No | Payment fields. Required on create: account_id, amount, currency, execution_date, is_salary, recipient, type. account_id, type and purchase_reference are create-only: the update endpoint does not accept them, so they cannot be changed and are ignored on "update". | |
| per_page | No | Results per page for "list" (default 500, max 2000) | |
| filter_by | No | Filter expression for "list", e.g. "status_open"; ranges use "_", multiple filters use ";" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral details beyond annotations: cancel and delete cannot be undone, update has restrictions on mutable fields, create requires specific payload. This complements the destructiveHint and readOnlyHint annotations well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise, organized by action in a single paragraph. It front-loads the purpose and then details each action. Could be improved with bullet points or clearer separation, but not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description provides reasonable context for each action's behavior and constraints. It mentions that payment ids are strings (uuid or numeric). However, it does not describe the response format for list/get, which might be needed for integration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds value by explaining that certain fields (account_id, type, purchase_reference) are create-only and ignored on update, which is not in the schema descriptions. This helps agents avoid invalid update requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages outgoing bank payments with specific actions (list, get, create, update, cancel, delete). However, it does not explicitly differentiate from sibling tools like bexio_outgoing_payments, relying on the tool name and context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear conditions for each action: update only open payments with certain immutable fields, cancel/delete are irreversible, create requires specific fields. It does not compare to alternative tools but within the tool it gives actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_billsbexio BillsADestructive
Manage purchase bills / supplier invoices (accounts payable, bexio purchase 4.0 API). Bill ids are UUID strings. Actions: "list" (paginated via limit/page/order/sort; optional full-text search_term of 3-255 chars with search_fields, and filters: status DRAFTS|TODO|PAID|OVERDUE, bill_date_start/end, due_date_start/end, vendor_ref, title, currency_code, pending_amount_min/max, vendor, gross_min/max, net_min/max, document_no, supplier_id, average_exchange_rate_enabled), "get" (bill by id), "create" (payload required: supplier_id, contact_partner_id, bill_date, due_date, manual_amount, currency_code, item_net, attachment_ids, address, line_items, discounts; provide amount_man when manual_amount=true, amount_calc otherwise), "update" (id + full payload; additionally requires split_into_line_items; line item/discount ids must already exist on the bill or be omitted for new ones), "delete" (id; permanently deletes the bill — cannot be undone), "execute_action" (id + bill_action "DUPLICATE": copies the bill into a new draft), "update_status" (id + status: "BOOKED" books the bill, "DRAFT" reverts it to draft), "validate_document_number" (document_no; reports whether it is available and the next free number).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Bill id (UUID; required for get/update/delete/execute_action/update_status) | |
| page | No | Page number for "list" | |
| sort | No | Field to sort by for "list" | |
| limit | No | Results per page for "list" (max 500) | |
| order | No | Sorting order for "list" | |
| action | Yes | Operation to perform | |
| status | No | Target status for "update_status" | |
| filters | No | Optional filters for "list" | |
| payload | No | Bill fields. Required on create: supplier_id, contact_partner_id, bill_date, due_date, manual_amount, currency_code, item_net, attachment_ids, address, line_items, discounts. Update sends the full bill and additionally requires split_into_line_items. | |
| bill_action | No | Action to execute for "execute_action" | |
| document_no | No | Document number to check for "validate_document_number" | |
| search_term | No | Full-text search term for "list" (3-255 characters) | |
| search_fields | No | Fields the search term is applied to (all searchable fields when omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true; description adds that delete is permanent and cannot be undone. Also details payload requirements for create/update. No contradiction; provides additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficiently structured by action with front-loaded purpose. Every sentence adds specific and necessary information for tool usage. No redundancy or irrelevant details despite the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all actions, required vs optional parameters, conditional logic, constraints (e.g., character limits, enum values). With high param count and nested objects, the description leaves little ambiguity. No output schema but acceptable given action descriptions suffice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but description adds value beyond field descriptions by explaining conditional logic (e.g., provide amount_man when manual_amount=true, amount_calc otherwise) and grouping constraints per action. Reduces ambiguity for complex scenarios.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it manages purchase bills/supplier invoices (accounts payable, bexio purchase 4.0 API). Specifies resource type and differentiates from sibling tools like bexio_invoices (sales invoices).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes each action (list, get, create, update, delete, etc.) and their inputs, but does not explicitly guide when to choose this tool over alternatives or when not to use it. Implicit context from purpose but no explicit usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_company_profilebexio Company ProfileARead-onlyIdempotent
Read the company profile of the bexio company (name, legal form, address, contact details, VAT/trade-register numbers, public-profile flags, base64 logo). Actions: "list" (all company profiles), "get" (single profile by numeric id). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Company profile id (required for "get") | |
| action | Yes | Operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint false. The description adds transparency by listing the specific fields returned (name, legal form, address, etc.) and the available actions. This provides behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the primary purpose, and every sentence adds value. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, two actions), the description, combined with annotations, provides nearly complete context. It lists return fields and actions. No output schema exists, but the description compensates by listing the data. Minor omission: no mention of error conditions or pagination for 'list', but these are minor for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description repeats the action names and the id requirement but adds no new semantic meaning beyond what the schema already provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the company profile, lists the specific data fields it returns, and defines the two actions ('list' and 'get'). This is a specific verb+resource combination that distinguishes it from the many sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to read company profile data). It does not explicitly state when not to use it or mention alternatives, but given the sibling tools cover different domains, the usage is implied. A small deduction for lack of exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_contact_groupsbexio Contact GroupsADestructive
Manage contact groups (categories assigned to contacts via their contact_group_ids field). Actions: "list" (optional limit/offset/order_by [id|name, append "_desc"]), "search" (search_criteria required; searchable fields: name), "get" (group by id), "create" (payload required: name), "update" (id + payload), "delete" (delete the group by id — destructive, cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Contact group id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Contact group fields. Required on create: name. Note: the API spec also marks name as required on update (v2EditContactGroup), though partial edits generally work. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true; the description reinforces this by stating delete is 'destructive, cannot be undone'. It also describes payload requirements for create/update. No contradictions found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact but packs dense information into one paragraph. It could benefit from bullet or action-specific structuring for easier scanning, but it remains efficient without excess words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, nested objects, and no output schema, the description covers all essential aspects: pagination, sorting, search fields, payload requirements, and destructive behavior. It fully equips an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by providing examples for order_by (e.g., 'id_desc'), clarifying searchable fields for search, and noting partial behavior for payload on update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages contact groups and lists all specific actions (list, search, get, create, update, delete). It distinguishes from sibling tools by focusing on contact groups and referencing their role as categories assigned via contact_group_ids.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for each action, including required and optional parameters (e.g., limit, offset for list; search_criteria for search). It does not explicitly compare with sibling tools, but the tool name and specificity make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_contact_relationsbexio Contact RelationsADestructive
Manage relations between two contacts (e.g. link a person to their company: contact_id = company, contact_sub_id = person). Actions: "list" (optional limit/offset/order_by [id|contact_id|contact_sub_id|updated_at, append "_desc"]), "search" (search_criteria required; useful searchable fields: contact_id, contact_sub_id, updated_at), "get" (relation by id), "create" (payload required: contact_id, contact_sub_id; optional description), "update" (id + payload of fields to change), "delete" (delete the relation by id — destructive, cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Contact relation id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Contact relation fields. Required on create: contact_id, contact_sub_id. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description explicitly warns for delete: 'destructive, cannot be undone'. It also details the behavior for search (AND logic, default 'like' operator) and list (pagination, ordering). No contradictions. However, it does not discuss authorization or rate limits, but given the annotations cover the safety profile, the added context is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense paragraph that front-loads the purpose and efficiently covers all actions without redundancy. Every sentence adds value. It could benefit from minor structuring (e.g., bullet lists), but as prose it is very concise and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a CRUD tool with 7 parameters, no output schema, and 100% schema coverage, the description is remarkably complete. It explains the relation concept, all CRUD actions, pagination hints, search behavior, and required fields. The only missing part is explicit return format, but since there is no output schema, the description cannot be blamed. It leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage (context signals), and the description adds substantial meaning: example of linking person to company, clarification of required payload fields for create, listing searchable fields, explaining order_by suffix '_desc', and describing search criteria structure. This goes well beyond the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear statement: 'Manage relations between two contacts (e.g. link a person to their company)'. It then enumerates all actions (list, search, get, create, update, delete) and their specifics. This is a specific verb+resource description that clearly distinguishes this tool from other bexio tools, which are for different entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for each action, such as required vs optional parameters for list, search, create, etc. It does not explicitly state when to not use this tool or mention alternatives, but the actions are self-contained and the tool's domain (contact relations) is clear. A small gap is the lack of explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_contactsbexio ContactsADestructive
Manage bexio contacts (companies and persons; the central address book referenced by quotes, orders, invoices, projects). Actions: "list" (all contacts; optional limit/offset/order_by [id|nr|name_1|updated_at, append "_desc"], show_archived), "search" (search_criteria required; useful searchable fields: id, nr, name_1, name_2, mail, postcode, city, country_id, contact_type_id, contact_group_ids, user_id, updated_at; optional list params and show_archived), "get" (contact by id; optional show_archived; includes base64 profile_image), "create" (payload required: contact_type_id [1=company, 2=person], name_1, user_id, owner_id), "update" (id + payload of fields to change), "delete" (permanently deletes the contact — cannot be undone; a deleted contact can only be restored shortly afterwards via the restore action), "bulk_create" (contacts array of contact payloads, same required fields as create), "restore" (restore a deleted contact by id).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Contact id (required for get/update/delete/restore) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Contact fields. Required on create/bulk_create: contact_type_id, name_1, user_id, owner_id. Note: the API spec also marks these four fields as required on update (v2EditContact), though partial edits generally work. The legacy combined "address" field is deprecated (read-only); use street_name/house_number/address_addition. | |
| contacts | No | Contact payloads for "bulk_create" | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| show_archived | No | Show archived elements only (list/search/get) | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond annotations by noting that delete permanently removes contacts (cannot be undone) but can be restored shortly afterward, and that get includes base64 profile_image. Annotations already indicate destructiveHint true, so the description enhances transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, listing each action with its parameters and constraints. It is somewhat lengthy but organized, making it easy to scan. Every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (multiple actions, nested objects, search criteria), the description covers all essential aspects: actions, required fields, searchable fields, deletion behavior, pagination, and deprecation notes. It leaves no major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the descriptions already document parameters. The tool description adds value by explaining searchable fields, required fields for create/bulk_create, and deprecation of the address field, which aids effective parameter use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages bexio contacts, identifies it as the central address book referenced by quotes, orders, invoices, and projects, and lists all supported actions (list, search, get, create, update, delete, bulk_create, restore). This specificity distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for contact management and highlights that it is the central address book, providing context. However, it does not explicitly state when to use this tool versus alternatives or when not to use certain actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_contact_sectorsbexio Contact SectorsARead-onlyIdempotent
Read contact sectors ("Branchen"; referenced by contacts via their contact_branch_ids field). Read-only. Actions: "list" (optional limit/offset/order_by [id|name, append "_desc"]), "search" (search_criteria required; searchable fields: name).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm read-only and idempotent behavior. The description adds concrete behavioral details: actions, optional parameters, searchable fields, and the relationship to contacts via contact_branch_ids. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, packing purpose, actions, and parameter details into a single sentence plus a compact list. Every phrase adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description fully covers the tool's functionality: read-only master data retrieval with two actions, pagination, ordering, and search. It is complete for the task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds critical context beyond the schema: for 'list', it specifies valid order_by values (id, name) and the format for descending; for 'search', it states required search_criteria and searchable field 'name'. This enriches the parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read contact sectors' and specifies actions (list, search), making the tool's purpose unambiguous. It distinguishes itself from sibling tools by focusing on a specific entity referenced by contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool is read-only and outlines when to use list vs search, providing implicit usage guidance. However, it does not explicitly compare with alternative tools or specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_currenciesbexio CurrenciesADestructive
Manage currencies and read their exchange rates (bexio 3.0 API). Actions: "list" (all currencies; optional limit/offset, embed — e.g. "exchange_rate" to include rate fields — and date for the rate validity date), "get" (currency by numeric id), "create" (payload required: name in ISO 4217 format like "CHF", round_factor), "update" (id + payload; PATCH — only round_factor can be changed), "delete" (permanently delete a currency by id — cannot be undone), "list_codes" (all available currency codes such as CHF, EUR), "list_exchange_rates" (configured exchange rates of a currency by id; optional date for the validity date).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Currency id (required for get/update/delete/list_exchange_rates) | |
| date | No | Validity date (ISO 8601) for fetched exchange rates ("list" with embed, "list_exchange_rates") | |
| embed | No | For "list": embed related resources, e.g. "exchange_rate" to include exchange rate fields | |
| limit | No | Max results for "list" | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" | |
| payload | No | Currency fields. Required on create: name, round_factor. Update (PATCH) can only change round_factor. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses beyond annotations: delete is permanent and cannot be undone; update is PATCH only changes round_factor. This aligns with destructiveHint=true and adds critical behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph but efficiently covers all actions and parameters. Slightly dense; could benefit from bullet points for readability, but no unnecessary content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all 7 parameters, schema descriptions present, annotations provide destructive hint. No output schema needed; description adequately explains each action's behavior and required inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds value by explaining embed example ('exchange_rate'), date format ISO 8601, limit max 2000, and payload examples ('CHF', 0.05).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages currencies and reads exchange rates, listing specific actions (list, get, create, update, delete, list_codes, list_exchange_rates) that distinguish it from other bexio sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action has context (e.g., list with optional parameters, update only round_factor, delete permanent). However, no explicit when-not-to-use or comparison to alternatives, though none exist for this resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_deliveriesbexio DeliveriesA
Read and issue delivery notes (kb_delivery). Deliveries are created from orders (use bexio_orders action "create_delivery"). Actions: "list" (all deliveries, optional limit/offset/order_by: id, total, total_net, total_gross, updated_at), "get" (delivery by id, includes positions), "issue" (issue a draft delivery by id — moves it from Draft (status 10) to Done (18); this finalizes the delivery note and adjusts stock when stock management is active).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Delivery id (required for "get" and "issue") | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds transparency by detailing that issue finalizes the delivery note and adjusts stock when stock management is active, and mentions status codes for draft vs done. This goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and a structured list of actions. It is front-loaded with purpose and immediately provides actionable details. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description adequately covers the three actions and their parameters. It mentions that get includes positions and issue adjusts stock. However, details about response format or pagination defaults are missing, but overall sufficient for an agent to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining which actions require the id parameter, listing valid order_by fields, and clarifying the effect of issue. This context enriches the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads and issues delivery notes, and specifies three actions. It distinguishes from sibling tools by mentioning that deliveries are created from orders via bexio_orders, but does not explicitly differentiate from other related tools like bexio_stock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each action (list, get, issue) and provides context such as optional parameters and the effect of issue. It refers to bexio_orders for creation, giving guidance on alternatives, but does not explicitly state when not to use certain actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_document_commentsbexio Document CommentsA
Comments on sales documents (quotes/kb_offer, orders/kb_order, invoices/kb_invoice). Actions: "list" (all comments of a document; optional limit/offset), "get" (single comment, requires comment_id), "create" (payload required: text, user_id, user_name; optional user_email, is_public — is_public makes the comment visible to the document recipient). All actions require document_type and document_id. Comments cannot be edited or deleted via the API.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results for "list" (max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" | |
| payload | No | Comment fields. Required on create: text, user_id, user_name. | |
| comment_id | No | Comment id (required for "get") | |
| document_id | Yes | Id of the parent document (quote, order or invoice) | |
| document_type | Yes | Type of the parent document: kb_offer (quote), kb_order (order) or kb_invoice (invoice) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations, such as the immutability of comments (no edit/delete) and the effect of is_public on comment visibility. Annotations already indicate not read-only and not destructive, which is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys the tool's purpose, actions, and key constraints without extraneous information. It is front-loaded with the resource type and action summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all actions, required parameters, and constraints, but does not describe the return format or content of list/get responses. Since there is no output schema, this omission slightly reduces completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the description goes further by grouping parameters per action (e.g., limit/offset for list, comment_id for get, payload fields for create) and explaining the purpose of is_public. This adds context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as managing comments on specific sales documents (quotes, orders, invoices) and lists the three actions (list, get, create). It distinguishes itself from general notes by specifying the document types and action constraints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by stating that all actions require document_type and document_id, and explicitly notes that comments cannot be edited or deleted via the API. However, it does not mention alternative tools or when to prefer this tool over siblings like bexio_notes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_document_positionsbexio Document PositionsADestructive
Manage line-item positions on sales documents (quotes/kb_offer, orders/kb_order, invoices/kb_invoice). position_type selects the kind of position: "custom" (free position: amount, unit_id, account_id, tax_id, text, unit_price, discount_in_percent), "article" (item position: same fields plus article_id referencing an item), "text" (text block: text, show_pos_nr), "subtotal" (text), "discount" (text, is_percentual, value), "pagebreak" (pagebreak flag) and "subposition" (grouping position: text, show_pos_nr). Actions: "list" (all positions of that kind on the document; optional limit/offset), "get" (single position, requires position_id), "create" (payload with the fields of the chosen position_type), "update" (requires position_id + payload; partial updates allowed), "delete" (requires position_id — permanently removes the position, cannot be undone). All actions require document_type, document_id and position_type. is_optional is writable only on custom/article positions and only honored on quotes and orders. Amounts/prices are strings with max. 6 decimals.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results for "list" (max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" | |
| payload | No | Position fields (all optional; only the fields of the selected position_type apply). custom: amount, unit_id, account_id, tax_id, text, unit_price, discount_in_percent, is_optional. article: same as custom plus article_id. text: text, show_pos_nr. subtotal: text. discount: text, is_percentual, value. pagebreak: pagebreak. subposition: text, show_pos_nr. | |
| document_id | Yes | Id of the parent document (quote, order or invoice) | |
| position_id | No | Position id (required for get/update/delete) | |
| document_type | Yes | Type of the parent document: kb_offer (quote), kb_order (order) or kb_invoice (invoice) | |
| position_type | Yes | Kind of position; maps to the kb_position_custom/kb_position_article/kb_position_text/kb_position_subtotal/kb_position_discount/kb_position_pagebreak/kb_position_subposition endpoints |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that delete is permanent and irreversible, consistent with destructiveHint annotation. Adds details on field applicability and value format (max 6 decimals). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is dense but well-organized: first sentence defines scope, then enumerates position types and their fields, then actions, then additional notes. It efficiently packs information without redundancy, though length is justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 params, 7 position types, 5 actions), the description covers most aspects: actions, field mappings, constraints, and pagination. No output schema, but missing return structure is acceptable for a CRUD tool. Slight gap: no response example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by mapping fields to each position_type, explaining special behaviors (is_optional, is_percentual), and providing format constraints (max 6 decimals). This goes beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Manage line-item positions on sales documents' and enumerates specific document types and position types. Distinguishes itself from sibling tools by focusing on document positions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains each action (list, get, create, update, delete) and required parameters. Provides context on which fields apply to which position_type and notes limitations like is_optional only on quotes/orders. Does not explicitly state when not to use but offers sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_document_settingsbexio Document SettingsARead-onlyIdempotent
Read sales-document configuration. Actions: "list_settings" (per-document-class settings: numbering format, next number, default title, default currency/language/payment type, decimal precision; optional order_by "id" or "text", append "_desc" for descending), "list_templates" (document print templates with slug, name and the document types they are the default for). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform | |
| order_by | No | Sort order for "list_settings": "id" or "text", ascending by default; append "_desc" to sort descending |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Read-only', consistent with annotations (readOnlyHint=true). It goes beyond annotations by detailing the output fields for each action, such as numbering format, default currency, and template details, providing full behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a purpose statement followed by a bullet-like enumeration of actions with relevant details. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description adequately covers return values for both actions, listing key fields. It does not mention error handling or pagination, but for a read-only configuration tool, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds meaning by explaining the order_by syntax (append '_desc' for descending) and clarifies that it applies only to 'list_settings'. It also describes the action enum values in detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Read sales-document configuration' and lists two specific actions ('list_settings' and 'list_templates') with detailed output fields. It distinguishes from sibling tools like bexio_invoices, which deal with actual documents, by focusing on configuration and templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to read configuration) but does not explicitly state when not to use it or mention alternatives. The sibling tools imply other purposes, but no direct exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_expensesbexio ExpensesADestructive
Manage expenses (bexio 4.0 API). Expense ids are UUID strings. Actions: "list" (paginated via limit/page/order/sort; filters: vendor, gross_min/max, net_min/max, paid_on_start/end, created_at_start/end, title, currency_code, document_no, supplier_id, project_id), "get" (expense by id), "create" (payload required: paid_on, currency_code, amount, attachment_ids; optional supplier, bank/booking account, tax and address fields), "update" (id + full payload; same required fields as create), "delete" (id; permanently deletes the expense — cannot be undone), "execute_action" (id + expense_action "DUPLICATE": copies the expense into a new draft), "update_status" (id + status: "DONE" completes the expense, "DRAFT" reverts it to draft), "validate_document_number" (document_no; reports whether it is available and the next free number).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Expense id (UUID; required for get/update/delete/execute_action/update_status) | |
| page | No | Page number for "list" | |
| sort | No | Field to sort by for "list" | |
| limit | No | Results per page for "list" (max 500) | |
| order | No | Sorting order for "list" | |
| action | Yes | Operation to perform | |
| status | No | Target status for "update_status" | |
| filters | No | Optional filters for "list" | |
| payload | No | Expense fields. Required on create and update: paid_on, currency_code, amount, attachment_ids. Update sends the full expense (fields left out are cleared). | |
| document_no | No | Document number to check for "validate_document_number" | |
| expense_action | No | Action to execute for "execute_action" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true and readOnlyHint=false. The description adds value by noting that delete 'permanently deletes the expense — cannot be undone' and that update 'sends the full expense (fields left out are cleared)'. These specifics go beyond the annotations and clarify behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that is moderately concise but could be more structured (e.g., bullet points for actions). It front-loads the overall purpose but becomes dense. Every sentence adds value, but readability could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, and the description omits details on return values, error handling, or authentication requirements. For a tool with 11 parameters, nested objects, and multiple actions, the description is incomplete for an AI agent to reliably invoke without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter descriptions. The description adds some context (e.g., UUID ids, required fields for create/update, full payload behavior), but does not significantly enhance meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages expenses via the bexio 4.0 API, listing multiple specific actions (list, get, create, update, delete, etc.) with brief explanations. This distinguishes it from sibling tools like bexio_bills or bexio_invoices, which cover different domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides action-specific parameter requirements (e.g., list uses pagination/filters, create requires payload with specified fields), offering some guidance. However, it does not explicitly state when to use this tool vs alternatives, nor does it provide exclusions or comparative context with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_filesbexio FilesADestructive
Manage files stored in bexio (uploads, attachments; 3.0 API). Actions: "list" (all files; optional archived_state, offset, order_by — order_by fields: id, created_at, source_id, uuid, name, size_in_bytes, comma-combinable with "_asc"/"_desc" suffix), "search" (search_criteria required; searchable fields: id, uuid, created_at, name, extension, size_in_bytes, mime_type, user_id, is_archived, source_id; optional archived_state, limit, offset), "get" (file metadata by id), "download" (file content by id; returns base64 or writes to optional save_path), "preview" (preview image of the file by id; returns base64 or writes to optional save_path), "usage" (where the file is attached: reference class, title, document number; by id), "upload" (create a new file from file_path on disk OR content_base64 + file_name; file_name overrides the file_path basename), "update" (id + payload: name, is_archived, source_type), "delete" (marks the file as deleted by id — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | File id (required for get/download/preview/usage/update/delete) | |
| limit | No | Maximum number of results for "search" (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip for "list"/"search" | |
| payload | No | File fields for "update"; send only the fields to change (PATCH semantics). | |
| order_by | No | Sort order for "list": id, created_at, source_id, uuid, name or size_in_bytes; append "_asc"/"_desc" and combine multiple fields with a comma | |
| file_name | No | File name including extension (required for "upload" with content_base64; overrides the file_path basename) | |
| file_path | No | Path of a local file to upload (for "upload") | |
| save_path | No | For "download"/"preview": write the file to this local path instead of returning base64 inline | |
| archived_state | No | Include/exclude archived files for "list" and "search" | |
| content_base64 | No | Base64-encoded file content to upload (for "upload", alternative to file_path) | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set destructiveHint=true and the description reinforces that delete 'cannot be undone'. It discloses upload alternatives (file_path or content_base64 + file_name), and download/preview return base64 or write to save_path. While no rate limits or auth details are given, the key behavioral traits are covered beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized with a general statement followed by per-action details in quotes. It front-loads the action list and uses concise language. While long, every sentence adds value, and the structure aids scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters and nested objects, the description covers all actions' required inputs (e.g., id for get/download/preview/usage/update/delete) and upload alternatives. It explains search criteria format and archived_state options. The lack of output schema is acceptable as operations are clear. Slightly more detail on pagination or error handling would raise the score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by explaining which parameters belong to which actions (e.g., order_by only for list, search_criteria for search), listing searchable fields, and noting that file_name overrides basename for upload. This goes beyond just listing parameter types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages files stored in bexio, enumerates all actions (list, search, get, download, preview, usage, upload, update, delete), and distinguishes itself from sibling tools by focusing on file operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists required and optional parameters per action (e.g., id for get/download/preview, search_criteria for search). It explains when to use list vs search (list returns all files, search filters with criteria). However, it does not explicitly exclude non-file tasks or compare with alternative tools, but sibling tool names indicate clear domain separation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_invoice_paymentsbexio Invoice PaymentsADestructive
Manage payments recorded on a bexio invoice. All actions require invoice_id. Actions: "list" (payments of the invoice; optional limit/offset), "get" (payment_id), "create" (payload; required: value — the amount; set either bank_account_id or payment_service_id (1 = PayPal, 2 = Stripe, 3 = SIX Payments); optional date, is_cash_discount, is_client_account_redemption), "delete" (payment_id; permanently deletes the payment — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results for "list" | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" | |
| payload | No | Payment fields for "create" | |
| invoice_id | Yes | Invoice id the payments belong to (always required) | |
| payment_id | No | Payment id (required for "get" and "delete") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set destructiveHint=true. The description reinforces this by stating that delete 'permanently deletes the payment — cannot be undone.' It also discloses required fields for create, adding context beyond annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph that front-loads the general requirement (invoice_id) and then enumerates each action with its specific parameters. Every sentence adds value; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, nested objects, no output schema), the description covers all actions and their required/optional fields. It lacks detail on return formats (e.g., for list/get), but the schema fills in some of that. Overall, quite complete for a multi-action tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by grouping parameters per action and explaining required conditions (e.g., 'set either bank_account_id or payment_service_id (1 = PayPal, ...)'). This clarifies usage beyond the schema's individual descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Manage payments recorded on a bexio invoice' and lists four specific actions (list, get, create, delete). This distinguishes it from sibling tools like bexio_banking_payments or bexio_invoices, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description specifies that all actions require invoice_id and provides action-specific requirements (e.g., create requires value and either bank_account_id or payment_service_id with enumerated values). It does not explicitly mention when not to use this tool versus alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_invoice_remindersbexio Invoice RemindersADestructive
Manage payment reminders of a bexio invoice. All actions require invoice_id. Actions: "list" (all reminders of the invoice), "search" (search_criteria required; searchable fields: title, reminder_level, is_sent, is_valid_from, is_valid_to), "get" (reminder_id), "create" (no payload; bexio creates the next reminder level for the overdue invoice), "delete" (reminder_id; permanently deletes the reminder — cannot be undone), "send" (reminder_id + email with recipient_email/subject/message; message must contain "[Network Link]"), "mark_as_sent" (reminder_id), "mark_as_unsent" (reminder_id), "pdf" (reminder_id; optional logopaper for letterhead and save_path to write the PDF to disk instead of returning base64).
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email parameters for "send" | ||
| action | Yes | Operation to perform | |
| logopaper | No | For "pdf": render the PDF on the letterhead paper | |
| save_path | No | For "pdf": write the PDF to this file path instead of returning base64 | |
| invoice_id | Yes | Invoice id the reminders belong to (always required) | |
| reminder_id | No | Reminder id (required for get/delete/send/mark_as_sent/mark_as_unsent/pdf) | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=false. The description adds behavioral context: 'delete permanently deletes the reminder — cannot be undone' and 'create creates the next reminder level' (non-idempotent). Also clarifies email format constraints. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but front-loaded with the purpose and structured by actions. Every sentence adds value. Could be slightly more scannable with bullet points, but still concise given the breadth of actions (9 actions covered).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters including nested objects and no output schema, the description covers all actions thoroughly. It explains required and optional parameters per action, searchable fields, and side effects (permanent deletion). Minor omission: does not describe return format for list/search/get (though intuitive for invoice reminders).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond schema definitions. For 'search', it lists searchable fields (title, reminder_level, etc.). For 'pdf', it explains logopaper and save_path. For 'send', it details the email object structure and required placeholder. This provides actionable guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages payment reminders of a bexio invoice and enumerates all actions (list, search, get, create, delete, send, etc.). The verb 'Manage' plus resource 'payment reminders' distinguishes it from sibling tools like bexio_invoices or bexio_invoice_payments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that all actions require invoice_id and gives per-action parameter requirements (e.g., reminder_id for get/delete/send, email for send). It also includes constraints like 'message must contain [Network Link]' for send, but does not explicitly compare to alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_invoicesbexio InvoicesADestructive
Manage bexio invoices (kb_invoice). Status ids: 7 Draft, 8 Pending, 9 Paid, 16 Partial, 19 Canceled, 31 Unpaid. Actions: "list" (all invoices; optional limit/offset/order_by — orderable by id, total, total_net, total_gross, updated_at), "search" (search_criteria required; searchable fields: id, document_nr, title, contact_id, contact_sub_id, user_id, kb_item_status_id, currency_id, total, total_gross, total_net, is_valid_from, is_valid_to, api_reference, updated_at; optional limit/offset/order_by), "get" (id; returns the invoice including positions), "create" (payload; polymorphic positions array supported — custom, article, text, subtotal, pagebreak, discount), "update" (id + payload of fields to change; positions cannot be updated here), "delete" (id; permanently deletes the invoice — cannot be undone), "issue" (id; draft -> pending), "revert_issue" (id; sets an issued invoice back to draft), "cancel" (id; cancels the invoice — there is no API to un-cancel), "mark_as_sent" (id), "send" (id + email with recipient_email/subject/message, optional mark_as_open/attach_pdf; message must contain "[Network Link]"), "copy" (id + copy with contact_id required; creates a new invoice as a copy), "pdf" (id; optional logopaper for letterhead and save_path to write the PDF to disk instead of returning base64).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Invoice id (required for every action except list, search and create) | |
| copy | No | Copy parameters for "copy" | |
| No | Email parameters for "send" | ||
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Invoice fields for "create"/"update" | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| logopaper | No | For "pdf": render the PDF on the letterhead paper | |
| save_path | No | For "pdf": write the PDF to this file path instead of returning base64 | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behaviors beyond annotations: 'delete' is irreversible, 'cancel' has no un-cancel API, 'issue' transitions draft to pending, positions cannot be updated via 'update', and send requires '[Network Link]' in the message. These details are not captured by annotations (destructiveHint=true, readOnlyHint=false) and greatly enhance transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured: it starts with the overall purpose and status IDs, then lists each action with its behavior and parameters. Each sentence adds necessary information; no redundancy. Could be slightly more concise by grouping related actions, but the clarity and completeness justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested objects, polymorphic positions, 13 actions) and no output schema, the description covers most essential aspects: action purposes, parameter constraints, and some return values (e.g., 'get' returns invoice with positions, 'pdf' returns base64 or file). Missing details on error handling and response formats for other actions, but sufficient for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and schema descriptions are detailed, but the description adds context such as: the polymorphic positions array supports six types (custom, article, text, subtotal, pagebreak, discount), searchable fields are listed, and pdf action parameters (logopaper, save_path) are explained. This goes beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Manage bexio invoices (kb_invoice)' and enumerates 13 distinct actions (list, search, get, create, update, etc.), each with specific behavior. It clearly distinguishes this tool from siblings like bexio_bills or bexio_quotes by focusing on invoice-specific status IDs and actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While there is no explicit comparison to sibling tools, the description provides clear context for when to use each action (e.g., 'list' returns all invoices, 'search' requires criteria). It also includes constraints like the trial period limitation for 'send'. However, it does not discuss prerequisites or alternative tools for similar operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_itemsbexio ItemsADestructive
Manage items/products (called "articles" in the bexio API): physical products and services with internal code/name, purchase & sale prices, taxes, units and stock information. Actions: "list" (all items, optional limit/offset/order_by; order by "id" or "intern_name"), "search" (search_criteria required; searchable fields include intern_name, intern_code, id — conditions are AND-combined, default operator "like"), "get" (single item by numeric id), "create" (payload required; intern_name is mandatory, set article_type_id 1 for products / 2 for services), "update" (id + payload with the fields to change), "delete" (permanently delete an item by id — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Item id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Item fields (required for create/update) | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true (delete permanent) and readOnlyHint=false. The description adds that delete cannot be undone, and explains search behavior (AND-combined, default 'like' operator). It does not explicitly state that list/get are read-only, but that is implied by the action names. The openWorldHint is not contradicted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: starts with overall purpose, then lists actions in parentheses with key details. It is front-loaded and each sentence serves a purpose. However, it is somewhat lengthy and could be more concise by removing some redundant parameter details that are already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 actions, 7 parameters, nested payload), the description covers all actions, mandatory fields, and key constraints. It does not mention pagination defaults (e.g., limit default 500) or scope requirements for stock (is_stock needs stock_edit scope), which are in the schema but not in the description. No output schema, so return value explanation is not expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value beyond the schema by specifying that order_by only accepts 'id' or 'intern_name' (with optional '_desc' suffix), which is not in the schema. It also clarifies that search_criteria uses AND logic and default 'like' operator, which is partially in the schema but reinforced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages items/products (articles) and lists all six actions (list, search, get, create, update, delete) with specific detail. It distinguishes from siblings by being the only tool for item CRUD; no overlap with bexio_stock or others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is explained with when to use it (e.g., list uses limit/offset/order_by, search requires search_criteria with AND logic, create needs intern_name and article_type_id for product/service). However, no explicit comparison to sibling tools (e.g., bexio_stock) is provided, leaving some ambiguity about alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_manual_entriesbexio Manual EntriesADestructive
Manage manual accounting entries (bookings) and their attached files (bexio accounting 3.0 API). Actions: "list" (all manual entries; optional limit/offset), "create" (payload required: type — manual_single_entry/manual_compound_entry/manual_group_entry —, date, entries array with debit_account_id, credit_account_id, tax_id, tax_account_id, description, amount, currency_id, currency_factor), "update" (id + payload; PUT replaces the entry, so send type, date and the full entries array; locked entries — is_locked=true — cannot be edited), "delete" (permanently delete a manual entry by id — cannot be undone), "next_reference_number" (reference number suggested for the next manual entry). File actions cover BOTH scopes: with entry_id they target a single entry LINE (types manual_single_entry/manual_group_entry); without entry_id they target the COMPOUND entry itself (type manual_compound_entry). "list_files" (id, optional entry_id, optional limit/offset), "get_file" (id + file_id, optional entry_id; returns the file content — pass save_path to write it to disk instead of returning base64 inline), "add_file" (id, optional entry_id, plus file_path OR content_base64 + file_name; uploads multipart/form-data, max 12MB, formats PNG/JPG/JPEG/GIF/DOC/DOCX/XLS/XLSX/PPT/PPTX/PDF), "delete_file" (id + file_id, optional entry_id; removes the connection between file and entry — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Manual entry id (required for update/delete and all *_file actions) | |
| limit | No | Max results for "list"/"list_files" | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list"/"list_files" | |
| file_id | No | File id (required for get_file/delete_file) | |
| payload | No | Manual entry fields. Required on create and update (PUT sends the full entry): type, date, entries. | |
| entry_id | No | Id of a single entry LINE within the manual entry. Provide it for *_file actions on entry lines (manual_single_entry/manual_group_entry); omit it to address files of a manual_compound_entry. | |
| file_name | No | For "add_file": file name to upload as (defaults to the basename of file_path) | |
| file_path | No | For "add_file": path of a local file to upload | |
| save_path | No | For "get_file": write the file to this path instead of returning base64 content inline | |
| content_base64 | No | For "add_file": base64-encoded file content (alternative to file_path; requires file_name) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: delete is permanent, update is a full PUT replacement, file uploads have size (12MB) and format limits, and the scope differentiation for file actions (entry_id vs compound entry). These complement the annotations (destructiveHint true, readOnlyHint false) without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively long but well-structured by action, with clear grouping of entry and file operations. It front-loads the overall purpose. While verbose, the complexity of 9 actions justifies the length; every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all actions, explains return behavior (e.g., file content vs inline base64), and details file upload constraints. It lacks explicit return schemas for list/create/update but compensates with behavioral notes. For a complex tool with no output schema, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptive fields, so baseline is 3. The description adds value by explaining the 'type' enum meanings (single, compound, group), the update requirement to send full payload, and the entry_id scope for files. This provides meaningful context beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages manual accounting entries and their attached files, listing all 9 actions with specific verbs (list, create, update, delete, get file, etc.). It distinguishes entry-level vs file-level operations and mentions the API version, providing precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use entry_id vs not for file actions, and notes that locked entries cannot be edited. However, it does not explicitly compare this tool to sibling tools like bexio_bills or bexio_accounting, which handle similar accounting data. The domain is implicit from the title and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_master_databexio Master DataADestructive
Manage small bexio master-data lookup resources. Choose a "resource" and an "action". Resources and their supported actions: salutations, titles, units — list, search, get, create, update, delete (payload: {name}); countries — list, search, get, create, update, delete (payload: {name, name_short, iso3166_alpha2}); languages, payment_types, communication_types — list, search only (read-only); business_activities — list, search, create (payload: {name, default_is_billable?, default_price_per_hour?, account_id?}). Actions: "list" (optional limit/offset; order_by fields "id"/"name" for titles, countries, languages, payment_types, business_activities and communication_types — countries and payment_types also "name_short"; salutations and units do not support order_by), "search" (search_criteria required; searchable fields: "name" everywhere, countries also "name_short"/"iso3166_alpha2", languages also "iso_639_1"), "get" (id required), "create" (payload required; see per-resource shapes above), "update" (id + payload of fields to change), "delete" (id required — permanently deletes the entry, cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Entry id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform (not every resource supports every action; see description) | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Entry fields. Required on create: name (all resources); countries additionally require name_short and iso3166_alpha2. Business activities may also set default_is_billable, default_price_per_hour, account_id. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| resource | Yes | Master-data resource to operate on | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that delete is permanent ('cannot be undone'), matches annotations (destructiveHint: true). Also notes read-only resources. Adds value beyond annotations by detailing ordering behavior and search constraints. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with bullet-like lists for resources and actions, but somewhat lengthy due to comprehensive detail. Front-loaded with purpose and resource overview. Nearly every sentence adds value, though could be slightly trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, nested objects, no output schema), the description covers all necessary aspects: action rules, payload shapes, search criteria, ordering, pagination. Complete enough for an AI to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds substantial extra meaning: per-resource payload shapes, which fields are required on create, which resources support order_by and which fields, searchable fields per resource. Greatly enhances parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool manages 'small bexio master-data lookup resources' and lists all resources and actions. Distinguishes from sibling tools by focusing on master data rather than accounting, contacts, invoices, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides detailed guidance on which resources support which actions (e.g., 'languages, payment_types, communication_types — list, search only'), explains ordering options per resource, and searchable fields. Lacks explicit when-not-to-use or alternatives but the context is clear from the resource list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_notesbexio NotesADestructive
Manage notes in bexio (short annotations linked to a user and optionally a contact, project or module entry). Actions: "list" (all notes, optional limit/offset), "search" (search_criteria required; searchable fields: event_start, contact_id, user_id, subject, module_id, entry_id), "get" (note by id), "create" (payload required: user_id, event_start, subject; optional info, contact_id, project_id, pr_project_id, entry_id, module_id), "update" (id + payload of fields to change), "delete" (permanently delete a note by id — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Note fields. Required on create: user_id, event_start, subject. | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by detailing the permanence of delete ('cannot be undone') and noting that search returns results based on criteria. Annotations already indicate destructiveHint=true, readOnlyHint=false, and idempotentHint=false. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the overall purpose and action list. Each sentence adds necessary detail. It could be slightly tighter but remains well-structured and informative without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers all actions and their parameter requirements. It explains pagination (limit/offset) and search criteria structure. It could mention return format, but the action names imply expected outputs (list returns array, get returns object).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by grouping required fields per action (e.g., 'Required on create: user_id, event_start, subject') and listing searchable fields for the search action. This provides meaning beyond the schema's individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages notes in bexio and enumerates six specific actions (list, search, get, create, update, delete). It distinguishes notes as 'short annotations linked to a user and optionally a contact, project or module entry', which differentiates it from other bexio entity tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit parameter requirements per action (e.g., 'id required for get/update/delete', 'payload required on create: user_id, event_start, subject'). It warns that delete is permanent. While it doesn't explicitly exclude alternatives, the action list and sibling tool names provide sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_ordersbexio OrdersADestructive
Manage sales orders (kb_order) including recurring-order repetitions and documents derived from an order. Actions: "list" (all orders, optional limit/offset/order_by: id, total, total_net, total_gross, updated_at), "search" (search_criteria required; supported fields: id, kb_item_status_id (5 Pending, 6 Done, 15 Partial, 21 Canceled), document_nr, title, contact_id, contact_sub_id, user_id, currency_id, total_gross, total_net, total, is_valid_from, is_valid_to, updated_at), "get" (order by id, includes positions), "create" (payload; no field is formally required but usually at least contact_id and user_id; positions may be included), "update" (id + payload of fields to change; positions cannot be updated here), "delete" (permanently delete the order by id — cannot be undone), "pdf" (render the order as PDF; optional logopaper for letterhead, optional save_path to write to disk), "get_repetition" (show the recurring-order configuration), "edit_repetition" (id + repetition payload: start, optional end, repetition rule of type daily/weekly/monthly/yearly), "delete_repetition" (stop the recurring order — cannot be undone), "create_delivery" (create a delivery note from the order; optional positions array, omit to copy all positions), "create_invoice" (create an invoice from the order; optional positions array, omit to copy all positions).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Order id (required for every action except "list", "search" and "create") | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Order fields. The API marks no field as strictly required on create, but at least contact_id and user_id are typically needed. Updates cannot change positions (use the document-positions tool). | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| logopaper | No | For "pdf": render the PDF on the letterhead paper | |
| positions | No | Positions to copy into the new document; omit to copy ALL positions from the order | |
| save_path | No | For "pdf": write the PDF to this file path instead of returning base64 inline | |
| repetition | No | Recurring-order configuration. Required: start, repetition (end may be null for indefinite runs). | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description warns about irreversible actions ('cannot be undone' for delete and delete_repetition) and mentions limitations (positions cannot be updated). This adds valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but somewhat lengthy, listing all actions with details. While structured and front-loaded, some redundancy exists (e.g., repeating 'cannot be undone'). Could be trimmed for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, nested objects, no output schema), the description covers key constraints, action-specific notes, and edge cases. It is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the description adds crucial nuances: e.g., 'no field is formally required but usually at least contact_id and user_id', and details the repetition object structure. This goes beyond the schema's base definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages sales orders (kb_order) and enumerates all specific actions (list, search, get, create, etc.), making the purpose unambiguous and distinguishing it from sibling tools like bexio_document_positions or bexio_invoices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for each action, e.g., 'positions cannot be updated here' and 'delete permanently'. However, it does not explicitly tell when to use alternative tools (e.g., bexio_document_positions for updating positions), leaving room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_outgoing_paymentsbexio Outgoing PaymentsADestructive
Manage outgoing payments for purchase bills (bexio purchase 4.0 API). Payment ids are UUID strings. Actions: "list" (bill_id required — lists the payments of one bill; optional limit/page/order asc|desc/sort), "get" (payment by id), "create" (payload required: bill_id, payment_type IBAN|MANUAL|CASH_DISCOUNT|QR, execution_date, amount, currency_code, exchange_rate, is_salary_payment; IBAN/MANUAL/QR also need sender_bank_account_id and IBAN/QR need sender/receiver bank details; the bill must not be a draft and amount must not exceed its pending_amount), "update" (id or payload.payment_id + payload; note the API takes the payment id in the request body, not the URL; editable fields: execution_date, amount, is_salary_payment, fee_type, reference_no, message and receiver address fields), "delete" (id; permanently deletes the payment — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Outgoing payment id (UUID; required for get/update/delete) | |
| page | No | Page number for "list" | |
| sort | No | Field to sort by for "list" | |
| limit | No | Results per page for "list" | |
| order | No | Sorting order for "list" | |
| action | Yes | Operation to perform | |
| bill_id | No | Bill id whose payments to list (required for "list") | |
| payload | No | Outgoing payment fields. Required on create: bill_id, payment_type, execution_date, amount, currency_code, exchange_rate, is_salary_payment (plus sender_bank_account_id for IBAN/MANUAL/QR and sender/receiver details for IBAN/QR). Required on update: payment_id (or "id" argument), execution_date, amount, is_salary_payment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, and the description reinforces this by stating 'delete permanently deletes the payment — cannot be undone'. It also discloses non-obvious behavior: for update, the API takes the payment id in the request body, not the URL. This adds valuable context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-organized: it starts with the overall purpose, lists actions with sub-requirements, and uses parenthetical notes. Each sentence adds necessary detail given the tool's complexity. Could be slightly more concise but earns a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers all actions, input parameters, constraints, and edge cases. It explains validation rules and per-action requirements thoroughly, making it a complete reference for the tool's usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds significant value by summarizing required fields per action, clarifying which fields are allowed or disallowed per payment type, and noting API quirks. This goes well beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages outgoing payments for purchase bills and lists five specific actions (list, get, create, update, delete). It includes the API version and notes that payment ids are UUID strings. This differentiates it from sibling tools like bexio_banking_payments and bexio_bills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for each action, including required parameters and constraints (e.g., bill must not be a draft for create, amount must not exceed pending_amount, validation on payment types). It does not explicitly exclude alternatives but the detail is sufficient for an agent to choose the correct action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_payrollbexio PayrollADestructive
Manage bexio payroll (4.0 API): employees, their absences and paystub PDFs. Employee and absence ids are UUID strings. Select a "resource" and an "action". Resource "employees": "list" (all active employees, no arguments), "get" (employee_id + date — the employee's state on that ISO date, includes vacation days used/left), "create" (payload; required: ahv_number; useful fields: first_name, last_name, email, nationality, marital_status, gender, date_of_birth, address, language, iban, annual_vacation_days), "update" (employee_id + payload; PATCH — send only the fields to change; the API spec also marks ahv_number required here, so include it if a partial update is rejected). Resource "absences": "list" (employee_id + year — absences of the employee in that business year), "get" (employee_id + absence_id), "create" (employee_id + payload; required: reason, start_date; reasons: Injury, Sickness, MaternityLeave, MilitaryLeave, Vacation, InterruptionOfWork), "update" (employee_id + absence_id + payload; PUT — the API requires the full absence object), "delete" (employee_id + absence_id — permanently deletes the absence, cannot be undone). Resource "paystubs": "download_pdf" (employee_id + year + month — downloads the paystub PDF; use save_path to write it to disk), "get" (employee_id + year + month — DEPRECATED endpoint returning the URI of the generated PDF; prefer "download_pdf").
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO 8601 date of the employee's state (required by the API for employees "get") | |
| year | No | Business year for absences "list"; calendar year for paystub actions | |
| month | No | Month (1-12) for paystub actions | |
| action | Yes | Operation to perform. employees: list/get/create/update; absences: list/get/create/update/delete; paystubs: download_pdf/get (deprecated) | |
| payload | No | Entity fields for create/update; use the fields matching the selected resource. Employees — required on create: ahv_number (the API spec also marks ahv_number required on the update PATCH, though updates normally send only the fields to change). Absences — required on create: reason, start_date; absence "update" uses PUT — the API requires the FULL object (reason, start_date, end_date, half_day, continued_pay, disability, paid_hours). | |
| resource | Yes | Payroll resource to operate on | |
| save_path | No | For "download_pdf": write the PDF to this file path instead of returning base64 inline | |
| absence_id | No | Absence UUID (required for absences get/update/delete) | |
| employee_id | No | Employee UUID (required for all actions except employees list/create) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true, readOnlyHint=false), the description discloses PATCH vs PUT behavior, deprecated endpoints, required fields for create, and that deletion is permanent, providing essential behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is thorough but well-structured by resource and action. It is slightly verbose but each sentence adds value; could benefit from tighter phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested objects, multiple CRUD operations), the description covers all necessary aspects: resource-specific actions, required fields, API behaviors (PATCH/PUT), deprecated endpoints, and output expectations (PDF download). No missing critical information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds critical meaning: which parameters apply to which resource/action, required vs optional fields, and special cases like ahv_number both on create and update, and full-object requirement for absence update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Manage bexio payroll (4.0 API): employees, their absences and paystub PDFs,' clearly defining the tool's scope and distinguishing it from sibling tools like bexio_accounting or bexio_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description details when to use each resource and action, including API specifics (PATCH vs PUT) and deletion irreversibility, but does not explicitly contrast usage with sibling tools, though domain implicitly differentiates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_project_planningbexio Project PlanningADestructive
Manage milestones and work packages of a project (bexio 3.0 API). Set "resource" to "milestones" or "work_packages"; project_id is always required. A milestone has a name, end date, comment and optional parent milestone; a work package has a name, spent/estimated time in hours, comment and optional milestone link. Actions: "list" (all milestones/work packages of the project; optional limit/offset), "get" (id required), "create" (payload required; name is the only required field), "update" (id + payload of fields to change; work package updates are partial PATCHes, milestone updates are POSTs), "delete" (id required — permanently deletes the milestone/work package, cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Milestone or work package id (required for get/update/delete) | |
| limit | No | Max results for "list" (max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Results to skip for "list" (pagination) | |
| payload | No | Milestone or work package fields (depending on "resource"). Required on create: name. end_date/pr_parent_milestone_id apply to milestones; spent_time_in_hours/estimated_time_in_hours/pr_milestone_id apply to work packages. | |
| resource | Yes | Sub-resource of the project to operate on | |
| project_id | Yes | Id of the project the milestones/work packages belong to (always required) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it mentions that delete is permanent, work package updates are partial PATCHes while milestone updates are POSTs, and list supports pagination with limit/offset. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative and front-loaded with the core purpose, but it is somewhat lengthy and mixes multiple pieces of information in a single paragraph. A more structured format could improve readability, but it avoids wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, nested objects, multiple resources and actions), the description covers behavior well. It does not explain return values or list results format, but for a CRUD-like tool this is acceptable. The annotations and schema provide additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description groups fields by resource type and explains which fields apply to milestones vs. work packages. It clarifies that name is the only required field on create, and that payload is structured accordingly. This adds significant meaning beyond the schema's individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages milestones and work packages of a project using the bexio 3.0 API, with specific verbs and resource names. It distinguishes from sibling tools by specifying the project-planning sub-resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains how to set the resource, action, and project_id parameters, and outlines the required payload fields for each action. It does not explicitly state when not to use this tool, but the specificity is sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_projectsbexio ProjectsADestructive
Manage projects (bexio 2.0 API). A project has a name, status, type, customer contact, responsible user, optional dates, and optional invoice/budget settings. Actions: "list" (all projects; optional limit/offset/order_by, order_by supports "id"/"name" plus "_desc"), "search" (search_criteria required, AND-combined; searchable fields include name, contact_id, pr_state_id, pr_project_type_id, start_date, end_date, user_id; optional limit/offset/order_by), "get" (id required), "create" (payload required with name, pr_state_id, pr_project_type_id, contact_id, user_id), "update" (id + payload of fields to change), "delete" (id required — permanently deletes the project, cannot be undone), "archive" / "unarchive" (id required; archiving hides the project without deleting it), "list_statuses" (all project statuses, for pr_state_id), "list_types" (all project types, for pr_project_type_id; optional order_by).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Project id (required for get/update/delete/archive/unarchive) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Project fields. Required on create: name, pr_state_id, pr_project_type_id, contact_id, user_id. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description discloses critical behavioral details: delete 'permanently deletes the project, cannot be undone', archive 'hides without deleting', and create requires specific fields. It also lists searchable fields and notes that search criteria are AND-combined. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured by action, using a compact format with parentheses for details. It is relatively long but every sentence contributes useful information. It could be slightly more concise, but the organization is clear and front-loaded with the overall purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (10 actions, nested objects, 7 parameters), the description covers most aspects thoroughly: actions, required fields, searchable fields, ordering, and idempotency notes for delete/archive. However, it lacks information about the return value format (e.g., what fields are returned for list/get) and does not mention pagination details beyond limit/offset. This is a gap since no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100% (baseline 3), the description adds significant meaning: it explains that order_by supports '_desc' suffix, that searchable fields include name/contact_id/etc., that search criteria are AND-combined, and that payload required fields for create are name, pr_state_id, etc. It also clarifies special cases like document_nr usage. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool manages projects via the bexio 2.0 API and lists all possible actions (list, search, get, create, update, delete, archive, unarchive, list_statuses, list_types). It also describes what a project consists of (name, status, type, etc.). This distinguishes it from sibling tools like bexio_tasks or bexio_timesheets by focusing exclusively on project entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance for each action, including required parameters (e.g., id for get/update/delete/archive/unarchive, payload for create). It explains when to use 'archive' vs 'delete' (hides vs permanently deletes). However, it does not compare this tool to other bexio tools or state when not to use it, which would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_purchase_ordersbexio Purchase OrdersADestructive
Manage purchase orders (bexio 3.0 API; numeric ids). Status (kb_item_status_id) is read-only: 22 Draft, 23 Open, 24 Partly, 25 Done, 26 Canceled. Actions: "list" (optional limit/offset and order_by: id, total, total_net, total_gross or updated_at; append "_desc" for descending), "get" (purchase order by numeric id), "create" (payload; all fields optional but typically contact_id, user_id and positions grouped as required/optional/discount arrays), "update" (id + payload of fields to change; positions are create-only — the update endpoint does not accept them and they are not sent), "delete" (id; permanently deletes the purchase order — cannot be undone).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Purchase order id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Purchase order fields (bexio 3.0 API; all fields optional — bexio applies defaults). Typically set at least contact_id, user_id and positions on create. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes read-only status field, destructive deletion ('permanently deletes — cannot be undone'), and that update does not accept positions, adding context beyond annotations. Annotations include destructiveHint: true, consistent with the description. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but somewhat lengthy. However, it is front-loaded with core info (API, status, actions) and each sentence adds value. Minor redundancy (e.g., 'positions are create-only' mentioned twice). Still, overall structure is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, nested payload, no output schema), the description covers actions, parameters, and constraints thoroughly. However, it does not describe the return value format (e.g., a purchase order object) which would be helpful since no output schema exists. Otherwise, it is comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value: clarifies order_by fields and '_desc' suffix, notes payload fields typically required, explains status values (22 Draft, etc.), and specifies that positions are create-only. The description goes well beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages purchase orders, specifies the API version (bexio 3.0), numeric ids, and enumerates all five actions (list, get, create, update, delete) with distinct details, distinguishing it from siblings like bexio_invoices or bexio_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is explicitly described with its required parameters (e.g., get requires id, list uses limit/offset). Constraints like status being read-only, positions not accepted in update are noted. However, no explicit guidance on when to prefer this tool over siblings (e.g., bexio_orders for sales orders, bexio_invoices for invoices).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_quotesbexio QuotesADestructive
Manage quotes/offers (bexio 2.0 kb_offer API). Status flow: 1 Draft -> 2 Pending (issued) -> 3 Confirmed / 4 Declined. Actions: "list" (all quotes; optional limit/offset/order_by — order_by one of id, total, total_net, total_gross, updated_at), "search" (search_criteria required, AND-combined; useful fields: id, kb_item_status_id, document_nr, title, contact_id, user_id, currency_id, total, is_valid_from, is_valid_until, updated_at), "get" (id), "create" (payload; typically contact_id, user_id, positions; document_nr only if automatic numbering is off), "update" (id + payload with fields to change), "delete" (id — permanently deletes the quote, cannot be undone), "issue" (id — moves a draft to pending and makes it visible to workflows), "revert_issue" (id — back to draft), "accept" (id), "decline" (id), "reissue" (id), "mark_as_sent" (id — flags as sent without emailing), "send" (id + email with recipient_email/subject/message, optional mark_as_open/attach_pdf; message must contain "[Network Link]"; emails the quote to the customer), "copy" (id + copy with contact_id required, optional contact_sub_id, is_valid_from, pr_project_id, title — returns the new quote), "pdf" (id; optional logopaper for letterhead and save_path to write the PDF to disk), "create_invoice" (id; optional positions to take over a subset — omit for all; returns the new invoice), "create_order" (id; optional positions — omit for all; returns the new order).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Quote id (required for every action except "list", "search" and "create") | |
| copy | No | Copy parameters for "copy" | |
| No | Email parameters for "send" | ||
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Quote fields for "create"/"update" | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| logopaper | No | For "pdf": render the PDF on the letterhead paper | |
| positions | No | For "create_invoice"/"create_order": source positions to take over; omit to take all | |
| save_path | No | For "pdf": write the PDF to this file path instead of returning base64 inline | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: discloses that 'delete' is permanent, 'send' sends an email, 'pdf' can write to disk, and notes limitations like trial period email restriction. Also explains that 'viewed_by_client_at' is normally set by bexio. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized with a status flow overview followed by action bullet points. While lengthy (17 actions), each sentence is informative and the structure is clear. No fluff, but could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 17 actions and nested parameters, the description covers all necessary context: status flow, action-specific requirements, parameter constraints, and edge cases. No output schema exists, but return values are implied by actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds value: lists useful search fields, explains position variants and max count, clarifies document_nr logic, and describes edge cases like 'viewed_by_client_at' writability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Manage quotes/offers' and lists 17 distinct actions, each with a specific verb-resource combination. The resource is unambiguously quotes, distinguishing it from sibling tools like invoices or orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Detailed guidance for each action, including prerequisites (e.g., document_nr only when automatic numbering is off) and constraints (e.g., message must contain '[Network Link]'). However, it does not explicitly contrast with alternatives like bexio_invoices, though the tool name and sibling list make the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_stockbexio Stock Locations & AreasARead-onlyIdempotent
Read stock locations and stock areas (both are simple id/name records; items reference them via stock_id and stock_place_id). All actions require the stock_edit scope. Actions: "list_locations" (all stock locations, optional limit/offset/order_by; order by "id" or "name"), "search_locations" (search_criteria required; searchable fields: name, id), "list_areas" (all stock areas, optional limit/offset/order_by; order by "id" or "name"), "search_areas" (search_criteria required; searchable fields: name, id). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive; description adds that actions require 'stock_edit' scope and details each action's behavior, including searchable fields and ordering options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Actions and parameters described compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers actions, pagination, ordering, search, and scope. No output schema, but describes return as 'simple id/name records'. Lacks details on default limit but schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions; description adds specific searchable fields ('name, id') and valid order_by values, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specifies verb 'Read' and resources 'stock locations and stock areas'. Distinguishes from sibling tools by domain and lists four concrete actions. Clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives among siblings. Prerequisite scope is stated, but no when-to-use or when-not-to-use comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_tasksbexio TasksADestructive
Manage tasks/todos in bexio (assigned to a user, with status, priority, due date and optional contact/project links). Actions: "list" (all tasks, optional limit/offset/order_by with order_by "id" or "finish_date"), "search" (search_criteria required; searchable fields: subject, updated_at, user_id, contact_id, todo_status_id, module_id, entry_id), "get" (task by id), "create" (payload required: user_id, subject; use todo_status_id/todo_priority_id from list_statuses/list_priorities), "update" (id + payload of fields to change), "delete" (permanently delete a task by id — cannot be undone), "list_priorities" (all task priorities, order_by "id" or "name"), "list_statuses" (all task statuses, order_by "id" or "name").
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Task id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Task fields. Required on create: user_id, subject. | |
| order_by | No | Sort field: "id" or "finish_date" for list/search, "id" or "name" for list_priorities/list_statuses; append "_desc" for descending | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true, and the description confirms that delete is permanent and cannot be undone. It also details that create requires specific fields. No additional behavioral traits beyond what annotations already provide are disclosed, but the description does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly concise given the complexity of eight actions and many parameters. It front-loads the general purpose and then details each action. Some redundancy exists (e.g., repeating 'order_by' for different actions), but overall it's well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action tool with no output schema, the description is complete. It covers all eight actions, their required/optional parameters, and cross-references to other tools (list_statuses, list_priorities). The agent can correctly select and invoke the tool based on this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds some context, e.g., for search it lists searchable fields, and for create it notes required payload fields. However, it does not elaborate on parameters like info, place, or sub_contact_id beyond what the schema already describes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages tasks/todos in bexio and enumerates eight specific actions (list, search, get, create, update, delete, list_priorities, list_statuses). It distinguishes itself from sibling tools like bexio_contacts or bexio_projects by focusing on task management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides detailed guidance per action: for search, it specifies search_criteria required; for create, it lists required fields (user_id, subject) and references list_statuses/list_priorities for status/priority IDs. It also explains order_by options. However, it doesn't explicitly state when to avoid certain actions or when to use alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_timesheetsbexio TimesheetsADestructive
Manage timesheets (time tracking entries) in bexio. Actions: "list" (all timesheets, optional limit/offset/order_by; order_by supports id, date), "search" (search_criteria required; searchable fields: id, client_service_id, contact_id, user_id, pr_project_id, status_id), "get" (timesheet by numeric id), "create" (payload required: user_id, client_service_id, allowable_bill, tracking; tracking is either { type: "duration", date, duration } or { type: "range", start, end }), "update" (id + payload of fields to change), "delete" (permanently delete a timesheet by id — cannot be undone), "list_statuses" (all timesheet statuses, e.g. "In Progress"; optional limit/offset/order_by with id, name). Read timesheets may also contain a tracking of type "stopwatch" (created via the bexio UI).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Timesheet id (required for get/update/delete) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Timesheet fields. Required on create: user_id, client_service_id, allowable_bill, tracking. | |
| order_by | No | Field to order by; append "_desc" for descending (e.g. "id_desc") | |
| search_criteria | No | Search conditions, combined with logical AND |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description adds behavioral context beyond annotations: delete is 'permanently delete ... cannot be undone', and read timesheets may contain 'stopwatch' tracking from UI. Annotations already signal destructiveHint=true, so the description reinforces and adds detail. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is densely packed with information in a well-organized list format, front-loading the overall purpose. Every sentence is necessary and informative, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description covers all main actions and their constraints (required fields, pagination via limit/offset, order_by syntax, search criteria operators). It does not describe return values explicitly, but for a management tool with multiple actions, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, baseline is 3. The description adds value by specifying searchable fields, required payload fields for create, and the tracking object's two variants (duration vs range) with examples. This supplements the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it manages timesheets (time tracking entries) in bexio and enumerates all supported actions (list, search, get, create, update, delete, list_statuses). This specific verb-resource pairing distinguishes it clearly from sibling tools like bexio_projects or bexio_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for each action: e.g., 'list' returns all timesheets, 'search' requires search_criteria with specified searchable fields, 'create' requires certain payload fields. However, it does not compare this tool to siblings or state when not to use it, which is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bexio_usersbexio UsersADestructive
Read bexio users and manage fictional users (fictional users appear in dropdowns but cannot log in). Actions: "list" (all users, optional limit/offset), "get" (user by id), "me" (the user authenticated by the current token), "list_fictional" (all fictional users, optional limit/offset), "get_fictional" (fictional user by id), "create_fictional" (payload required: salutation_type, firstname, lastname, email; optional title_id), "update_fictional" (id + payload of fields to change), "delete_fictional" (permanently delete a fictional user by id — cannot be undone), "permissions" (activated components and the full permission map of the logged-in user). Regular users are read-only via the API; only fictional users can be created, updated or deleted. is_superadmin/is_accountant are only included when the authenticated user is a superadmin.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | User id (required for "get") or fictional user id (required for get/update/delete_fictional) | |
| limit | No | Maximum number of results (default 500, max 2000) | |
| action | Yes | Operation to perform | |
| offset | No | Number of results to skip (pagination) | |
| payload | No | Fictional user fields. Required on create: salutation_type, firstname, lastname, email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true), the description warns that deletion cannot be undone and notes that certain fields (is_superadmin/is_accountant) are only returned for superadmins. It also explains that fictional users appear in dropdowns but cannot log in, adding valuable behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with action names in quotes for easy scanning. It front-loads the main purpose and then enumerates actions. While slightly lengthy, it avoids redundancy and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple actions, 5 parameters, no output schema), the description is fairly complete. It covers all actions, their requirements, pagination limits, and behavioral notes. It could detail return values for specific actions (e.g., what 'me' returns), but overall it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds value by summarizing required payload fields for create_fictional (salutation_type, firstname, lastname, email) and clarifying that title_id is optional. It also explains the conditional inclusion of admin fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies all actions (list, get, me, list_fictional, get_fictional, create_fictional, update_fictional, delete_fictional, permissions) and distinguishes between regular users (read-only) and fictional users (CRUD). This specificity differentiates it from sibling tools like bexio_contacts or bexio_master_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use each action (e.g., regular users are read-only, fictional users can be modified) and mentions optional parameters for pagination. However, it does not explicitly state when not to use this tool versus alternatives or provide direct comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
35 tool updates
v0.2.0- First observed
bexio_accounting - First observed
bexio_additional_addresses - First observed
bexio_bank_accounts - First observed
bexio_banking_payments - First observed
bexio_bills - First observed
bexio_company_profile - First observed
bexio_contact_groups - First observed
bexio_contact_relations - First observed
bexio_contact_sectors - First observed
bexio_contacts - First observed
bexio_currencies - First observed
bexio_deliveries - First observed
bexio_document_comments - First observed
bexio_document_positions - First observed
bexio_document_settings - First observed
bexio_expenses - First observed
bexio_files - First observed
bexio_invoice_payments - First observed
bexio_invoice_reminders - First observed
bexio_invoices - First observed
bexio_items - First observed
bexio_manual_entries - First observed
bexio_master_data - First observed
bexio_notes - First observed
bexio_orders - First observed
bexio_outgoing_payments - First observed
bexio_payroll - First observed
bexio_project_planning - First observed
bexio_projects - First observed
bexio_purchase_orders - First observed
bexio_quotes - First observed
bexio_stock - First observed
bexio_tasks - First observed
bexio_timesheets - First observed
bexio_users
TDQS
Each tool is focused on a distinct subdomain (e.g., contacts, invoices, projects) with clear descriptions of their actions and resources. There is minimal overlap, and potential confusion between similar tools like outgoing_payments and banking_payments is resolved by explicit explanations in the descriptions.
All tool names follow a consistent pattern of 'bexio_<domain>' using snake_case. There is no mixing of conventions, and the domain names are descriptive and uniform, making the tool set predictable and easy to navigate.
With 35 tools, the server is on the larger side, but given the comprehensive nature of the bexio ERP (covering accounting, sales, purchasing, projects, payroll, etc.), the number is justified. Each tool corresponds to a meaningful functional area, and the count does not feel excessive.
The tool surface covers the major aspects of bexio, including core business processes and master data. Minor gaps exist (e.g., no dedicated tool for discounts or tax rates beyond accounting), but the overall coverage is thorough and supports most common workflows.
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 Connectors
An MCP server that provides access to Testiny projects, test cases and test runs
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
MCP server that delivers up-to-date Bitrix24 REST API documentation.
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceComplete 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.29MIT
- AlicenseBqualityCmaintenanceMCP server for smallinvoice.ch — Swiss SME invoicing and accounting with 146 tools and OAuth2 BYOC authentication.10020MIT

freelo-mcp-serverofficial
AlicenseNot gradedqualityDmaintenanceMCP server for Freelo project management API, enabling task, project, and time tracking management. Features 33 curated tools, readonly mode, and audit logging.MIT- AlicenseAqualityCmaintenanceA standalone MCP server for the bexio REST API, enabling interaction with bexio resources like contacts, invoices, and projects through natural language from any MCP client.2121MIT
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/nolen-ai/bexio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server