Skip to main content
Glama

Server Details

Auftraege, Rechnungen, Material und Zeiten eines Handwerksbetriebs abfragen und pflegen.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 29 tools

Disambiguation5/5

Every tool targets a distinct resource-action pair, with clear separation between search, view, create, update, and send operations. Similar tools like `rechnung_versand_vorschau` and `rechnung_versenden` are explicitly differentiated, and paired `suchen`/`ansehen` tools consistently distinguish list-level from detail-level access.

Naming Consistency5/5

All tool names use lowercase snake_case with a consistent object-verb structure, such as `angebot_anlegen`, `rechnungen_suchen`, and `material_zuweisen`. Plural nouns are uniformly used for list/search tools and singular nouns for single-item operations, making the pattern highly predictable. The few noun-noun names like `datei_stand` and `betrieb_ueberblick` do not disrupt the overall convention.

Tool Count2/5

With 29 tools, the server exceeds the 25-tool threshold and feels heavy for an agent to navigate in context. The tools are logically organized, but the surface spans many subdomains and some tools, such as `material_suchen` and `material_ansehen`, have overlapping responsibilities that could be consolidated. The large count creates a significant decision burden.

Completeness3/5

The core order-to-invoice workflow is well covered: create orders, assign material, create invoice drafts, preview, and send. However, several subdomains are only partially covered: offers and customers have no update/delete tools, invoice drafts cannot be edited or cancelled through the API, and there is no way to change order status. These are notable lifecycle gaps, even if some are intentional product boundaries.

Available Tools

29 tools
angebot_anlegenAngebot anlegenAInspect

Legt einen ANGEBOTS-Entwurf an. Ein Angebot ist noch keine Rechnung: Es fordert kein Geld und wird nicht gebucht. Verschickt NICHTS an den Kunden.

Wird ein Auftrag angegeben, übernimmt das Angebot dessen noch nicht abgerechnetes Material und erfasste Arbeitszeit als Positionen — sofern der Betrieb die Bereiche „Material" und „Zeiterfassung" für den KI-Zugang nicht abgeschaltet hat; die Antwort sagt, was übernommen wurde. Zusätzlich oder stattdessen können eigene Positionen angegeben werden.

Betreff und Belegkopf kommen ebenfalls aus dem Auftrag: Ohne Angabe wird der Auftragstitel zum Betreff, und Auftragsnummer, Objekt und Leistungstag/-zeitraum werden übernommen wie mit dem Knopf „Aus Auftrag & Projekt übernehmen" — gedruckt werden nur die Kopffelder, die der Betrieb unter Rechnungen → Einstellungen gewählt hat; die Kundennummer kommt aus dem Kundenstamm. Ist am Auftrag ein Nettopreis hinterlegt, nennt die Antwort die Abweichung der Positionen dazu.

Die Umwandlung eines Angebots in eine Rechnung geschieht in Meistron und ist über diesen Zugang NICHT möglich.

ParametersJSON Schema
NameRequiredDescriptionDefault
betreffNoBetreff des Angebots, eine Zeile unter der Belegnummer (z. B. „Heizungswartung Reihenhaus"). Ohne Angabe wird der Titel des Auftrags übernommen.
hinweisNoText für den Kunden auf dem Angebot.
kunde_idNoDie Kennung des Kunden. Ohne Angabe wird der Kunde des Auftrags übernommen.
belegkopfNoAngaben rechts oben im Belegkopf. Ohne Angabe werden Auftragsnummer, Objekt und Leistungszeitraum aus dem Auftrag übernommen (siehe `belegkopf_aus_auftrag`); jede Angabe hier gewinnt je Feld. Gedruckt wird NUR, was der Betrieb unter Rechnungen → Einstellungen „Angaben im Belegkopf" gewählt hat — die Antwort sagt, welche Angaben deshalb nicht auf dem Beleg stehen. Die Kundennummer lässt sich hier nicht setzen; sie kommt aus dem Kundenstamm.
auftrag_idNoAuftrag, dessen Material und Arbeitszeit übernommen werden sollen — und aus dem Betreff und Belegkopf gefüllt werden.
positionenNoEigene Positionen. Höchstens 50.
steuersatzNoSteuersatz für den GESAMTEN Beleg in Prozent — 19, 7 oder 0. Ohne Angabe der im Betrieb hinterlegte Satz. Ein Beleg trägt genau EINEN Satz, im Kopf wie in jeder Position; gemischte Sätze lehnt Meistron beim Finalisieren ab. Wer beides braucht, legt zwei Belege an.
ohne_zeitenNoNur Material übernehmen, keine Stunden.
ohne_materialNoNur Stunden übernehmen, kein Material.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.
belegkopf_aus_auftragNoVorgabe true: übernimmt Auftragsnummer, Objektnummer, Objektadresse und Leistungstag/-zeitraum aus dem Auftrag — wie der Knopf „Aus Auftrag & Projekt übernehmen" in Meistron. Auf false setzen, wenn der Belegkopf ausschließlich aus `belegkopf` kommen soll.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses key behavioral traits: nothing is sent to the customer, nothing is booked, the response reports which items were adopted and which header fields will be omitted, and invoice conversion is blocked. It also documents the two-step idempotency-key protocol, which neither the annotations nor the schema title convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but organized into thematic paragraphs, with the core limitation front-loaded and details grouped around order inheritance, header fields, and conversion. It is reasonably tight for an 11-parameter tool, though a few statements restate what the schema already explains.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters, nested objects, and no output schema, this is complete: it covers response behavior, ordering of data inheritance, configurable printing, side-effect boundaries, and retry semantics. An agent has enough contextual information to invoke it correctly and interpret the outcome.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The top-level description adds cross-parameter meaning: default values drawn from the order, field precedence between belegkopf and belegkopf_aus_auftrag, the uniform tax-rate rule, and the idempotency-key flow. This is useful but incremental given how thorough the schema already is.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific action — 'Legt einen ANGEBOTS-Entwurf an' — and immediately distinguishes it from an invoice ('keine Rechnung', 'fordert kein Geld', 'wird nicht gebucht', 'Verschickt NICHTS'). This gives an agent a clear separation from sibling tools like rechnung_anlegen and auftrag_anlegen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to supply an order and what is inherited (material, times, subject, header fields), when to use own positions, and warns that conversion to invoice is not possible via this access. It does not explicitly name sibling tools as alternatives, but the quote-vs-invoice boundary is a usable selection criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

angebote_suchenAngebote suchenA
Read-onlyIdempotent
Inspect

Listet Angebote mit Nummer, Kunde, Betrag und Status. Zeigt auch, welche bereits in eine Rechnung umgewandelt wurden — und welche offen liegen.

ParametersJSON Schema
NameRequiredDescriptionDefault
bisNoSpätestes Datum, JJJJ-MM-TT.
vonNoFrühestes Datum, JJJJ-MM-TT.
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).
nur_offenNoNur noch nicht umgewandelte Angebote.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context beyond these by stating it shows which offers were already converted to invoices and which remain open, giving the agent a clear picture of the output without needing to infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the verb and resource, and every clause adds relevant information. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

As there is no output schema, the description carries the responsibility of explaining return values. It lists the fields (Nummer, Kunde, Betrag, Status) and the special conversion status, which covers the core information. It doesn't mention limits or ordering, but those are optional parameters in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 100%, the baseline is 3. The description aligns with the 'nur_offen' parameter by mentioning open offers, but doesn't detail parameter syntax or add meaning beyond the schema. It mentions output fields rather than input parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Listet' (lists) and identifies the resource 'Angebote' with key fields (Nummer, Kunde, Betrag, Status). It clearly distinguishes from sibling tools like angebot_anlegen (create) and rechnungen_suchen (invoices) by focusing on offers and their conversion state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context about what the tool returns (offers with conversion status), implying its use for checking which offers are converted or open. However, it does not explicitly name alternatives or state when not to use it, stopping short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auftraege_suchenAufträge suchenA
Read-onlyIdempotent
Inspect

Listet Aufträge eines Zeitraums — etwa einer Woche — mit Titel, Termin, Status, Ort und Kunde. Ohne Zeitraum werden die nächsten anstehenden Termine gezeigt. Mit suche findet es einen Auftrag über Teil der Auftragsnummer oder des Titels — dann auch vergangene —, mit kunde_id die Aufträge eines Kunden. Die Kennung eines Treffers ist die Eingabe für auftrag_ansehen und rechnung_anlegen.

ParametersJSON Schema
NameRequiredDescriptionDefault
bisNoSpätester Termin, JJJJ-MM-TT.
vonNoFrühester Termin, JJJJ-MM-TT.
sucheNoTeil der Auftragsnummer oder des Titels, z. B. „0118" oder „Heizung". Ohne Zeitraum werden dann auch vergangene Aufträge gefunden, nicht nur anstehende.
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).
statusNoNur Aufträge in diesem Status.
kunde_idNoNur Aufträge dieses Kunden — die Kennung aus `kunden_suchen`.
nur_unterminiertNoNur Aufträge ohne Termin — die, die noch eingeplant werden müssen.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds useful behavior beyond that: default time-range behavior, suche including past records, customer scoping, and the returned fields. It does not mention pagination or ordering, but those are minor given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences put the primary purpose first, then refine behavior by input mode, then connect results to downstream tools. Every sentence earns its place and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search/list tool, the description is largely complete: it states returned fields, default behavior, search modes, and how identifiers are used downstream. The lack of an output schema is compensated by listing result fields, though sorting and result-limit behavior are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds some context for behavior with and without a time range, but it mostly restates what the schema already says about suche and kunde_id. It does not substantially enrich parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: listing Aufträge over a period with specific result fields (Titel, Termin, Status, Ort, Kunde). It also differentiates this list/search tool from single-record siblings by noting that a result's Kennung is the input for auftrag_ansehen and rechnung_anlegen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context: no time range yields upcoming appointments, suche searches partial numbers/titles including past records, and kunde_id filters by customer. It does not explicitly state exclusions against sibling tools, but the downstream tool connection makes selection guidance clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auftrag_aendernAuftrag ändernA
Idempotent
Inspect

Ändert Titel, Beschreibung, Ort oder Termin eines bestehenden Auftrags. Nur die angegebenen Felder werden angefasst. Ändert NICHT den Status. Bei einer echten Terminverschiebung können die zugewiesenen Mitarbeiter eine Push-Meldung erhalten, wenn der Betrieb die Aussenwirkung erlaubt hat; dem Kunden wird nichts geschickt.

