Skip to main content
Glama

Angebot anlegen

angebot_anlegen

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.

Input Schema

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

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 des Angebots, 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.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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources