Skip to main content
Glama

Rechnung anlegen

rechnung_anlegen

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.

Input Schema

TableJSON 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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema 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"
      +}
  2. Changed2 schema 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"
      +}
  3. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources