buchpilot-mcp
Can be used with n8n-nodes-buchpilot for sevDesk backend support, extending accounting automation capabilities beyond the current Lexoffice integration.
BuchPilot MCP Server
MCP Server for DACH accounting — manage contacts, invoices, vouchers, and quotes directly from Claude, Cursor, or any MCP-compatible client.
What is this?
BuchPilot MCP is a Model Context Protocol server that connects your accounting system (currently Lexoffice) with AI assistants. You can create invoices, manage contacts, and check overdue payments using natural language — directly in Claude Desktop, Cursor, or any other MCP client.
Related MCP server: @centry-digital/bukku-mcp
Features
15 tools for complete accounting automation
Contacts: create, retrieve, list, update
Invoices: create, retrieve, list, update, download PDF
Vouchers: create, retrieve, list (incoming invoices, credit notes)
Quotes: create, retrieve
Overdue invoices: with amounts and days overdue
Backend architecture — currently Lexoffice, extensible for sevDesk, Billomat, etc.
Plugin-ready — can integrate E-Invoice MCP tools (
einvoice-mcp)No database, no state — pure API proxy
Installation
Prerequisites
Node.js >= 18
A Lexoffice account with an API key
npm (global)
npm install -g buchpilot-mcpFrom source
git clone https://github.com/makririch/buchpilot-mcp.git
cd buchpilot-mcp
npm install
npm run buildConfiguration
Create a configuration file .buchpilot.json in one of the following locations:
Path from environment variable
BUCHPILOT_CONFIG~/.buchpilot.json(home directory)./.buchpilot.json(current directory)
Content of .buchpilot.json
{
"backends": {
"lexoffice": {
"api_key": "DEIN_LEXOFFICE_API_KEY"
}
},
"default_backend": "lexoffice"
}Create Lexoffice API key
Go to Lexoffice Public API
Click on Create API key
Copy the key and paste it into
.buchpilot.json
Security note: Never store the API key in Git. Add
.buchpilot.jsonto your.gitignore.
Usage
Start server (standalone)
# Nach npm install -g:
buchpilot-mcp
# Oder von Source:
npm start
# Entwicklung mit Auto-Reload:
npm run devThe server runs via stdio and waits for MCP messages.
Use in Claude Desktop
See Claude Desktop Setup Guide for detailed instructions.
Quick version — add to claude_desktop_config.json:
{
"mcpServers": {
"buchpilot": {
"command": "npx",
"args": ["-y", "buchpilot-mcp"],
"env": {
"BUCHPILOT_CONFIG": "/Users/DEIN_NAME/.buchpilot.json"
}
}
}
}Examples (natural language in Claude)
After configuring the server, you can ask Claude, for example:
"Create a contact for the company Beispiel GmbH with the email info@beispiel.de"
"Show me all open invoices"
"Create an invoice for contact XYZ: 10 hours of consulting at 150 EUR each"
"Which invoices are overdue?"
"Download the PDF for invoice ABC"
"Create a quote for 5 licenses at 49 EUR/month"
Tool Reference
A full reference of all 15 tools with parameters, example inputs, and example outputs can be found in docs/tool-reference.md.
Quick Overview
Tool | Description |
| Create a new contact (person or company) |
| Retrieve contact by ID |
| List contacts with filters |
| Update contact |
| Create a new invoice with line items |
| Retrieve invoice by ID |
| List invoices (filterable by status) |
| Download invoice as PDF (Base64) |
| Update draft invoice |
| Create a new voucher |
| Retrieve voucher by ID |
| List vouchers |
| Create a new quote with line items |
| Retrieve quote by ID |
| Overdue invoices with analysis |
E-Invoice Integration
BuchPilot MCP can optionally integrate the E-Invoice MCP package to generate XRechnung and ZUGFeRD directly from the accounting system:
// In deinem eigenen MCP-Server:
import { registerEInvoiceTools } from "einvoice-mcp";
registerEInvoiceTools(server);
// Ergebnis: 15 + 4 = 19 ToolsFAQ / Troubleshooting
"No .buchpilot.json found"
The server cannot find a configuration file. Create a .buchpilot.json in your home directory:
echo '{"backends":{"lexoffice":{"api_key":"DEIN_KEY"}},"default_backend":"lexoffice"}' > ~/.buchpilot.json"401 Unauthorized" with Lexoffice
Is the API key correct in
.dachflow.json?Is the key still active? Check under Lexoffice Public API
API keys can expire — create a new one if necessary
"429 Too Many Requests"
Lexoffice allows a maximum of 2 requests per second. If you perform many operations in succession, wait a moment between requests.
Server starts, but Claude does not recognize the tools
Check if
claude_desktop_config.jsonis correctRestart Claude Desktop after configuration changes
Check the logs:
~/Library/Logs/Claude/mcp.log(macOS)
Invoice cannot be updated
Only invoices with the status draft can be updated. Finalized invoices are immutable.
Backend "sevDesk" not available
Currently, only Lexoffice is supported as a backend. sevDesk support is planned. You can use the n8n nodes (n8n-nodes-buchpilot) for sevDesk.
License
MIT — Free to use, including commercially.
Author
MaKri — GitHub
Available Tools
15 toolscreate_contactB
Erstellt einen neuen Kontakt (Person oder Firma) im Buchhaltungssystem. Creates a new contact (person or company).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Kontakttyp: Person oder Firma | |
| name | Yes | Nachname (Person) oder Firmenname (Firma) | |
| firstName | No | Vorname (nur bei Person) | |
| No | E-Mail-Adresse | ||
| role | No | Rolle: Kunde, Lieferant, oder beides | customer |
| backend | No | Backend (z.B. 'lexoffice'). Leer = default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states 'creates' without mentioning idempotency, duplicate handling, or return behavior (e.g., whether it returns the created contact ID). This leaves the agent uncertain about the tool's side effects.
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 very short (two sentences) and front-loaded with the key action. The bilingual repetition is slightly redundant but not excessive. Overall 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?
No output schema exists, so the description should explain what the tool returns (e.g., created contact ID). It does not. For a tool with 6 parameters, the description is too sparse to be fully 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 description coverage is 100%, so baseline is 3. The description does not add any additional meaning beyond what the schema already provides for each parameter, such as format constraints or usage hints.
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 explicitly states the tool creates a new contact (person or company) in the accounting system, using a specific verb and resource. It clearly distinguishes from sibling tools like create_invoice and update_contact.
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 guidance on when to use this tool versus alternatives like update_contact or list_contacts. The agent gets no context about prerequisites or typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_invoiceB
Erstellt eine neue Rechnung mit Positionen. Creates a new invoice with line items.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Kontakt-ID des Rechnungsempfaengers | |
| date | Yes | Rechnungsdatum (ISO 8601, z.B. 2026-03-18) | |
| lineItems | Yes | Rechnungspositionen | |
| title | No | Rechnungstitel | |
| introduction | No | Einleitungstext | |
| remark | No | Schlusstext | |
| currency | No | Waehrung | EUR |
| finalize | No | Rechnung direkt finalisieren (nicht mehr editierbar) | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for behavioral disclosure. It only mentions creation without addressing side effects like finalization (non-editable), permissions, or reversibility. The 'finalize' parameter's impact is not described.
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 brief but repeats the same purpose in two languages unnecessarily, wasting space. It could be more concise by using one language. Front-loading is adequate.
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 (9 parameters, no output schema, no annotations), the description is too minimal. It does not explain return value, side effects, or required relationships (e.g., contact must exist). Incomplete for effective use.
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 89% schema description coverage, the schema already documents most parameters. The description adds no extra meaning beyond what the schema provides, achieving the baseline of 3.
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 verb 'creates' and the resource 'invoice', specifying 'with line items' which distinguishes it from sibling tools like create_quotation or create_voucher. The purpose is 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?
The description implies usage for creating invoices but does not explicitly state when to use this tool versus alternatives like create_quotation. No guidance on prerequisites or when not to use is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_quotationB
Erstellt ein neues Angebot mit Positionen. Creates a new quotation with line items.
| Name | Required | Description | Default |
|---|---|---|---|
| contactId | Yes | Kontakt-ID | |
| date | Yes | Angebotsdatum (ISO 8601) | |
| lineItems | Yes | Angebotspositionen | |
| expirationDate | No | Gueltig bis (ISO 8601) | |
| title | No | Angebotstitel | |
| introduction | No | Einleitungstext | |
| remark | No | Schlusstext | |
| finalize | No | Angebot direkt finalisieren | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only says 'creates a new quotation' but does not disclose side effects, authentication needs, or what happens when finalize is true. For a creation tool, this is insufficient.
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 short (two sentences), but it repeats the same information in two languages unnecessarily. It is concise but not optimally structured.
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 complexity (9 parameters, nested objects, no output schema), the description is too minimal. It does not explain return values, validation, or the effect of the finalize parameter, leaving the agent without 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?
Schema description coverage is 89%, so the schema already documents most parameters. The description adds minimal value by mentioning 'line items', but it does not elaborate on parameter behavior or constraints 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 the verb 'creates' and the resource 'quotation with line items', distinguishing it from sibling tools like create_contact or create_invoice.
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 guidance on when to use this tool versus alternatives (e.g., when to use create_quotation vs create_invoice). No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_voucherC
Erstellt einen neuen Beleg (Eingangsrechnung, Gutschrift). Creates a new voucher (purchase invoice, credit note).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Belegtyp | |
| date | Yes | Belegdatum (ISO 8601) | |
| totalGross | Yes | Bruttobetrag | |
| taxRate | No | Steuersatz in Prozent | |
| contactId | No | Kontakt-ID (optional) | |
| remark | No | Bemerkung | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states it creates a new voucher but omits behavioral traits such as required permissions, side effects (e.g., auto-numbering), error conditions, or whether the contact must exist. For a mutation tool, this is insufficient.
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 with two short sentences (German and English). It is front-loaded with the key action, though no additional structural elements like bullet points are used. No redundant 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 7 parameters, no output schema, and no annotations, the description is too brief. It does not explain the return value, success/failure behavior, or how the tool handles optional fields like contactId or remark. Completeness is lacking.
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 covers 86% of parameters with descriptions. The description adds no further meaning beyond what the schema provides. The 'backend' parameter lacks a description in the schema, but the description does not compensate. Baseline 3 is appropriate given high schema coverage.
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 creates a new voucher (purchase invoice or credit note). It uses the verb 'creates' and specifies the resource 'voucher', distinguishing it from siblings like 'create_invoice' (presumably sales invoices) and 'create_quotation'.
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 guidance is given on when to use this tool versus alternatives like 'create_invoice' or 'create_quotation'. The description implies it's for purchase-related documents but does not explicitly state exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactC
Ruft einen Kontakt per ID ab. Gets a contact by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Kontakt-ID | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits (e.g., read-only, permissions, error handling). It only states what the tool does, not how it behaves.
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 short (two sentences) but could be improved by including usage context or parameter details. It is not excessively verbose, but structure is minimal.
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 no output schema and two parameters (one undocumented), the description lacks completeness. It does not explain return values or behavior for missing IDs, making it insufficient for full 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 50% (only 'id' described). The description does not add meaning for the 'backend' parameter, which remains undocumented. It merely repeats the schema's intent.
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 'gets a contact by ID', providing a specific verb and resource. It distinguishes from sibling listing tools like 'list_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?
No guidance on when to use this tool versus alternatives like 'list_contacts' or 'update_contact'. The description does not mention when-not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoiceC
Ruft eine Rechnung per ID ab. Gets an invoice by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Rechnungs-ID | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits such as required permissions, error conditions, rate limits, or whether the operation is purely read-only. The description only states the basic function.
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 very short and avoids unnecessary words. However, it redundantly states the same information in two languages. It could be more concise by keeping one language and more structured by adding relevant details.
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 annotations and output schema, the description should provide more context about what the tool returns, error handling, and parameter details. It only covers the basic purpose, leaving out critical information for correct 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 description coverage is 50% (only 'id' has a description). The description does not add any meaning beyond the schema, particularly for the 'backend' parameter which lacks a schema description. The tool description fails to compensate for the missing parameter documentation.
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 retrieves an invoice by its ID. It uses a specific verb ('get' / 'abrufen') and resource ('invoice'), and it distinguishes itself from sibling tools like create_invoice, list_invoices, and update_invoice.
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 no guidance on when to use this tool versus alternatives (e.g., list_invoices for searching, get_invoice_pdf for PDF retrieval). There are no prerequisites or usage conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_invoice_pdfA
Laedt eine Rechnung als PDF herunter (Base64-kodiert). Downloads an invoice as PDF (base64-encoded).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Rechnungs-ID | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the return format (base64-encoded PDF) but lacks details on authorization, side effects, or error handling.
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 short and clear, using bilingual text. While efficient, the structure could be improved with a single language or 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?
Adequate for a simple download tool: states action and format. Lacks instruction on how to use the base64 output (e.g., decode) and error scenarios.
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 describes 'id' as 'Rechnungs-ID' but 'backend' lacks description. The description adds no parameter-level meaning beyond the schema, leaving the 'backend' param undocumented.
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 the action (download), resource (invoice PDF), and format (base64-encoded) in both German and English, distinguishing it from sibling tools that return JSON 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?
Implied usage: use when needing a PDF of an invoice. No explicit when-not or alternatives provided, but the purpose is clear from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_overdue_invoicesC
Listet alle ueberfaelligen Rechnungen mit Betrag und Faelligkeitsdatum. Lists all overdue invoices with amount and due date.
| Name | Required | Description | Default |
|---|---|---|---|
| days_overdue | No | Mindestens X Tage ueberfaellig (0 = alle ueberfaelligen) | |
| limit | No | Maximale Anzahl | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states what the tool does, not behavioral traits like read-only, auth requirements, or return format. Insufficient for an unannotated tool.
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?
Short and to the point, but bilingual repetition is redundant. Still efficient overall.
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?
Lacks return structure details beyond amount and due date. No mention of sorting, pagination, or relationship to list_invoices. Incomplete for a filtered list tool with no annotations or output schema.
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 two of three parameters with descriptions (67% coverage). The description adds no parameter info. The 'backend' parameter is undocumented.
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 lists overdue invoices with amount and due date, which distinguishes it from list_invoices (all invoices) and get_invoice (single). However, it doesn't explicitly differentiate 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?
No guidance on when to use this tool vs alternatives like list_invoices. No prerequisites or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotationC
Ruft ein Angebot per ID ab. Gets a quotation by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Angebots-ID | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only states 'gets a quotation', implying a read operation, but does not disclose error conditions, authorization needs, or the role of the optional 'backend' parameter.
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 but redundant with both German and English. The front-loaded English sentence could suffice. Acceptable but not exemplary.
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?
Lacks details on output format or additional behavior. For a straightforward get-by-ID tool, this is minimal but could be improved with return value hints. 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?
Only 50% of schema parameters are described (id). The description adds no explanation for the 'backend' parameter, and the id description ('Angebots-ID') is already present in 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 the tool retrieves a quotation by its ID, using both German and English. It distinguishes from siblings like get_invoice by specifying 'quotation'.
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 guidance on when to use this tool versus alternatives, such as other get tools or search endpoints. No context about typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_voucherC
Ruft einen Beleg per ID ab. Gets a voucher by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Beleg-ID | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states it gets a voucher by ID, with no details on what happens if the ID is invalid, authentication requirements, or whether the operation is read-only (implied but not confirmed). The lack of behavioral context is a significant gap.
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 very short (two sentences), which is concise but lacks substance. It is front-loaded with the purpose, but the brevity means it misses important details.
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 annotations, no output schema, and only minimal parameter documentation, the description is incomplete. It does not specify return format, error handling, or any additional context needed for correct 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 50% because the 'backend' parameter lacks a description. The tool description does not add any parameter meaning beyond what the schema provides (only 'id' is documented in schema). With low coverage, the description should compensate but fails to do so.
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 retrieves a voucher by ID ('Gets a voucher by ID'). However, it does not differentiate from sibling tools like list_vouchers or get_invoice, which also retrieve similar 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?
No explicit guidance on when to use this tool or when to use alternatives like list_vouchers. The usage is implied by the tool name and description, but no context about prerequisites or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsC
Listet Kontakte auf mit optionalen Filtern. Lists contacts with optional filters.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Nach Name filtern | |
| No | Nach E-Mail filtern | ||
| role | No | Nach Rolle filtern | |
| limit | No | Maximale Anzahl | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as pagination, sorting, authentication needs, or side effects. It only states the basic function without additional 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 very short and bilingual, which is efficient but redundant. It front-loads the purpose but lacks structure or detail. Every sentence earns its place but could be more informative.
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 should explain return values or behavior. It does not mention what the list returns, pagination limits, or how the filters combine. The tool has 5 parameters but the description provides minimal 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 high (80%), so the baseline is 3. The description says 'optional filters' but adds no specifics beyond what the parameter descriptions already provide. It does not enhance understanding of parameters.
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 lists contacts with optional filters, distinguishing it from sibling tools like get_contact (single) and list_invoices (different resource). It is not a tautology and gives a specific action.
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 guidance on when to use this tool vs alternatives (e.g., get_contact for a single contact, or other list tools). The description only mentions optional filters but doesn't explain scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invoicesC
Listet Rechnungen auf. Kann nach Status filtern (draft, open, paid, overdue). Lists invoices with optional status filter.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Nach Status filtern | |
| contactId | No | Nach Kontakt filtern | |
| limit | No | Maximale Anzahl | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Only mentions status filter but omits details like pagination, default limit (25), contactId filtering, backend parameter, or response format. Lacks sufficient behavioral disclosure for a listing tool.
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 short sentences, efficient but slightly redundant due to bilingual repetition. No wasted words, but could be more front-loaded with key info in one sentence.
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 4 parameters, no annotations, and no output schema, description is incomplete. Does not mention pagination, default limit, contactId filter, backend purpose, or return structure. Insufficient for an agent to use correctly 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 75% (3 of 4 params have descriptions). Description adds no extra meaning beyond listing status filter; fails to explain contactId, limit, or the undocumented backend parameter. Does not compensate for missing 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?
Clear verb+resource: lists invoices with optional status filter. Bilingual text explicitly states function. However, doesn't distinguish from sibling tools like get_overdue_invoices, but as the generic list tool, purpose is clear.
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 guidance on when to use this tool versus alternatives (e.g., get_overdue_invoices, get_invoice). Does not mention when not to use or context for filters like contactId or limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vouchersB
Listet Belege auf mit optionalen Filtern. Lists vouchers with optional filters.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Nach Typ filtern | |
| limit | No | Maximale Anzahl | |
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as pagination, ordering, or side effects. For a listing tool, this is a significant gap.
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 short, front-loaded sentences with minimal redundancy. Could be merged into one, 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?
Missing details on result format, pagination, error handling, and ordering. Compared to sibling list tools, this description is incomplete for a full understanding.
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 67% of parameters with descriptions; the tool description adds no extra meaning beyond 'optional filters'. The backend parameter lacks description, but schema coverage is adequate for baseline.
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 verb 'list' and the resource 'vouchers', distinguishing it from 'get_voucher' which retrieves a single voucher. The bilingual phrasing reinforces the action.
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 guidance on when to use this tool versus siblings like 'list_contacts' or 'list_invoices'. No mention of when not to use it or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_contactB
Aktualisiert einen bestehenden Kontakt. Updates an existing contact.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Kontakt-ID | |
| name | No | Neuer Name | |
| firstName | No | Neuer Vorname | |
| No | Neue E-Mail | ||
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description adds minimal behavioral context. It does not disclose idempotency, partial update behavior, authorization requirements, or error handling. A simple 'update' does not convey the full behavioral profile.
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 very short (two sentences), but the bilingual repetition adds slight redundancy. Still, it is efficient and front-loaded with the key action. Every sentence serves a purpose, though merging languages could be cleaner.
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 and no annotations, the description lacks completeness. It does not explain return values, success/failure indicators, or other context that an agent would need for a mutation tool. Sibling tools like 'update_invoice' likely have similar brevity, but the tool itself is underspecified.
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 high (80%), so the baseline is 3. The description does not add any parameter information beyond what the schema already provides (e.g., 'Kontakt-ID', 'Neuer Name'). It does not elaborate on the 'backend' parameter which lacks a description.
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 'Aktualisiert einen bestehenden Kontakt. Updates an existing contact.' It uses a specific verb ('updates') and resource ('existing contact'), and distinguishes from siblings like 'create_contact' and 'get_contact'.
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 guidance on when to use this tool versus alternatives. The description only states what it does, without mentioning when not to use it or suggesting other tools for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_invoiceB
Aktualisiert eine bestehende Rechnung (nur Entwuerfe). Updates a draft invoice.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Rechnungs-ID | |
| title | No | ||
| introduction | No | ||
| remark | No | ||
| backend | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It reveals that the tool mutates a draft invoice but does not disclose side effects, required permissions, or whether the operation is reversible. This is insufficient for a mutation tool.
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 very short and front-loaded with the key information. However, it redundantly repeats the same content in two languages, which slightly reduces efficiency.
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 lack of parameter descriptions and no output schema, the description is insufficient for an agent to understand how to use the tool effectively. It does not explain which fields are updatable or the effect of the update.
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 schema description coverage is only 20%, with only the 'id' parameter described. The description adds no information about the other four parameters (title, introduction, remark, backend), leaving their semantics entirely unclear.
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 updates an existing invoice and specifies the constraint 'nur Entwuerfe' (only drafts), making it unambiguous and distinct from sibling tools like create_invoice or get_invoice.
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 it should only be used for draft invoices, but it does not explicitly state when not to use it or provide alternatives for non-draft invoices. The guidance is minimal.
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.
15 tool updates
v0.1.1- First observed
create_contact - First observed
create_invoice - First observed
create_quotation - First observed
create_voucher - First observed
get_contact - First observed
get_invoice - First observed
get_invoice_pdf - First observed
get_overdue_invoices - First observed
get_quotation - First observed
get_voucher - First observed
list_contacts - First observed
list_invoices - First observed
list_vouchers - First observed
update_contact - First observed
update_invoice
TDQS
Each tool targets a distinct resource (contact, invoice, quotation, voucher) with separate actions (create, get, list, update). No overlap in purpose.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_contact, get_invoice_pdf). No mixed conventions.
15 tools are appropriate for an accounting server covering contacts, invoices, quotations, and vouchers. Not too few or too many.
Core CRUD operations are present for contacts and invoices, with additional features like PDF download and overdue listing. However, missing updates for quotations and vouchers, and missing deletions for all resources are minor gaps.
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
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
- Frihet ERPOAuthio.frihet
AI-native ERP MCP: ES/EU fiscal compliance (VeriFactu/TicketBAI/Facturae), invoicing, tax, banking
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for German e-invoice compliance (XRechnung 3.0 & ZUGFeRD 2.x) enabling AI agents to validate, generate, parse, and check compliance of electronic invoices per EN 16931.61MIT
- AlicenseNot gradedqualityDmaintenanceMCP server enabling AI assistants to manage invoices, contacts, products, and other accounting data through the Bukku API.5MIT
- AlicenseAqualityBmaintenanceMCP server for the Elorus invoicing and accounting platform, enabling AI assistants to create invoices, manage contacts, and query financial data through natural language.433MIT
- AlicenseAqualityAmaintenanceMCP server for Spanish accounting for freelancers and SMEs, enabling AI agents to issue invoices, OCR expense PDFs, reconcile bank transactions, and prepare quarterly VAT (Modelo 303).23MIT
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/makririch/buchpilot-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server