ParametersJSON Schema
NameRequiredDescriptionDefault
ortNo
endetNoNeues Termin-Ende, JJJJ-MM-TTTHH:MM.
titelNo
beginntNoNeuer Termin-Beginn, JJJJ-MM-TTTHH:MM.
auftrag_idYesDie Kennung des Auftrags.
beschreibungNo
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses partial-update behavior, the exclusion of status changes, and a conditional side effect: assigned employees may receive a push notification on a real appointment shift, while the customer receives nothing. This is genuinely useful behavioral context not captured by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two compact, information-dense sentences. The first front-loads purpose and scope; the second adds the side-effect warning. There is no filler and nothing repeats the annotations or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and moderate schema coverage, the description sufficiently covers the key behavioral semantics (partial update, no status change, notification side effects). It reasonably relies on the schema for the date format and idempotency workflow. A minor gap is the lack of any mention of the return value or confirmation, but that is not critical given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 57% of parameters, and the description adds meaning by mapping 'Titel, Beschreibung, Ort oder Termin' to the relevant fields and explicitly stating that only supplied fields are touched. This partial-update semantics is not evident from the schema alone. The idempotency_key behavior is already thoroughly documented in the schema, so no duplication is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Ändert' (changes) and names the exact resource ('bestehenden Auftrags') plus the fields affected: Titel, Beschreibung, Ort, Termin. It also adds scoping constraints ('Nur die angegebenen Felder werden angefasst', 'Ändert NICHT den Status'), which clearly distinguishes it from create/view/search siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence clearly implies the tool is for modifying existing order fields, and the explicit 'Ändert NICHT den Status' provides a when-not boundary. However, it does not name alternative tools (e.g., auftrag_anlegen for status changes or new orders), so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auftrag_anlegenAuftrag anlegenAInspect

Legt einen neuen Auftrag an — mit Titel, optional Beschreibung, Termin, Ort und Kunde. JEDER Auftrag braucht mindestens eine zuständige Person: ohne Angabe wird der Inhaber selbst zugewiesen. Ob die Zugewiesenen eine Benachrichtigung auf ihr Gerät bekommen, hängt davon ab, ob der Betrieb die Aussenwirkung freigegeben hat — in der Vorgabe ist sie AUS. Die Antwort sagt jedes Mal, was tatsächlich hinausging. Legt KEINE Rechnung an und schreibt dem Kunden nichts.

ParametersJSON Schema
NameRequiredDescriptionDefault
ortNoEinsatzort als Text.
endetNoTermin-Ende, JJJJ-MM-TTTHH:MM. Nur zusammen mit `beginnt`.
titelYesKurzer Titel, worum es geht.
beginntNoTermin-Beginn, JJJJ-MM-TTTHH:MM (Ortszeit).
kunde_idNoKennung eines bestehenden Kunden.
mitarbeiterNoKennungen der zuständigen Personen (siehe mitarbeiter_auflisten). Ohne Angabe wird der Inhaber selbst zugewiesen.
beschreibungNoWas zu tun ist.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial behavioral context beyond the annotations: default assignment to the owner, notification behavior depending on an external setting whose default is off, and the guarantee that the response reports what was actually sent. It also clarifies side-effect boundaries (no invoice, no customer communication), with no contradiction with readOnlyHint=false, openWorldHint=true, or destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four purposeful sentences arranged in order of importance: core action first, mandatory-person rule second, notification side-effect third, and negative scope last. No filler or repetition; the caps on 'JEDER', 'KEINE', and 'AUS' are effective emphasis.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no output schema, the description covers the essential behavioral rules, defaults, and side-effect exclusions, and even previews the response's key content. It leaves the exact response shape unspecified and does not restate the two-step idempotency protocol in the description, though that protocol is well documented in the schema, so a small gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 8 parameters. The description mostly summarizes fields already visible in the schema and repeats the mitarbeiter default; the notification caveat adds context but is not parameter-level semantics, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('Legt einen neuen Auftrag an') and resource, lists core fields, and adds explicit negative boundaries ('Legt KEINE Rechnung an und schreibt dem Kunden nichts') that separate it from invoice- and communication-related siblings like rechnung_anlegen or rechnung_versenden.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly indicates when to use it (creating a new order) and gives decision-relevant constraints: a responsible person is mandatory, owner is assigned by default, and notifications depend on the Betrieb's Aussenwirkung setting. It does not name alternative tools explicitly (e.g., auftrag_aendern or angebot_anlegen), so the routing is clear but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

auftrag_ansehenAuftrag ansehenA
Read-onlyIdempotent
Inspect

Zeigt einen einzelnen Auftrag ausführlich: Beschreibung, Termin, Ort, Kunde, Projekt, Vor-Ort-Kontakt (nur der Name), zugewiesene Mitarbeiter, zugewiesenes Material mit Abrechnungsstand und noch nicht abgerechnete Stunden (sofern die Bereiche „Material" bzw. „Zeiterfassung" freigegeben sind), Zahl der Fotos, bei Storno den Grund — und die zugehörigen Rechnungen sowie den am Auftrag hinterlegten Nettopreis, sofern der Bereich „Rechnungen" für den KI-Zugang freigegeben ist. Der übliche Blick, BEVOR aus dem Auftrag eine Rechnung entsteht: Material und Stunden zeigen, was rechnung_anlegen übernehmen würde.

ParametersJSON Schema
NameRequiredDescriptionDefault
auftrag_idYesDie Kennung des Auftrags.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail beyond annotations: permission-dependent visibility ('sofern die Bereiche ... freigegeben sind'), limited contact data ('nur der Name'), cancellation-specific reason, and the exact scope of returned data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but every clause earns its place by specifying a distinct field or condition. The main field list is front-loaded, and the final sentence adds useful cross-tool context without redundancy. The structure makes a complex return payload easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description carries the full burden of explaining the return values — and it does so exhaustively: employee assignments, material billing status, un-invoiced hours, photo counts, cancellation reason, invoices, and net price. Permission caveats are also spelled out, so an agent knows what to expect under different access settings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage and a single parameter described as 'Die Kennung des Auftrags,' the schema already documents the parameter adequately. The description does not add format, example, or lookup semantics beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — 'Zeigt einen einzelnen Auftrag ausführlich' — and enumerates exactly which fields are included. It also distinguishes itself from list-oriented siblings like 'auftraege_suchen' by emphasizing 'einzeln' and from 'rechnung_anlegen' by noting it is the pre-invoice view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly identifies the intended context: 'Der übliche Blick, BEVOR aus dem Auftrag eine Rechnung entsteht.' It explains that material and hours shown here correspond to what 'rechnung_anlegen' would use, giving the agent a practical cue for when to choose this tool. However, it does not explicitly state when not to use it or compare it directly with other view/search siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

betrieb_ueberblickÜberblick über den BetriebA
Read-onlyIdempotent
Inspect

Nennt die aktuellen Eckdaten: wie viele Aufträge offen und wie viele terminiert sind, wie viele Rechnungen unbezahlt und davon überfällig, und die Summe der offenen Posten — als RESTBETRAG, Teilzahlungen sind also bereits abgezogen. Guter erster Aufruf, um zu verstehen, worum es gerade geht.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds meaningful behavioral context beyond annotations by clarifying that the 'Summe der offenen Posten' is reported as RESTBETRAG with partial payments already deducted. It does not mention auth or rate limits, but for a simple read-only overview with zero parameters this is not 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences. It front-loads the action ('Nennt die aktuellen Eckdaten'), lists the specific figures, uses a dash to clarify the RESTBETRAG nuance, and ends with a practical usage tip. Every sentence earns its place and there is no redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless overview tool with no output schema, the description is remarkably complete. It specifies all included figures, interprets the meaning of one key metric, and provides guidance on when to call it. An agent can correctly invoke and interpret the result without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so per the rubric the baseline is 4. The description does not need to explain any parameters; instead it focuses on output semantics, which is appropriate. No parameter-related information is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Nennt die aktuellen Eckdaten' and enumerates the exact metrics (open orders, scheduled orders, unpaid/overdue invoices, sum of open items). It clearly distinguishes itself from search-oriented siblings like 'auftraege_suchen' and 'rechnungen_suchen' by offering a summary snapshot rather than a filtered list, reinforced by the phrase 'Guter erster Aufruf'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: 'Guter erster Aufruf, um zu verstehen, worum es gerade geht' signals it is the initial orientation tool. It implies a 'when to use' scenario but does not explicitly name alternatives or state when not to use it (e.g., 'for detailed data use auftraege_suchen'). This is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

datei_anfordernDatei anfordernAInspect

Fordert eine Datei vom Menschen an und gibt einen Link zurück, über den er sie in Meistron hochlädt. Für Preisdateien von Lieferanten (DATANORM), PDFs, Belege und Fotos.

Die Anforderung selbst verarbeitet noch nichts. Nach dem späteren Upload wird eine DATANORM-Datei automatisch geprüft und als Importvorschau vorbereitet; Einkaufspreise oder Artikel werden dabei NICHT angewendet. Das Anwenden startet ein Mensch danach in Meistron. Belege werden nur abgelegt, Bilder können dem genannten Auftrag als Foto zugeordnet werden.

Eine Datei lässt sich NICHT durch den Chat schicken — auch nicht als Text oder Base64. Das ist keine Einschränkung, sondern Absicht: Bei einer Preisdatei mit zehntausenden Artikeln zählt jedes Zeichen, und ein durchgereichter Text verliert oder erfindet welche.

Den Link dem Menschen zeigen. Er muss in Meistron angemeldet sein — ohne Anmeldung führt der Link nirgendwohin. Danach mit „datei_stand" nachsehen, ob sie da ist.

ParametersJSON Schema
NameRequiredDescriptionDefault
zweckYesdatanorm = Preisdatei eines Lieferanten · dokument = PDF (Ausschreibung, Plan) · beleg = Eingangsrechnung oder Quittung · bild = Foto.
hinweisNoWas genau gebraucht wird — steht dem Menschen auf der Upload-Seite.
lieferant_idNoPFLICHT bei zweck=datanorm: von welchem Lieferanten die Preisdatei kommt. Ohne gültige Kennung wird keine Anforderung angelegt. „lieferanten_auflisten" nennt die Kennungen.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.
gehoert_zu_auftragNoKennung des Auftrags, zu dem die Datei gehört. Der Vermerk am Auftrag wird gesetzt; eine Ansicht, die dort abgelegte Dateien anzeigt, gibt es zurzeit noch nicht — nur ein Bild (zweck=bild) erscheint sichtbar in den Fotos des Auftrags. Sag dem Nutzer nichts anderes zu.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses far more than the sparse annotations (all false hints): the request itself processes nothing, DATANORM uploads get auto-checked but prices are never applied, receipts are only stored, images can be attached to an order, the link requires a Meistron login to work, and files cannot be passed through chat as text or Base64 — with the rationale that character fidelity matters. These are exactly the behavioral traits that would otherwise cause an agent to promise the user the wrong outcome.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average (four paragraphs), but every sentence earns its place: purpose first, then post-upload behavior, then the chat constraint with justification, then the direct action commands (show the link, require login, check with datei_stand). The rationale sentence about character loss is slightly verbose but helps an agent explain the constraint to a user. Front-loaded structure is excellent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, a two-phase idempotency protocol, and differentiated post-upload behavior, the description plus 100%-covered schema form a complete picture: the returned link is mentioned, the login prerequisite is stated, the follow-up tool is named, and per-file-type outcomes are specified. The behavior that only images appear in the order's photos is documented in both schema and description. No critical gap remains for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies. The schema already documents the zweck enum values, the lieferant_id requirement for datanorm (including the lieferanten_auflisten pointer), the two-phase idempotency_key protocol, and the gehoert_zu_auftrag caveat about no file view existing yet. The description's mention of 'Preisdateien von Lieferanten (DATANORM), PDFs, Belege und Fotos' reinforces the enum mapping but adds no new per-parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb+resource+outcome: 'Fordert eine Datei vom Menschen an und gibt einen Link zurück, über den er sie in Meistron hochlädt.' It lists the exact file types (DATANORM, PDFs, Belege, Fotos) and clearly differentiates from the sibling datei_stand by describing request-vs-check roles in one workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (needing a file from a human, with the chat-upload path explicitly ruled out) and names datei_stand as the follow-up step. It also explains what the tool does NOT do — it does not apply prices or articles, which prevents misuse. It never explicitly names an alternative tool for a given condition, but the workflow and exclusions are concrete enough that an agent can route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

datei_standStand der angeforderten DateienA
Read-onlyIdempotent
Inspect

Zeigt, welche Dateien angefordert wurden und welche davon angekommen sind. Nach „datei_anfordern" hiermit nachsehen, statt zu raten — und NICHT in kurzen Abständen wiederholt aufrufen: Der Mensch braucht einen Moment.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive hints. The description goes beyond these by explaining the human processing delay and advising against frequent polling, which is important behavioral context not present in the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the first states the core purpose, the second provides usage timing and a critical warning. Every phrase earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no parameters and no output schema, the description fully covers the tool's purpose, when to use it, and a key behavioral caveat. It gives enough context for an agent to know what to expect and how to interact appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter-level explanation is unnecessary. The schema trivially covers all (non-existent) parameters, and the description provides no parameter details because none exist. Baseline 4 applies per guidelines for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool shows which files were requested and which have arrived, using the specific verb 'Zeigt' and resource 'Dateien'. It also distinguishes itself from the sibling tool 'datei_anfordern' by positioning itself as the post-request check, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use this tool after 'datei_anfordern' instead of guessing, and provides a clear exclusion: do not call repeatedly in short intervals because the human needs time. This gives strong when-to-use and when-not-to-use guidance, referencing the related workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

einstellungen_aendernEinstellungen ändernA
Idempotent
Inspect

Ändert eine Firmen- oder Rechnungsvorgabe. Wirkt auf ALLE künftigen Rechnungen und Angebote, nicht auf bestehende.

NICHT änderbar, auch nicht mit Freigabe: Bankverbindung, Steuernummer, USt-IdNr., Rechnungs- und Angebotsnummern samt Präfixen, Steuerberater-Anbindung. Ebenso wenig die Schalter, die die Arbeitsweise umstellen (Bestandsführung, E-Rechnung, öffentliche Buchung). Wer danach gefragt wird, verweist auf Meistron.

Vorher „einstellungen_ansehen" aufrufen, um den heutigen Wert zu kennen.

ParametersJSON Schema
NameRequiredDescriptionDefault
feldYesWas geändert werden soll, z. B. default_payment_terms, default_hourly_rate, phone, closing_name. „einstellungen_ansehen" nennt die möglichen Namen.
wertYesDer neue Wert. Bei Ja/Nein-Feldern true oder false.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses a non-obvious global side effect: changes affect all future invoices and offers but not existing ones. It also states that certain fields remain unchangeable even with approval and gives a policy for out-of-scope requests. These are valuable behavioral details that annotations alone do not convey, and there is no contradiction with 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, deliberately separated paragraphs: purpose and effect, immutable exclusions, and the viewing prerequisite. The content is front-loaded and every sentence carries operational weight, including the Meistron referral. The emphasis and list of exclusions are justified rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating settings tool, the description covers scope, immutability boundaries, handling of forbidden requests, and the necessary viewing pre-step. The idempotency protocol is already fully detailed in the input schema, so its absence from the description is not a gap. An agent has enough information to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already thoroughly documents feld, wert, and idempotency_key. The description does not add new parameter-level meaning beyond framing settings as company/invoice defaults and pointing to 'einstellungen_ansehen', which the schema already mentions. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the verb ('Ändert') and the resource ('Firmen- oder Rechnungsvorgabe'), then narrows the scope further: 'Wirkt auf ALLE künftigen Rechnungen und Angebote, nicht auf bestehende.' This clearly distinguishes the tool from 'einstellungen_ansehen' and gives an agent a precise mental model of what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete prerequisite and sequence: call 'einstellungen_ansehen' first to know today's value. It also defines when not to act by listing immutable fields and instructing agents to refer to Meistron for those requests. It stops short of framing this as an explicit 'use this instead of X' decision against an alternative tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

einstellungen_ansehenEinstellungen ansehenA
Read-onlyIdempotent
Inspect

Zeigt die Firmendaten und die Vorgaben für Rechnungen und Angebote — Zahlungsziel, Steuersatz, Stundensatz, Textbausteine. Nützlich, um zu erklären, warum eine Rechnung aussieht, wie sie aussieht.

Bankverbindung, Steuernummern und Nummernkreise werden NICHT gezeigt.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds value beyond annotations by specifying what is intentionally excluded from the view (Bankverbindung, Steuernummern, Nummernkreise), giving the agent a clearer picture of the tool's limitations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the main purpose, followed by a practical use case and a concise list of exclusions. Every sentence adds meaningful information with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only settings viewer, the description is complete: it explains what data is shown, what is intentionally omitted, and when it is useful. No output schema exists, but for this simple tool the description sufficiently conveys expected behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, and the input schema is empty. The description adds no parameter-specific details, as none are needed. The baseline for 0 params is 4, and the description does not need to compensate for any schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool shows company data and settings for invoices and offers, naming specific elements (Zahlungsziel, Steuersatz, Stundensatz, Textbausteine). It also explicitly lists what is NOT shown (bank details, tax numbers, number ranges), which distinguishes it from related tools like einstellungen_aendern.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case: 'Nützlich, um zu erklären, warum eine Rechnung aussieht, wie sie aussieht.' This implies when to use the tool, though it does not explicitly mention alternatives or exclusion cases. The sibling tool einstellungen_aendern is not referenced, but the name and description make the view-vs-edit distinction obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kunde_anlegenKunde anlegenA
Idempotent
Inspect

Legt einen neuen Kunden an. Name genügt; Firma und Anschrift sind optional. Die Kundennummer vergibt Meistron selbst; die Antwort nennt sie. Gibt es genau einen gleichnamigen Kunden, werden nur die zusätzlich angegebenen Firma-, Anschrift- oder Kontaktdaten an diesem Kunden ergänzt bzw. aktualisiert; es wird KEIN zweiter angelegt. Bei mehreren gleichnamigen Kunden erfolgt KEINE Änderung.

E-Mail, Festnetz und Mobilnummer werden NUR gespeichert, wenn der Inhaber für genau diesen KI-Zugang „Vollzugriff und Vollautonomie" bestätigt hat. Im normalen Modus bleiben diese Kontaktdaten gesperrt. Bei zusätzlich aktivem autonomen E-Mail-Kanal darf die so gespeicherte Adresse für den strikt gebundenen Rechnungsversand verwendet werden.

ParametersJSON Schema
NameRequiredDescriptionDefault
ortNo
plzNo
nameYesName der Person oder des Betriebs.
emailNoE-Mail-Adresse des Kunden. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.
firmaNoFirmenname, falls abweichend.
mobilNoMobilnummer. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.
strasseNo
telefonNoFestnetznummer. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal idempotency, but the description adds substantial behavioral detail: the exact duplicate-handling rule, no-op on multiple matches, server-assigned Kundennummer, and the conditional storage/use of contact data depending on explicit 'Vollzugriff und Vollautonomie' confirmation. No contradiction with 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but dense and front-loaded: the core create action appears first, followed by necessary conditional behaviors. Every sentence contributes substantive guidance, though the second paragraph could be slightly tightened without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, no output schema, and rich idempotency semantics, the description is largely complete: it mentions the returned customer number, the duplicate-name branches, and the autonomy restrictions on contact data. The idempotency-key protocol is left to the schema, and there is no explicit guidance on what the agent should do when multiple same-named customers exist, so it is not a perfect 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds meaningful parameter-level semantics: it says name is sufficient, Firma and Anschrift are optional, and explains the autonomy constraint behind email/telefon/mobil. It does not individually describe ort/plz/strasse, but 'Anschrift' covers them collectively and the schema descriptions handle the remaining parameters well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Legt einen neuen Kunden an', a specific verb and resource that clearly identifies creation as the core purpose. It goes further by disclosing the deduplication/upsert behavior and explicitly distinguishes this tool from search-oriented siblings like kunden_suchen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states when to call the tool (creating a customer, with name being sufficient) and gives conditions: a single same-named customer updates instead of creating, while multiple same-named customers result in no change. It does not explicitly mention alternatives or exclusion criteria such as 'use kunden_suchen first', so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kunden_suchenKunden suchenA
Read-onlyIdempotent
Inspect

Findet Kunden des Betriebs nach Name, Firma oder Ort und nennt ihre Kennung. Diese Kennung verlangen rechnung_anlegen, angebot_anlegen und auftrag_anlegen.

ZUERST SUCHEN, DANN ANLEGEN. Wer stattdessen kunde_anlegen benutzt, weil er den vorhandenen Eintrag nicht findet, erzeugt eine Dublette — zwei Karteien zum selben Kunden, mit getrennter Rechnungshistorie.

Gibt bewusst KEINE Kontaktdaten heraus: Kennung, Kundennummer, Name, Ort und ob eine E-Mail-Adresse hinterlegt ist. Zum Versenden braucht es die Adresse nicht — den Empfänger löst der Server selbst aus dem Kundenstamm auf.

ParametersJSON Schema
NameRequiredDescriptionDefault
sucheNoTeil des Namens, der Firma oder des Ortes. Ohne Angabe die zuletzt angelegten.
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses the concrete return shape and a deliberate limitation: it returns Kennung, Kundennummer, Name, Ort, and whether an email exists, but intentionally not contact data. It also explains why the address is not needed for sending. This is valuable behavioral context not available from the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by a crisp workflow warning and a focused explanation of output limitations. Each paragraph earns its place: no filler, but enough detail to prevent misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with two optional parameters and no output schema, the description covers the search inputs, the returned fields, the key workflow prerequisite, and the intentional absence of contact details. An agent has everything it needs to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the `suche` parameter already explains partial name/company/location matching and the default listing of most recently created records, and `anzahl` already states default and limit. The description repeats the search criteria but adds no new parameter-specific information beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Findet Kunden des Betriebs nach Name, Firma oder Ort und nennt ihre Kennung.' It clearly states what the tool searches by and what it returns, and it distinguishes itself from the creation tool by emphasizing that this lookup supplies the Kennung needed by other tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage guidance is explicit and emphatic: 'ZUERST SUCHEN, DANN ANLEGEN.' It directly warns against using `kunde_anlegen` without searching first, explaining the duplicate-customer consequence. This tells an agent exactly when to use this tool versus the sibling creation tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lieferanten_auflistenLieferanten und PreisständeA
Read-onlyIdempotent
Inspect

Nennt die hinterlegten Lieferanten und wann zuletzt Preise von ihnen eingelesen wurden (DATANORM). Beantwortet die Frage, ob die Einkaufspreise im Katalog noch aktuell sind.

Ein Preis-Import selbst geht NICHT über diesen Zugang — dafür braucht es eine Datei, die in Meistron hochgeladen wird.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only and non-destructive behavior. The description adds the limitation that this tool does not perform price import, which is valuable behavioral context. It also specifies the data returned (suppliers and last DATANORM price import).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary function, and the exclusion is stated succinctly. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool, the description fully explains what it returns (suppliers and last price read dates) and what it doesn't do (import). No output schema needed given the simple nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the description correctly doesn't invent any. Baseline for zero parameters is 4, and there's nothing to deduct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists suppliers and their last price import dates, with a specific verb ('Nennt') and resource. It also explains the purpose (answering whether catalog prices are current), which differentiates it from import-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when NOT to use it (for price import) and directs to the alternative (uploading a file to Meistron). This provides clear usage boundaries and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material_ansehenMaterial ansehenA
Read-onlyIdempotent
Inspect

Zeigt einen Katalogartikel mit Preis, Bestand, Lagerort und den letzten Bestandsbewegungen — also woher der aktuelle Bestand kommt.

ParametersJSON Schema
NameRequiredDescriptionDefault
material_idYesDie Kennung des Artikels.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing the safety profile. The description adds useful context about the data fields shown (e.g., price, stock, location, and where stock comes from), but it doesn't disclose error handling, not-found behavior, or authorization requirements, which are not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action ('Zeigt') and resource ('Katalogartikel'), then lists the data scope. Every part contributes, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only view tool with one parameter and strong annotations, the description covers the key output fields (price, stock, location, stock movements). Without an output schema, it could be more explicit about the structure or extent of movements, but the description is largely sufficient for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameter descriptions: material_id is described as 'Die Kennung des Artikels.' The tool description adds no extra semantics beyond reinforcing that the tool views a catalog item by that identifier. 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Zeigt' (shows) and clearly identifies the resource as a catalog article, listing the key data fields (price, stock, location, and stock movements). This distinguishes it from sibling tools like material_suchen (search) and material_buchen (book), providing a clear purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for viewing a single material's details, but it doesn't provide explicit guidance on when to choose this over alternatives like material_suchen, nor does it mention prerequisites or exclusions. The usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material_buchenBestand buchenA
Destructive
Inspect

Bucht eine Bestandsbewegung auf einem Katalogartikel: Zugang (Einkauf), Abgang (Entnahme ohne Auftrag) oder Inventur (Korrektur auf einen gezählten Ist-Bestand). Jede Buchung wird dauerhaft protokolliert und lässt sich NICHT löschen — ein Fehler wird durch eine Gegenbuchung berichtigt, nicht durch Rückgängigmachen. Für Material, das auf einen Auftrag geht, ist „material_zuweisen" richtig: Das verbindet den Verbrauch mit dem Auftrag und macht ihn abrechenbar.

ParametersJSON Schema
NameRequiredDescriptionDefault
artYeszugang = Ware kommt herein · abgang = Ware geht ohne Auftrag heraus · inventur = der gezählte Ist-Bestand, NICHT die Differenz.
mengeYesBei Zugang und Abgang die bewegte Menge (immer positiv). Bei Inventur der gezählte Bestand — die Differenz errechnet das System selbst.
notizNoGrund der Buchung, z. B. Lieferschein-Nummer.
material_idYesDie Kennung des Artikels.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark destructiveHint=true and idempotentHint=false, and the description reinforces this with concrete operational context: every posting is permanently logged, cannot be deleted, and errors are corrected by a reversing posting rather than an undo. This goes beyond the generic annotation and is directly actionable for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the first explains the core operation and variants, the second adds the critical irreversibility/correction behavior, and the third routes to the correct alternative for a different case. The most important information is front-loaded and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, the description covers the purpose, all three variants, the permanence/correction model, and the sibling alternative. The idempotency_key flow is fully described in the schema, so its absence from the description is not a gap. A minor gap is that the return/confirmation shape is not mentioned, but this is not a serious omission given how well the rest is covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents all five parameters in detail, including the subtle idempotency_key handshake. The tool description adds only a light interpretive layer for the movement types, not parameter-level semantics beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb ('Bucht') and a clear resource ('Bestandsbewegung auf einem Katalogartikel'), then enumerates the three movement types: Zugang, Abgang and Inventur. It also distinguishes itself from material_zuweisen, so an agent can tell exactly what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: this tool is for stock movements on a catalog item. It also names the sibling alternative and the condition that selects it: material that goes to an order should use material_zuweisen, because that links consumption with the order and makes it billable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material_suchenMaterial suchenA
Read-onlyIdempotent
Inspect

Durchsucht den Materialkatalog nach Bezeichnung oder Artikelnummer und nennt Preis, Einheit und Lagerbestand. Mit nur_knapp die Artikel, die unter ihrem Mindestbestand liegen — der übliche Einstieg vor einer Bestellung.

ParametersJSON Schema
NameRequiredDescriptionDefault
sucheNoTeil der Bezeichnung oder Artikelnummer.
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).
nur_knappNoNur Artikel unter dem hinterlegten Mindestbestand.
nur_werkzeugNoNur Werkzeuge statt Verbrauchsmaterial.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful behavioral context: it returns price, unit, and stock, and explains the `nur_knapp` filter behavior. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loads the core purpose, and adds a valuable use case in the second sentence. Every word earns its place; no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 optional params, no output schema), the description covers the main behavior, key filter, and return fields. It doesn't detail pagination, but the schema documents `anzahl`. The description is adequate and well-contextualized within its sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with meaningful descriptions for all 4 parameters. The description's mention of `nur_knapp` reinforces the schema but doesn't add new semantic detail beyond it. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Durchsucht') and resource ('Materialkatalog'), and clearly states the search criteria (Bezeichnung/Artikelnummer) and output fields (Preis, Einheit, Lagerbestand). This distinguishes it from sibling tools like material_ansehen (view single) and material_buchen (booking), 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete usage scenario: with `nur_knapp` it lists items below minimum stock, described as 'der übliche Einstieg vor einer Bestellung' (the usual entry point before an order). While it doesn't explicitly name alternatives or exclusions, the context is clear enough for an agent to know when to choose this search tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

material_zuweisenMaterial einem Auftrag zuweisenA
Destructive
Inspect

Bucht Material oder Werkzeug auf einen Auftrag. Der Bestand wird sofort abgezogen und der Verbrauch dem Auftrag zugeordnet — dadurch kann er später in eine Rechnung übernommen werden. Reicht der Bestand nicht, wird abgelehnt statt ins Minus gebucht. Legt KEINE Rechnung an.

ParametersJSON Schema
NameRequiredDescriptionDefault
mengeYesWie viel auf den Auftrag geht (positiv).
notizNoOptionaler Vermerk zur Zuweisung.
auftrag_idYesDie Kennung des Auftrags.
material_idYesDie Kennung des Artikels aus dem Katalog.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses the immediate stock deduction side effect, the failure mode for insufficient stock (rejected rather than booked into negative), and the downstream invoicing consequence. All disclosures are consistent with destructiveHint=true and readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: core purpose, side effect and downstream consequence, failure mode, and scope boundary. The primary action is front-loaded in the first sentence with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers side effects, failure behavior, and scope boundary, with the idempotency protocol fully documented in the schema. The only notable gap is the success response shape — there is no output schema and the description does not say what the caller receives on success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%; every parameter has a meaningful description, including an exceptionally detailed two-phase protocol for idempotency_key. The tool description itself adds only marginal parameter context (e.g., stock availability constrains menge), so the baseline 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Bucht Material oder Werkzeug auf einen Auftrag' (books material or tool onto an order), which is immediately distinguishable from pure stock tools and general order tools. The closing 'Legt KEINE Rechnung an' explicitly draws the boundary against invoice creation, so an agent can tell it apart from rechnung_anlegen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the intended context — consumption is assigned to the order so it can later be carried into an invoice — and explicitly states what it does NOT do ('Legt KEINE Rechnung an'). However, it never names sibling alternatives such as material_buchen or rechnung_anlegen directly, so routing between siblings is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mitarbeiter_auflistenMitarbeiter auflistenA
Read-onlyIdempotent
Inspect

Nennt die Personen, denen ein Auftrag zugewiesen werden kann, mit Namen und Kennung. Vor dem Anlegen eines Auftrags aufrufen, wenn nicht klar ist, wer zuständig sein soll.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description adds context about what is listed (people assignable to orders) and the output fields (name and ID), which is useful. However, no further behavioral traits (e.g., pagination) are disclosed, but given the simple nature and annotation coverage, this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the tool's function, the second provides usage guidance. It is concise and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with zero parameters and no output schema, the description covers the essential context: what it returns, when to use it, and the annotations cover safety. No additional information seems necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters. With zero parameters, the baseline is 4; the description doesn't need to compensate and does not add parameter-specific details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'nennt' (lists), specifies the resource 'Personen, denen ein Auftrag zugewiesen werden kann' (people assignable to an order), and notes the output includes name and identifier. This clearly distinguishes it from sibling tools like 'lieferanten_auflisten'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction 'Vor dem Anlegen eines Auftrags aufrufen, wenn nicht klar ist, wer zuständig sein soll' explicitly states when to use the tool (before creating an order when responsibility is unclear). This provides clear context and timing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rechnung_anlegenRechnung anlegenAInspect

Legt einen Rechnungs-ENTWURF an. Ein Entwurf hat noch KEINE Rechnungsnummer und ist in Meistron änderbar — die Nummer wird erst beim Versenden vergeben, damit der Nummernkreis lückenlos bleibt. Verschickt NICHTS an den Kunden.

Wird ein Auftrag angegeben, übernimmt der Entwurf dessen noch nicht abgerechnetes Material und erfasste Arbeitszeit als Positionen — das ist der übliche Weg, sofern der Betrieb die Bereiche „Material" und „Zeiterfassung" für den KI-Zugang nicht abgeschaltet hat; die Antwort sagt, was übernommen wurde. Zusätzlich oder stattdessen können eigene Positionen angegeben werden.

Betreff und Belegkopf kommen ebenfalls aus dem Auftrag: Ohne Angabe wird der Auftragstitel zum Betreff, und Auftragsnummer, Objekt und Leistungstag/-zeitraum werden übernommen wie mit dem Knopf „Aus Auftrag & Projekt übernehmen" — gedruckt werden nur die Kopffelder, die der Betrieb unter Rechnungen → Einstellungen gewählt hat; die Kundennummer kommt aus dem Kundenstamm. Ist am Auftrag ein Nettopreis hinterlegt, nennt die Antwort, um wie viel die Positionen darunter oder darüber liegen.

ParametersJSON Schema
NameRequiredDescriptionDefault
betreffNoBetreff der Rechnung, eine Zeile unter der Belegnummer (z. B. „Heizungswartung Reihenhaus"). Ohne Angabe wird der Titel des Auftrags übernommen.
hinweisNoText für den Kunden auf der Rechnung.
kunde_idNoDie Kennung des Kunden. Ohne Angabe wird der Kunde des Auftrags übernommen.
belegkopfNoAngaben rechts oben im Belegkopf. Ohne Angabe werden Auftragsnummer, Objekt und Leistungszeitraum aus dem Auftrag übernommen (siehe `belegkopf_aus_auftrag`); jede Angabe hier gewinnt je Feld. Gedruckt wird NUR, was der Betrieb unter Rechnungen → Einstellungen „Angaben im Belegkopf" gewählt hat — die Antwort sagt, welche Angaben deshalb nicht auf dem Beleg stehen. Die Kundennummer lässt sich hier nicht setzen; sie kommt aus dem Kundenstamm.
auftrag_idNoAuftrag, dessen Material und Arbeitszeit übernommen werden sollen — und aus dem Betreff und Belegkopf gefüllt werden.
positionenNoEigene Positionen. Höchstens 50.
steuersatzNoSteuersatz für den GESAMTEN Beleg in Prozent — 19, 7 oder 0. Ohne Angabe der im Betrieb hinterlegte Satz. Ein Beleg trägt genau EINEN Satz, im Kopf wie in jeder Position; gemischte Sätze lehnt Meistron beim Finalisieren ab. Wer beides braucht, legt zwei Belege an.
ohne_zeitenNoAuf true setzen, wenn NUR das Material übernommen werden soll, keine Stunden.
ohne_materialNoAuf true setzen, wenn NUR die Stunden übernommen werden sollen.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.
belegkopf_aus_auftragNoVorgabe true: übernimmt Auftragsnummer, Objektnummer, Objektadresse und Leistungstag/-zeitraum aus dem Auftrag — wie der Knopf „Aus Auftrag & Projekt übernehmen" in Meistron. Auf false setzen, wenn der Belegkopf ausschließlich aus `belegkopf` kommen soll.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes far beyond annotations: explains that the draft has no Rechnungsnummer until sending, that copying from an Auftrag is conditional on settings, that printed Belegkopf fields depend on company settings, and that mixed tax rates are rejected at finalization. This is rich, non-obvious behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but information-dense; each paragraph and sentence contributes a distinct behavior or constraint. Purpose is front-loaded first, followed by order-copying semantics, then Belegkopf details. No filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 11-parameter nested tool with no output schema, the description covers the full workflow: draft creation, number assignment, order inheritance, settings dependencies, tax behavior, and response hints. It gives an agent enough to use the tool correctly in autonomous operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds real semantic value: defaults for betreff, kunde_id and belegkopf; precedence of belegkopf_aus_auftrag; the effect of ohne_material/ohne_zeiten; and the whole-Beleg Steuersatz rule. It describes parameter interactions and business rules, not just field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States clearly: 'Legt einen Rechnungs-ENTWURF an' — a specific verb and resource, and explicitly a draft, not a final invoice. It also says 'Verschickt NICHTS an den Kunden', which distinguishes it from rechnung_versenden.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: describes the usual path via an Auftrag, when own positions should be added, and that no customer dispatch happens. It does not explicitly name exclusions such as 'use angebot_anlegen for quotes', so it lacks full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rechnung_ansehenRechnung ansehenA
Read-onlyIdempotent
Inspect

Zeigt eine einzelne Rechnung vollständig: Betreff, Belegkopf (Auftrags-, Kunden-, Objektnummer, Leistungstag oder -zeitraum), alle Positionen mit Menge, Einheit und Preis, Beträge, Steuer, Rabatt, Zahlungsstand mit Restbetrag bei Teilzahlungen, Mahnstufe und eine etwaige Mahnpause, ob ein festgeschriebenes Original-PDF vorliegt, bei Storno den Grund, Projekt und den zugehörigen Auftrag. Damit lässt sich prüfen, WAS auf der Rechnung steht — nicht nur, wie viel.

ParametersJSON Schema
NameRequiredDescriptionDefault
rechnung_idYesDie Kennung der Rechnung.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only, idempotent, and non-destructive; the description goes further by disclosing exactly what is returned: header data, line items, totals, tax, discounts, payment status, dunning level, pause, original PDF flag, cancellation reason, project, and order. This is rich behavioral context beyond the structured annotations and is especially valuable because there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then uses a structured list of invoice elements, each earning its place by clarifying what will be returned. The closing sentence adds a meaningful usage contrast without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single required parameter, full schema description coverage, and safety annotations, the description is complete for the agent's invocation and expectation-setting. It enumerates the return contents thoroughly, compensating for the absence of an output schema, and no critical calling context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the one parameter, rechnung_id, is already described as 'Die Kennung der Rechnung.' The description adds no additional meaning about the parameter's format or semantics, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the verb 'Zeigt' and a specific resource, 'eine einzelne Rechnung vollständig', immediately establishing the tool's purpose. The long enumeration of fields makes it unmistakably a detail-view tool and distinguishes it from sibling tools like rechnungen_suchen or rechnung_versenden.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for full inspection of one invoice ('einzelne Rechnung vollständig') and adds the purpose statement 'prüfen, WAS auf der Rechnung steht — nicht nur, wie viel.' It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an agent to select it over search or mutation siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rechnungen_suchenRechnungen suchenA
Read-onlyIdempotent
Inspect

Listet Rechnungen mit Nummer, Kunde, Betrag, Status, Fälligkeit und dem noch offenen Restbetrag — bei Teilzahlungen steht der Rest neben dem Rechnungsbetrag und die Zeile ist als teilbezahlt gekennzeichnet. Mit nur_offen die unbezahlten (Restbetrag über null), sortiert nach Alter der Überfälligkeit — das ist der übliche Einstieg für offene Posten. Mit suche findet es eine Rechnung über Teil der Rechnungsnummer oder des Betreffs — auch bezahlte, stornierte und Entwürfe; die Kennung eines Treffers ist die Eingabe für rechnung_ansehen. Interne Kennungen ausschließlich selbst für Folgewerkzeuge verwenden; einen Menschen niemals bitten, eine UUID einzugeben oder zu wiederholen.

ParametersJSON Schema
NameRequiredDescriptionDefault
bisNoSpätestes Rechnungsdatum, JJJJ-MM-TT.
vonNoFrühestes Rechnungsdatum, JJJJ-MM-TT.
sucheNoTeil der Rechnungsnummer (z. B. „0027" oder „RE-2026-0027") oder des Betreffs. Findet auch bezahlte, stornierte und Entwürfe.
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).
nur_offenNoNur Rechnungen mit offenem Restbetrag, älteste Fälligkeit zuerst.
nur_ueberfaelligNoNur solche, deren Fälligkeit verstrichen ist.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description goes beyond these by explaining partial payment display (Rest neben Betrag, Zeile als teilbezahlt), the sorting behavior for `nur_offen` (by age of overdue), and critical handling of UUIDs (never ask humans to input/repeat them). These are concrete behavioral traits not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative but slightly verbose. It front-loads the output fields and then explains partial payments, the `nur_offen` use case, the `suche` behavior, and the UUID rule. Each sentence earns its place, but the UUID guidance could be more tersely phrased. Still, it is well-structured and not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations (read-only, non-destructive, idempotent) and complete schema coverage, the description covers all essential aspects: what fields are returned, the behavior of filters (nur_offen, suche), sorting, and the critical UUID handling. It also implies how results feed into `rechnung_ansehen`. No missing information for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters have descriptions. The tool description adds extra meaning for `nur_offen` (unpaid, sorted by overdue age) and `suche` (finds paid/cancelled/drafts), enriching the agent's understanding beyond the schema's basic descriptions. It does not address `von`, `bis`, `anzahl`, or `nur_ueberfaellig` in the description, but these are adequately covered by the schema, so the added value is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists invoices with key fields (number, customer, amount, status, due date, outstanding balance) and differentiates from siblings like `rechnung_ansehen` (view specific) and `rechnung_anlegen` (create). It also names follow-up tool `rechnung_ansehen` for found IDs. The verb 'Listet' is specific and the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides contextual usage: 'der übliche Einstieg für offene Posten' and explains the `suche` parameter as a way to find specific invoices including paid, cancelled, and drafts. It also advises using internal identifiers only for follow-up tools. However, it does not explicitly contrast with other search siblings (e.g., `auftraege_suchen`, `kunden_suchen`) or list conditions when this tool is not appropriate, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rechnung_versand_vorschauE-Mail-Versandvorschau einer RechnungA
Read-onlyIdempotent
Inspect

Prüft garantiert nur lesend den vollständigen Rechnungsentwurf vor dem E-Mail-Versand: alle Positionen und Summen, Kunde, Empfänger, Mail-Betreff und -Text, der in Meistron gewählte aktive Standard-Absender, Provider, Antwortadresse, die vollständige Anhangsliste sowie ein kurzlebig geschütztes Entwurfs-PDF. Dieses Werkzeug versendet NIEMALS etwas, vergibt KEINE Rechnungsnummer, friert KEIN PDF ein, legt KEINE Freigabe an und verändert KEINE Daten — auch dann nicht, wenn Vollautonomie aktiv ist. Für Fragen wie „zeig mir die Versandvorschau", „welcher Absender wird benutzt?" oder „prüfe vor dem Versand" immer dieses Werkzeug verwenden. Die interne Rechnungskennung vorher selbst mit rechnungen_suchen ermitteln; den Menschen niemals bitten, eine UUID einzugeben oder sie ihm als notwendige Eingabe anzeigen.

ParametersJSON Schema
NameRequiredDescriptionDefault
rechnung_idYesInterne Kennung aus `rechnungen_suchen`. Selbst zwischen Werkzeugen weiterreichen und niemals vom Menschen eintippen lassen.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds value beyond that by guaranteeing 'versendet NIEMALS etwas' and 'verändert KEINE Daten — auch dann nicht, wenn Vollautonomie aktiv ist', which covers autonomous execution edge cases. It also discloses a short-lived protected draft PDF, a behavioral trait not present in the annotations. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: core purpose, inspection scope, negative guarantees, usage triggers, and input workflow. It is front-loaded with the read-only guarantee, then progressively adds details. The length is justified by the need to prevent accidental sends and to state safety guarantees explicitly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with a single required parameter, no output schema, and rich annotations, the description covers the full call precondition, the complete inspection scope, and the safety profile. An agent can correctly select and invoke this tool without missing critical context. The only minor omission is exact return format, but that is not required given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents rechnung_id as the internal ID from rechnungen_suchen, to be passed between tools and never typed by the human. The description repeats this same guidance without adding new semantic details such as format or examples. Since the schema carries the burden, baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Prüft garantiert nur lesend') and a concrete resource ('den vollständigen Rechnungsentwurf vor dem E-Mail-Versand'), enumerating all inspected fields. It explicitly differentiates itself from siblings by listing what it never does (send, assign invoice number, freeze PDF, create release) and points to rechnungen_suchen for ID resolution. This clearly distinguishes it from rechnung_versenden and rechnung_ansehen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit trigger phrases ('zeig mir die Versandvorschau', 'welcher Absender wird benutzt?', 'prüfe vor dem Versand') and mandates this tool for those queries. It also supplies an explicit workflow precondition: resolve rechnung_id via rechnungen_suchen and never ask the human for the UUID. This is strong when-to-use guidance with alternatives implicitly excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rechnung_versendenRechnung versendenA
Destructive
Inspect

Nur für den tatsächlichen Versand verwenden. Für eine bloße Prüfung ohne Datenänderung immer rechnung_versand_vorschau aufrufen. Versendet einen Rechnungs-Entwurf per E-Mail an den Kunden. Dabei wird die Rechnungsnummer vergeben, das PDF eingefroren und der Versand protokolliert; ab dann ist die Rechnung nach GoBD unveränderlich. Die interne Rechnungskennung vorher selbst mit rechnungen_suchen ermitteln; den Menschen niemals bitten, eine UUID einzugeben oder zu wiederholen.

BRIEFE GEHEN ÜBER DIESEN ZUGANG NICHT. Das ist Absicht, kein Fehler: Die Anschrift eines Kunden kann über denselben Zugang angelegt worden sein — ein Brief ginge dann an eine Adresse, die nie ein Mensch geprüft hat, auf Kosten des Post-Guthabens des Betriebs. Wer einen Brief verschicken will, tut das in Meistron. Das dem Handwerker so sagen, statt es anders zu versuchen.

NORMALER MODUS — ZWEI SCHRITTE:

  1. Ohne „freigabe" aufrufen → es geht NICHTS hinaus. Zurück kommt eine Vorschau: alle Positionen und Summen, Empfänger, Mailtext, der in Meistron gewählte Standard-Absender, Antwortadresse, die vollständige Anhangsliste und ein geschütztes Entwurfs-PDF — dazu ein Freigabewort.

  2. Die Vorschau dem Menschen zeigen und ihn ausdrücklich fragen. Erst mit seinem Ja erneut aufrufen, diesmal mit „freigabe".

Das Freigabewort NIEMALS selbst erfinden und den zweiten Schritt NIEMALS ohne ausdrückliche Zustimmung tun. Ausnahme: Hat der Inhaber für genau diesen Zugang in Meistron „Vollzugriff und Vollautonomie" aktiviert, führt der Server den Versand direkt ohne Vorschau-Runde aus. Diesen Modus kann das Modell weder wählen noch einschalten. Eine E-Mail ist nicht zurückholbar und trifft einen echten Kunden.

Empfänger, Betreff und Text lassen sich hier NICHT angeben: Die Rechnung geht an die Adresse, die beim Kunden hinterlegt ist, mit den Vorlagen des Betriebs. Im normalen Modus muss diese Adresse menschlich bestätigt sein. Eine vom KI-Zugang angelegte Kundenadresse ist ausschließlich unter der für denselben Zugang aktivierten Vollautonomie samt E-Mail-Kanal sendefähig und wird in der Antwort so ausgewiesen. Der Absender ist ebenfalls kein Argument: Der Server nutzt exakt den aktiven Standard unter E-Mail-Absender. Nur wenn kein aktiver betrieblicher Absender existiert, wird der Meistron-Systemabsender klar ausgewiesen. Ein fehlender oder ungültiger Default neben aktiven Konten bricht ohne Fallback ab. Wer an eine andere Adresse senden will, ändert sie beim Kunden in Meistron.

ParametersJSON Schema
NameRequiredDescriptionDefault
wegNoNur E-Mail. Briefe lassen sich über diesen Zugang NICHT versenden — sie werden in Meistron ausgelöst.
freigabeNoDas Freigabewort aus der Vorschau (Form „SENDEN-1234"). Nur setzen, wenn der Mensch die Vorschau gesehen und ausdrücklich zugestimmt hat.
rechnung_idYesInterne Kennung des Entwurfs aus `rechnungen_suchen`. Selbst zwischen Werkzeugen weiterreichen und niemals vom Menschen eintippen oder wiederholen lassen. Die Rechnung muss im Status „Entwurf" sein.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No contradiction with annotations (destructiveHint=true, readOnlyHint=false). The description far exceeds the annotation burden: it discloses that sending makes the invoice GoBD-immutable, that an email cannot be recalled, the two-phase behavior where the first call sends nothing out, the server-controlled autonomous mode the model cannot enable, sender fallback rules, and address-verification constraints. This is rich behavioral context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the critical sibling rule, followed by a clear numbered two-step flow and then mode-specific rules. It is long, but the length is earned by the irreversibility of sending invoices to real customers; some safety points (address verification, email non-retrievability) are repeated in different forms, which is defensible for a destructive tool but keeps it from a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Has no output schema, yet the description specifies what the first (preview) call returns — alle Positionen und Summen, Empfänger, Mailtext, Standard-Absender, Antwortadresse, Anhangsliste, geschütztes Entwurfs-PDF and the Freigabewort. With four parameters, two operating modes, an idempotency protocol, and server-side defaults, nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter is already richly described (source via `rechnungen_suchen`, status 'Entwurf', release-word format, idempotency pattern). Above that baseline, the description adds workflow-level meaning: it ties `freigabe` to the two-step call sequence, `idempotency_key` to the fully autonomous mode, and clarifies which parameters apply in which operating mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Versendet einen Rechnungs-Entwurf per E-Mail an den Kunden' (sends an invoice draft by email), and immediately distinguishes itself from the sibling `rechnung_versand_vorschau` by scope: actual sending vs. pure review. The irreversible consequences (Rechnungsnummer vergeben, PDF eingefroren, GoBD-unveränderlich) further pin down what this tool uniquely does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not guidance: 'Nur für den tatsächlichen Versand verwenden. Für eine bloße Prüfung ohne Datenänderung immer `rechnung_versand_vorschau` aufrufen.' It also excludes letters outright ('BRIEFE GEHEN ÜBER DIESEN ZUGANG NICHT') and routes them to Meistron, and encodes a mandatory two-step call pattern (preview without `freigabe`, then send with `freigabe`).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wartungsvertraege_suchenWartungsverträge suchenA
Read-onlyIdempotent
Inspect

Listet die Wartungsverträge des Betriebs mit Kunde, Anlage, Rhythmus und nächster Fälligkeit. Ohne Angaben kommen die zuerst fälligen. Gut für „welche Wartungen stehen im nächsten Monat an?".

ParametersJSON Schema
NameRequiredDescriptionDefault
anzahlNoHöchstens so viele (Vorgabe 25, Grenze 100).
statusNoNur Verträge in diesem Zustand. Ohne Angabe nur aktive.
kunde_idNoNur Verträge dieses Kunden.
faellig_bisNoNur Verträge, die bis zu diesem Tag fällig werden, JJJJ-MM-TT.
nur_ueberfaelligNoNur Verträge, deren Fälligkeit schon vorbei ist.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly and idempotent hints, so the description need not repeat safety. It adds the default ordering (due soonest first) and the returned fields, which is useful but not extensive. There is no mention of pagination or limits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one sentence stating the purpose, one for default behavior, and one for a typical use case. It front-loads the core action and avoids superfluous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich annotations (readOnly, idempotent, non-destructive) and full schema coverage, the description provides sufficient context. It states the output fields and a practical use case, making it complete for a search tool without needing to explain return formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters with descriptions (100% coverage), so the description adds no extra parameter semantics. The mention of output fields is helpful but not about parameters. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists maintenance contracts with specific fields (customer, system, rhythm, next due date), distinguishing it from sibling search tools like order or invoice searches. It also mentions default behavior for no arguments, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete use case ("welche Wartungen stehen im nächsten Monat an?") and explains default behavior, but it does not explicitly contrast with alternatives like wartungsvertrag_ansehen or other search tools. Still, the context is clear enough for appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wartungsvertrag_aendernWartungsvertrag ändernAInspect

Ändert einen Wartungsvertrag: Rhythmus, nächste Fälligkeit, Anlage, Zuständige, Erinnerungsstufen — oder setzt ihn auf Pause bzw. beendet ihn. Änderungen ziehen in noch nicht begonnene Wartungsaufträge nach; laufende und abgeschlossene bleiben unberührt. Nur die angegebenen Felder werden geändert.

ParametersJSON Schema
NameRequiredDescriptionDefault
grundNoNur bei `ended`: warum der Vertrag endet.
notizNoNeue interne Notiz.
titelNoNeuer Titel.
anlageNoNeuer Anlagentext.
zustandNoPausieren (`paused`) hält die Serie an, ohne sie zu verlieren — beim Fortsetzen (`active`) wird eine versäumte Wartung nachgeholt. Beenden (`ended`) erzeugt keine neuen Aufträge mehr; bereits angelegte bleiben.
rhythmusNoNeuer Rhythmus. Wirkt auf jeden künftigen Termin.
pause_bisNoNur bei `paused`: bis zu diesem Tag ruht die Serie, JJJJ-MM-TT.
vertrag_idYesDie Kennung des Wartungsvertrags.
mitarbeiterNoErsetzt die Zuständigen vollständig — wer hier fehlt, ist danach nicht mehr zuständig.
beschreibungNoNeue Beschreibung.
vorlauf_tageNoNeuer Vorlauf in Tagen (0 bis 60).
dauer_minutenNoNeue Dauer in Minuten (15 bis 1440).
rhythmus_tageNoNur bei `custom_days`: Abstand in Tagen (1 bis 3650).
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.
erinnerung_7_tageNoErinnerung 7 Tage vorher ein- oder ausschalten.
erinnerung_14_tageNoErinnerung 14 Tage vorher ein- oder ausschalten.
erinnerung_30_tageNoErinnerung 30 Tage vorher ein- oder ausschalten.
naechste_faelligkeitNoNeue Fälligkeit, JJJJ-MM-TT. Muss in der Zukunft liegen.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Die Beschreibung offenbart wesentliche Seiteneffekte: Änderungen ziehen in noch nicht begonnene Wartungsaufträge nach, während laufende und abgeschlossene unberührt bleiben. Sie stellt zudem klar, dass es sich um eine partielle Aktualisierung handelt („Nur die angegebenen Felder werden geändert“). Das geht deutlich über die Annotationen hinaus.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Drei Sätze ohne Redundanz: Der erste benennt Aktion und Felder, der zweite die Seiteneffekte, der dritte die partielle Update-Logik. Jeder Satz trägt zur korrekten Nutzung bei.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Für ein komplexes Werkzeug mit 18 Parametern sind die Querschnittsregeln (Nachziehen in Aufträge, Partial-Update, Pause/Ende-Verhalten) gut abgedeckt. Ein Hinweis auf das Rückgabeformat oder die Notwendigkeit einer bestehenden Vertrags-ID wäre noch hilfreich, ist aber durch Schema und Kontext teilweise abgedeckt.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Die Schema-Abdeckung ist mit 100 % bereits sehr hoch, daher liegt die Basis bei 3. Die Beschreibung fügt mit „Nur die angegebenen Felder werden geändert“ eine übergreifende Semantik hinzu, die für alle Parameter gilt und im Schema so nicht explizit steht.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Die Beschreibung nennt ein spezifisches Verb („Ändert einen Wartungsvertrag“) und listet die betroffenen Felder sowie die Sonderfälle Pause/Beenden auf. Sie grenzt das Werkzeug klar von den Geschwistern wartungsvertrag_anlegen, wartungsvertrag_ansehen und wartungsvertraege_suchen ab.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Der Verwendungszweck ist eindeutig: Änderung eines bestehenden Wartungsvertrags. Es fehlen jedoch explizite Ausschlusskriterien oder Verweise auf Alternativen (z. B. „zum Anlegen nutze wartungsvertrag_anlegen“), was den Score knapp unter die Bestbewertung drückt.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wartungsvertrag_anlegenWartungsvertrag anlegenAInspect

Legt einen wiederkehrenden Wartungsvertrag an — Kunde, Rhythmus und erste Fälligkeit sind Pflicht. Die Vertragsnummer vergibt Meistron. Die Fälligkeit muss in der Zukunft liegen. Legt KEINEN Auftrag an: Der entsteht erst kurz vor der Fälligkeit von selbst. Verschickt NICHTS — der Kunde erfährt davon nichts, die Erinnerungen gehen an den Betrieb.

ParametersJSON Schema
NameRequiredDescriptionDefault
notizNoInterne Notiz zum Vertrag.
titelYesWorum es geht, etwa „Jährliche Heizungswartung".
anlageNoWas gewartet wird, im Klartext — „Gastherme Vaillant, Baujahr 2019, Keller".
kunde_idYesKennung des Kunden — über `auftraege_suchen` oder `kunde_anlegen` zu bekommen.
rhythmusYesWie oft. Bei `custom_days` zusätzlich `rhythmus_tage` angeben.
objekt_ortNoOrt der Anlage.
objekt_plzNoPostleitzahl der Anlage.
mitarbeiterNoWer die Wartung macht und die Erinnerungen bekommt — Kennungen aus `mitarbeiter_auflisten`.
beschreibungNoWas bei der Wartung zu tun ist.
vorlauf_tageNoWie viele Tage vor der Fälligkeit der Auftrag entsteht (0 bis 60, Vorgabe 7). 0 schaltet die Automatik ab.
dauer_minutenNoWie lange die Wartung üblicherweise braucht (15 bis 1440, Vorgabe 90).
rhythmus_tageNoNur bei `custom_days`: Abstand in Tagen (1 bis 3650).
objekt_strasseNoAnschrift der Anlage, falls sie nicht beim Kunden steht.
idempotency_keyNoIm vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.
naechste_faelligkeitYesErster Termin, JJJJ-MM-TT. Muss in der Zukunft liegen.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations being minimal (all false hints, no safety profile), the description carries the behavioral disclosure burden and succeeds. It reveals that the contract number is assigned by Meistron (so the agent should not expect to supply one), that the due date must be in the future (validation boundary), and — critically for a write operation — the side-effect limits: no order is created (it emerges automatically later) and no customer notification is sent (reminders go only to the company). This prevents the agent from assuming hidden downstream effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four short sentences with zero filler; each sentence earns its place and the main purpose plus mandatory fields are front-loaded. The negative side-effect disclosures are appropriately emphasized with capitalization ('KEINEN Auftrag', 'NICHTS'), though placing these caveats before the contract-number detail would have made the structure slightly stronger.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter creation tool with no output schema and no meaningful annotations, the description covers the essential decision-relevant behavior: required fields, date validation, numbering responsibility, and side-effect boundaries. The only gap is that it never indicates what the call returns (contract ID, success confirmation, the idempotency key flow hinted at in the schema), which matters more because there is no output schema to document it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3 and the description need not repeat parameter details. It adds modest value beyond the schema by explaining that the contract number is generated by Meistron (clarifying an absent parameter/capability) and reinforcing which three fields are mandatory, but most of the parameter-level meaning lives in the schema descriptions already.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Legt einen wiederkehrenden Wartungsvertrag an' — creating a recurring maintenance contract. It also distinguishes itself from siblings by explicitly disclaiming what it is not: it creates no order (differentiating from auftrag_anlegen) and sends no notifications (differentiating from rechnung_versenden). The 'wiederkehrend' qualifier separates it from one-off contract or order tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: it names the mandatory inputs (Kunde, Rhythmus, erste Fälligkeit, matching the schema's required fields) and states the date must be in the future. It gives exclusionary guidance by stating it creates no order and sends nothing, helping an agent decide whether this tool fits the goal — though it never names an alternative tool explicitly for when an order or customer communication is actually wanted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wartungsvertrag_ansehenWartungsvertrag ansehenA
Read-onlyIdempotent
Inspect

Zeigt einen Wartungsvertrag ausführlich: Rhythmus, nächste Fälligkeit, Objektanschrift, Anlage, Zuständige, Erinnerungsstufen — und die bereits daraus entstandenen Aufträge.

ParametersJSON Schema
NameRequiredDescriptionDefault
vertrag_idYesDie Kennung des Wartungsvertrags.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context by specifying exactly what fields are returned and noting that it includes orders that have already arisen from the contract, which is not evident from annotations alone. 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the action ('Zeigt') and uses a colon to efficiently list the included details. Every element earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one required parameter, no output schema), the description is reasonably complete: it enumerates the key fields returned and alerts the user that generated orders are included. It does not describe the return format or error behavior, but these are less critical for a simple read-only view, so the minor gap is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage: vertrag_id is described as 'Die Kennung des Wartungsvertrags.' The tool description does not add further semantic detail about the parameter, but with full schema coverage the baseline of 3 is appropriate—the schema already handles the semantic burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it shows ('Zeigt') a maintenance contract in detail and enumerates specific fields (Rhythmus, nächste Fälligkeit, Objektanschrift, Anlage, Zuständige, Erinnerungsstufen) plus derived orders. This verb+resource structure distinguishes it from sibling tools like wartungsvertraege_suchen (search) and wartungsvertrag_aendern (edit).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage—when you need full details of a single contract, this is the view tool—but it does not explicitly state when to use this tool versus alternatives like wartungsvertraege_suchen. No exclusions or alternative names are mentioned, relying on the tool name and context to convey positioning.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

zeiten_auswertenArbeitszeiten auswertenA
Read-onlyIdempotent
Inspect

Fasst die erfassten Arbeitszeiten eines Zeitraums zusammen — je Mitarbeiter die Summe der Stunden und die Zahl der erfassten Tage. Nennt auch Tage, an denen das Ausstempeln fehlt, denn die zählen nirgends mit.

ParametersJSON Schema
NameRequiredDescriptionDefault
bisYesLetzter Tag, JJJJ-MM-TT.
vonYesErster Tag, JJJJ-MM-TT.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral nuance by noting that days with missing clock-out are also listed and do not count, which goes beyond structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the core purpose and output, the second adds an important caveat about missing clock-outs. No filler words, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the input (period), the output (per-employee sums, day counts, missing clock-out days), and a data quality note. It does not describe sort order or exact JSON structure, but given the absence of an output schema and the tool's simplicity, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters 'von' and 'bis' are fully described in the schema with date format descriptions. The tool description only references 'eines Zeitraums', confirming the period but adding no extra semantics. With 100% schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Fasst zusammen' with the resource 'erfassten Arbeitszeiten eines Zeitraums' and details the output per employee. It clearly distinguishes from sibling tools like 'mitarbeiter_auflisten' by focusing on summarizing time records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a summary of working hours for a period is needed, giving clear context. It does not explicitly state exclusions or alternatives, but no direct sibling for this task exists among the listed tools, so the implied guidance is sufficient.

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.

  1. 4 tool updates
    • Changedangebot_anlegen4 fields changed
      • changedInput schema / properties / auftrag_id / description
        Previous value: -"Auftrag, dessen Material und Arbeitszeit übernommen werden sollen."New value: +"Auftrag, dessen Material und Arbeitszeit übernommen werden sollen — und aus dem Betreff und Belegkopf gefüllt werden."
      • addedInput schema / properties / belegkopf
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Angaben rechts oben im Belegkopf. Ohne Angabe werden Auftragsnummer, Objekt und Leistungszeitraum aus dem Auftrag übernommen (siehe `belegkopf_aus_auftrag`); jede Angabe hier gewinnt je Feld. Gedruckt wird NUR, was der Betrieb unter Rechnungen → Einstellungen „Angaben im Belegkopf\" gewählt hat — die Antwort sagt, welche Angaben deshalb nicht auf dem Beleg stehen. Die Kundennummer lässt sich hier nicht setzen; sie kommt aus dem Kundenstamm.",
        +  "properties": {
        +    "auftragsnummer": {
        +      "description": "Auftragsnummer(n) auf dem Beleg, mehrere durch Komma. Vorgabe: die des Auftrags.",
        +      "maxLength": 60,
        +      "type": "string"
        +    },
        +    "kundenreferenz": {
        +      "description": "Bestell- oder Vorgangsnummer des Kunden („Ihre Nr.\"), z. B. PO-4711.",
        +      "maxLength": 60,
        +      "type": "string"
        +    },
        +    "leistung_bis": {
        +      "description": "Ende des Leistungszeitraums, JJJJ-MM-TT.",
        +      "type": "string"
        +    },
        +    "leistung_modus": {
        +      "description": "`tag` druckt einen Leistungstag (`leistung_von`), `zeitraum` eine Spanne (`leistung_von` bis `leistung_bis`), `keine` druckt nichts. Ohne Angabe ergibt sich der Modus aus den Daten bzw. aus dem Termin des Auftrags.",
        +      "enum": [
        +        "keine",
        +        "tag",
        +        "zeitraum"
        +      ],
        +      "type": "string"
        +    },
        +    "leistung_von": {
        +      "description": "Leistungstag oder Beginn, JJJJ-MM-TT.",
        +      "type": "string"
        +    },
        +    "leistungsempfaenger": {
        +      "description": "Wer die Leistung erhalten hat, wenn nicht der Rechnungsempfänger — etwa der Mieter.",
        +      "maxLength": 200,
        +      "type": "string"
        +    },
        +    "objektadresse": {
        +      "description": "Bezeichnung des Objekts, z. B. „Wohnanlage Süd, Haus 3\". Vorgabe: Projektname, sonst Ort des Auftrags.",
        +      "maxLength": 200,
        +      "type": "string"
        +    },
        +    "objektnummer": {
        +      "description": "Objekt- oder Projektnummer. Vorgabe: die Nummer des Projekts am Auftrag.",
        +      "maxLength": 60,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / belegkopf_aus_auftrag
        Added value: +{
        +  "description": "Vorgabe true: übernimmt Auftragsnummer, Objektnummer, Objektadresse und Leistungstag/-zeitraum aus dem Auftrag — wie der Knopf „Aus Auftrag & Projekt übernehmen\" in Meistron. Auf false setzen, wenn der Belegkopf ausschließlich aus `belegkopf` kommen soll.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / betreff
        Added value: +{
        +  "description": "Betreff des Angebots, eine Zeile unter der Belegnummer (z. B. „Heizungswartung Reihenhaus\"). Ohne Angabe wird der Titel des Auftrags übernommen.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedauftraege_suchen2 fields changed
      • addedInput schema / properties / kunde_id
        Added value: +{
        +  "description": "Nur Aufträge dieses Kunden — die Kennung aus `kunden_suchen`.",
        +  "type": "string"
        +}
      • addedInput schema / properties / suche
        Added value: +{
        +  "description": "Teil der Auftragsnummer oder des Titels, z. B. „0118\" oder „Heizung\". Ohne Zeitraum werden dann auch vergangene Aufträge gefunden, nicht nur anstehende.",
        +  "maxLength": 60,
        +  "type": "string"
        +}
    • Changedrechnung_anlegen4 fields changed
      • changedInput schema / properties / auftrag_id / description
        Previous value: -"Auftrag, dessen Material und Arbeitszeit übernommen werden sollen."New value: +"Auftrag, dessen Material und Arbeitszeit übernommen werden sollen — und aus dem Betreff und Belegkopf gefüllt werden."
      • addedInput schema / properties / belegkopf
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Angaben rechts oben im Belegkopf. Ohne Angabe werden Auftragsnummer, Objekt und Leistungszeitraum aus dem Auftrag übernommen (siehe `belegkopf_aus_auftrag`); jede Angabe hier gewinnt je Feld. Gedruckt wird NUR, was der Betrieb unter Rechnungen → Einstellungen „Angaben im Belegkopf\" gewählt hat — die Antwort sagt, welche Angaben deshalb nicht auf dem Beleg stehen. Die Kundennummer lässt sich hier nicht setzen; sie kommt aus dem Kundenstamm.",
        +  "properties": {
        +    "auftragsnummer": {
        +      "description": "Auftragsnummer(n) auf dem Beleg, mehrere durch Komma. Vorgabe: die des Auftrags.",
        +      "maxLength": 60,
        +      "type": "string"
        +    },
        +    "kundenreferenz": {
        +      "description": "Bestell- oder Vorgangsnummer des Kunden („Ihre Nr.\"), z. B. PO-4711.",
        +      "maxLength": 60,
        +      "type": "string"
        +    },
        +    "leistung_bis": {
        +      "description": "Ende des Leistungszeitraums, JJJJ-MM-TT.",
        +      "type": "string"
        +    },
        +    "leistung_modus": {
        +      "description": "`tag` druckt einen Leistungstag (`leistung_von`), `zeitraum` eine Spanne (`leistung_von` bis `leistung_bis`), `keine` druckt nichts. Ohne Angabe ergibt sich der Modus aus den Daten bzw. aus dem Termin des Auftrags.",
        +      "enum": [
        +        "keine",
        +        "tag",
        +        "zeitraum"
        +      ],
        +      "type": "string"
        +    },
        +    "leistung_von": {
        +      "description": "Leistungstag oder Beginn, JJJJ-MM-TT.",
        +      "type": "string"
        +    },
        +    "leistungsempfaenger": {
        +      "description": "Wer die Leistung erhalten hat, wenn nicht der Rechnungsempfänger — etwa der Mieter.",
        +      "maxLength": 200,
        +      "type": "string"
        +    },
        +    "objektadresse": {
        +      "description": "Bezeichnung des Objekts, z. B. „Wohnanlage Süd, Haus 3\". Vorgabe: Projektname, sonst Ort des Auftrags.",
        +      "maxLength": 200,
        +      "type": "string"
        +    },
        +    "objektnummer": {
        +      "description": "Objekt- oder Projektnummer. Vorgabe: die Nummer des Projekts am Auftrag.",
        +      "maxLength": 60,
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / belegkopf_aus_auftrag
        Added value: +{
        +  "description": "Vorgabe true: übernimmt Auftragsnummer, Objektnummer, Objektadresse und Leistungstag/-zeitraum aus dem Auftrag — wie der Knopf „Aus Auftrag & Projekt übernehmen\" in Meistron. Auf false setzen, wenn der Belegkopf ausschließlich aus `belegkopf` kommen soll.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / betreff
        Added value: +{
        +  "description": "Betreff der Rechnung, eine Zeile unter der Belegnummer (z. B. „Heizungswartung Reihenhaus\"). Ohne Angabe wird der Titel des Auftrags übernommen.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedrechnungen_suchen2 fields changed
      • changedInput schema / properties / nur_offen / description
        Previous value: -"Nur unbezahlte Rechnungen, älteste Fälligkeit zuerst."New value: +"Nur Rechnungen mit offenem Restbetrag, älteste Fälligkeit zuerst."
      • addedInput schema / properties / suche
        Added value: +{
        +  "description": "Teil der Rechnungsnummer (z. B. „0027\" oder „RE-2026-0027\") oder des Betreffs. Findet auch bezahlte, stornierte und Entwürfe.",
        +  "maxLength": 60,
        +  "type": "string"
        +}
  2. 14 tool updates
    • Changedangebot_anlegen2 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / steuersatz
        Added value: +{
        +  "description": "Steuersatz für den GESAMTEN Beleg in Prozent — 19, 7 oder 0. Ohne Angabe der im Betrieb hinterlegte Satz. Ein Beleg trägt genau EINEN Satz, im Kopf wie in jeder Position; gemischte Sätze lehnt Meistron beim Finalisieren ab. Wer beides braucht, legt zwei Belege an.",
        +  "type": "number"
        +}
    • Changedauftrag_aendern1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changedauftrag_anlegen1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changeddatei_anfordern2 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / lieferant_id / description
        Previous value: -"NUR bei zweck=datanorm: von welchem Lieferanten die Preisdatei kommt. Ohne Angabe landet sie im Speicher, aber nicht in der Import-Liste. „lieferanten_auflisten\" nennt die Kennungen."New value: +"PFLICHT bei zweck=datanorm: von welchem Lieferanten die Preisdatei kommt. Ohne gültige Kennung wird keine Anforderung angelegt. „lieferanten_auflisten\" nennt die Kennungen."
    • Changedeinstellungen_aendern1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changedkunde_anlegen4 fields changed
      • addedInput schema / properties / email
        Added value: +{
        +  "description": "E-Mail-Adresse des Kunden. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.",
        +  "maxLength": 254,
        +  "pattern": "^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / mobil
        Added value: +{
        +  "description": "Mobilnummer. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.",
        +  "maxLength": 30,
        +  "pattern": "^\\+?[0-9 ()/.-]{3,30}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / telefon
        Added value: +{
        +  "description": "Festnetznummer. Nur mit serverseitig aktiver Vollautonomie für diesen Zugang.",
        +  "maxLength": 30,
        +  "pattern": "^\\+?[0-9 ()/.-]{3,30}$",
        +  "type": "string"
        +}
    • Addedkunden_suchen
    • Changedmaterial_buchen1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changedmaterial_zuweisen1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changedrechnung_anlegen2 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / steuersatz
        Added value: +{
        +  "description": "Steuersatz für den GESAMTEN Beleg in Prozent — 19, 7 oder 0. Ohne Angabe der im Betrieb hinterlegte Satz. Ein Beleg trägt genau EINEN Satz, im Kopf wie in jeder Position; gemischte Sätze lehnt Meistron beim Finalisieren ab. Wer beides braucht, legt zwei Belege an.",
        +  "type": "number"
        +}
    • Addedrechnung_versand_vorschau
    • Changedrechnung_versenden2 fields changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / rechnung_id / description
        Previous value: -"Die Kennung des Entwurfs. Muss im Status „Entwurf\" sein."New value: +"Interne Kennung des Entwurfs aus `rechnungen_suchen`. Selbst zwischen Werkzeugen weiterreichen und niemals vom Menschen eintippen oder wiederholen lassen. Die Rechnung muss im Status „Entwurf\" sein."
    • Changedwartungsvertrag_aendern1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
    • Changedwartungsvertrag_anlegen1 field changed
      • addedInput schema / properties / idempotency_key
        Added value: +{
        +  "description": "Im vollautonomen Betrieb erforderlich. Beim ersten Aufruf weglassen: Der Server liefert dann einen UUID-Key, ohne die Aktion auszuführen. Den Aufruf mit diesem Key wiederholen und bei Retry/Reconnect denselben Key verwenden. Eine neue beabsichtigte Aktion braucht einen neuen Key.",
        +  "format": "uuid",
        +  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
        +  "type": "string"
        +}
  3. 4 tool updates
    • Addedwartungsvertraege_suchen
    • Addedwartungsvertrag_aendern
    • Addedwartungsvertrag_anlegen
    • Addedwartungsvertrag_ansehen
  4. 1 tool update
    • Changeddatei_anfordern1 field changed
      • changedInput schema / properties / gehoert_zu_auftrag / description
        Previous value: -"Kennung des Auftrags, zu dem die Datei gehört. Ohne Angabe wird sie nur abgelegt und nicht einsortiert."New value: +"Kennung des Auftrags, zu dem die Datei gehört. Der Vermerk am Auftrag wird gesetzt; eine Ansicht, die dort abgelegte Dateien anzeigt, gibt es zurzeit noch nicht — nur ein Bild (zweck=bild) erscheint sichtbar in den Fotos des Auftrags. Sag dem Nutzer nichts anderes zu."
  5. 23 tool updates
    • First observedangebot_anlegen
    • First observedangebote_suchen
    • First observedauftraege_suchen
    • First observedauftrag_aendern
    • First observedauftrag_anlegen
    • First observedauftrag_ansehen
    • First observedbetrieb_ueberblick
    • First observeddatei_anfordern
    • First observeddatei_stand
    • First observedeinstellungen_aendern
    • First observedeinstellungen_ansehen
    • First observedkunde_anlegen
    • First observedlieferanten_auflisten
    • First observedmaterial_ansehen
    • First observedmaterial_buchen
    • First observedmaterial_suchen
    • First observedmaterial_zuweisen
    • First observedmitarbeiter_auflisten
    • First observedrechnung_anlegen
    • First observedrechnung_ansehen
    • First observedrechnung_versenden
    • First observedrechnungen_suchen
    • First observedzeiten_auswerten

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables trades and field service work to be tracked per job: logging labor hours at worker rates and materials used, keeping running totals in integer cents per currency, and moving each job through a status machine from open to invoiced or archived. It also produces daily or weekly summaries of hours and value, and renders a printable card with a signature line for client sign-off.
    11
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A local-first MCP server for creating PDF invoices from SQLite data, supporting client management and invoice generation.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources