FrankKi
Server Details
The agentic layer of letters. Agents send real printed mail worldwide, German compliance built in.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- datPascal/frankki-mcp
- GitHub Stars
- 1
- Server Listing
- FrankKi MCP
Available Tools
72 toolsaddress_listAdressen auflistenBRead-onlyInspect
Listet die Adressen im Partner-Adressbuch. Optional nach Name, Stadt oder Mandant gefiltert. EN: Lists the addresses in the partner address book. Optionally filtered by name, city or client.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| reasoning | No | ||
| searchQuery | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'listet' is consistent with that, so there is no contradiction. The description adds the partner address-book scope and optional filtering as context, but it does not disclose pagination behavior, result format, or other side effects beyond what annotations establish.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action, but it repeats the same content in German and English, creating redundancy. The bilingual duplication may be intentional, but it prevents the description from being maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description covers the resource and search filters, and annotations cover the safety profile. It still leaves limit and reasoning undocumented and provides no guidance on when to choose address_search_company instead, so it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameter meaning. It clarifies that searchQuery can filter by name, city, or client, but it leaves limit and reasoning undocumented, making those parameters ambiguous for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Listet' (lists) with the resource being 'addresses in the partner address book' and states optional filters by name, city, or client. It clearly conveys the operation, though it does not explicitly contrast it with the sibling address_search_company, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that the tool lists addresses and may optionally be filtered, implying a read/listing scenario. However, it gives no explicit when-to-use guidance, no exclusions, and does not mention alternative tools such as address_search_company or address_upsert.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
address_search_companyFirmenadresse suchenBRead-onlyInspect
Sucht Firmen und Behörden im Verzeichnis und liefert die passende Versandadresse inklusive Behörden-Postfach. EN: Searches companies and public authorities in the directory and returns the matching mailing address including an authority PO box.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| country | No | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only and non-destructive, and the description aligns with that by using 'Sucht' and 'liefert' rather than mutation verbs. It adds useful context about the directory scope and the authority PO box, but it does not disclose behavior for no matches, multiple matches, or malformed queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose, and the bilingual German/English pair makes it broadly readable. The English translation duplicates the German sentence exactly, adding length without new information, which keeps it from a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter documentation, the description is the only source of behavioral and semantic context. It covers the return value in general terms but leaves the country/reasoning parameters undefined and gives no guidance on result ambiguity or edge cases, so an agent cannot fully predict the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter descriptions (0% coverage), so the tool description must clarify parameters. It clarifies that the search targets company/authority names and makes query semantics inferable, but it does not explain the optional country parameter or the reasoning parameter at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: searching companies and public authorities in a directory and returning the matching mailing address, including authority PO boxes. This clearly differentiates the tool from sibling address tools like address_validate (validation) and address_list (listing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when an agent needs a directory lookup for a company or authority mailing address. However, it does not state when to prefer an alternative, such as address_validate for validation or address_list for browsing, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
address_upsertAdresse speichernAInspect
Legt eine Adresse im Partner-Adressbuch an oder aktualisiert sie. Validiert die Adresse anhand landesspezifischer Regeln. EN: Creates or updates an address in the partner address book. Validates the address using country-specific rules.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | Yes | ||
| name | Yes | ||
| pobox | No | ||
| street | Yes | ||
| company | No | ||
| country | No | ISO-3166-alpha-2, default DE. EN: ISO 3166-1 alpha-2, defaults to DE. | |
| addressId | No | ||
| isDefault | No | ||
| addressType | No | ||
| houseNumber | No | ||
| mandantennummer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=false and destructiveHint=false, so the mutation profile is known. The description adds the useful behavioral fact that the address is validated using country-specific rules. However, it does not disclose upsert semantics, such as whether addressId selects an existing record for update, what happens on validation failure, or whether omitted fields are preserved or overwritten.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, in German and English, front-load the operation and validation behavior without extraneous detail. The bilingual duplication is justified in a German-context tool and every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter upsert with no output schema, the description is too thin. It omits create-vs-update selection, country defaulting, validation failure behavior, and any explanation of the listed address attributes. An agent would need to infer or probe the tool to call it correctly in non-trivial cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 8%, so the description needed to carry most parameter meaning, but it does not. It only broadly implies that fields like name, street, and city are address-book attributes and that country matters for validation. It fails to explain the create-vs-update role of addressId, the meaning of isDefault, addressType, mandantennummer, or behavior around required fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Creates or updates an address in the partner address book' and adds a distinct behavior, country-specific validation. This clearly separates it from read-only siblings like address_list and address_search_company, and from address_validate, whose exclusive purpose is validation. The bilingual text reinforces the intended resource and operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: call this tool when an address needs to be created or updated in the partner address book. It does not explicitly name alternatives or state when not to use it, such as directing validation-only needs to address_validate. Thus it provides clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
address_validateAdresse prüfenARead-onlyInspect
Prüft eine Adresse anhand landesspezifischer Regeln und meldet harte Fehler als ADDRESS_INVALID. Nur eine Prüfung, das Adressbuch bleibt unverändert; zum Anlegen oder Ändern einer Adresse nimm address_upsert. EN: Validates an address using country-specific rules and reports hard failures as ADDRESS_INVALID. A check only, the address book is left untouched; to create or change an address use address_upsert.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ||
| city | Yes | ||
| name | Yes | ||
| pobox | No | ||
| street | Yes | ||
| company | No | ||
| country | No | ISO-3166-alpha-2, default DE. EN: ISO 3166-1 alpha-2, defaults to DE. | |
| isDefault | No | ||
| reasoning | No | ||
| addressType | No | ||
| houseNumber | No | ||
| mandantennummer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable behavioral context beyond that: 'the address book is left untouched', 'country-specific rules', and the specific failure result 'ADDRESS_INVALID'. The only minor gap is no mention of success return values or soft-warning behavior, so it's not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: first sentence states purpose and result, second sentence clarifies non-mutation and routes to the alternative. The bilingual version is not wasteful; every sentence carries meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, read-only behavior, and the hard-failure result, and it identifies the correct sibling for mutations. However, with 12 parameters and no output schema, it omits what a successful validation returns, how soft failures are handled, and any input-format expectations. This is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 8% (only 'country' is documented), and the description does not compensate. It does not explain the meaning or expected format of name, street, city, zip, houseNumber, or other parameters, nor how they relate to the validation logic beyond the generic 'address' context. This leaves the agent to infer parameter semantics from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('validates an address using country-specific rules') and a concrete outcome ('reports hard failures as ADDRESS_INVALID'). It also explicitly distinguishes itself from address_upsert by naming it as the tool for creating or changing an address, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: it is 'a check only' and should not be used for mutation, and it directly names the alternative tool (address_upsert) for creating or changing an address. This leaves no ambiguity about when to choose this tool over its sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analytics_summaryAuswertungen abrufenARead-onlyInspect
Liefert die aggregierten Kennzahlen des Partnerkontos: Briefe pro Monat, Kosten pro Mandant zur Weiterberechnung, Laufzeiten bis zur Zustellung, Fehlerquoten und Ausgaben gegen die gesetzten Limits. Betraege sind Netto-Kosten in Cent. EN: Returns the partner account's aggregated metrics: letters per month, cost per mandant for rebilling, transit times to delivery, failure rates, and spend against configured limits. Amounts are net cost in cents.
| Name | Required | Description | Default |
|---|---|---|---|
| topN | No | Anzahl Mandanten in cost_per_mandant, 1 bis 50, Standard 10. EN: Number of mandants in cost_per_mandant, 1 to 50, default 10. | |
| since | No | Zeitraumbeginn fuer cost_per_mandant und delivery_times, zum Beispiel 2026-01-01. Standard: letzte 90 Tage. EN: Range start, for example 2026-01-01. Default: last 90 days. | |
| until | No | Zeitraumende, Standard jetzt. EN: Range end, default now. | |
| metric | No | Welche Auswertung. overview (Standard) fasst die letzten drei Monate zusammen. EN: Which report. overview (default) summarises the last three months. | |
| months | No | Trendlaenge fuer letters_per_month und failure_rates, 1 bis 24, Standard 12. EN: Trend length for letters_per_month and failure_rates, 1 to 24, default 12. | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false, annotations already cover the safety profile. The description adds useful behavioral context beyond that: results are aggregated rather than raw records, and monetary amounts are net costs in euro-cents, which matters for interpreting the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses a short, useful second sentence for the unit clarification. The bilingual DE/EN repetition is intentional in this schema family, but it is the only slight redundancy; otherwise the text is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analytics tool with six optional parameters and no output schema, the description covers all returned metric categories and the critical net-cents unit. Defaults and ranges are handled by the schema. The main gap is that the 'reasoning' parameter is left unexplained in both the description and the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 83%, so the schema already documents most parameter meaning. The description adds some business context for metric values like 'Kosten pro Mandant zur Weiterberechnung' and 'Ausgaben gegen die gesetzten Limits', but it does not clarify the undocumented 'reasoning' parameter or add syntax-level detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Liefert' and the resource 'aggregierten Kennzahlen des Partnerkontos', then enumerates the concrete metric groups returned. It is clear and not a tautology, but it never contrasts itself with sibling tools, so sibling differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it implicitly clear that the tool is for partner-account aggregated analytics, which helps an agent select it for KPI requests. However, it does not state explicit when-to-use or when-not-to-use conditions, nor does it name alternative tools such as letter_list or order_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_decideFreigabe entscheidenADestructiveInspect
Gibt eine wartende Freigabe im Namen des Menschen frei oder lehnt sie ab. WICHTIG: Bevor du hier 'approve' aufrufst, MUSST du dem Menschen (a) den Vorschau-Link (previewUrl) des Briefs, (b) den genauen Gesamtpreis in Euro und (c) die Versandart (z. B. Einschreiben Uebergabe oder Standard) zeigen und seine ausdrueckliche Zustimmung einholen; setze dann user_saw_preview:true. Bei Freigabe per Chat geht der Brief erst nach 10 Minuten raus; bis dahin kann der Mensch ihn stoppen (sage einfach 'stopp', dann rufst du order_cancel auf). Bei Ablehnung bleibt der Brief ein Entwurf und die Reservierung wird zurueckgebucht. EN: Approves or rejects a pending approval on the human's behalf. IMPORTANT: before calling 'approve' here you MUST show the human (a) the preview link (previewUrl) of the letter, (b) the exact total price in euros and (c) the delivery type (e.g. registered mail hand delivery or standard) and obtain their explicit consent; then set user_saw_preview:true. A chat approval dispatches after a 10-minute grace window: the letter goes out then and can be stopped until it does (if the human says 'stop', call order_cancel). On rejection the letter stays a draft and the reservation is refunded.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | ||
| decision | Yes | ||
| reasoning | No | ||
| approvalId | Yes | ||
| clientOrderId | No | ||
| user_saw_preview | No | Bestaetigung, dass du dem Menschen die Vorschau-PDF, den genauen Preis und die Versandart gezeigt und seine Zustimmung eingeholt hast. Fuer eine Freigabe erforderlich. EN: Confirmation that you showed the human the preview PDF, the exact price and the delivery type and obtained consent. Required to approve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (destructiveHint=true, readOnlyHint=false) already flag mutation and destructiveness, and the description goes well beyond them: it discloses the 10-minute grace window before dispatch, the ability to cancel via order_cancel, that rejection keeps the letter as a draft, and that the reservation is refunded. These consequences are not derivable from annotations and are exactly what an agent needs before a destructive decision.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each language block (DE/EN) is well-structured — purpose, mandatory precondition, timing, then rejection consequences — with critical constraints front-loaded via WICHTIG/IMPORTANT. But the description fully duplicates every sentence in both languages, roughly doubling its length; for any single reader, half the sentences are redundant, which prevents a higher score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, destructive tool with 6 parameters and no output schema, the description covers the decision-critical ground: preconditions, consent flag, dispatch timing, cancellation path, and rejection side effects. The remaining gaps — return format, error behavior for already-decided or non-pending approvals, and the purpose of clientOrderId — are secondary but real, since no output schema exists to cover them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate. It does explain user_saw_preview (when it must be true) and decision (approve dispatches after 10 minutes; reject preserves draft and refunds). However, comment, reasoning, and clientOrderId receive no semantics in either schema or description, and it is unclear whether reasoning is expected on rejection. Compensation is partial, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair — 'Approves or rejects a pending approval on the human's behalf' — making the tool's function unambiguous. The 'on the human's behalf' framing distinguishes it from siblings like approval_submit (creating a request) and approval_list/approval_status_app (read-only views), and from approval_decide_app, which presumably runs an interactive flow for the human to decide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit, imperative precondition: before calling 'approve', the agent MUST show the preview link, exact price, and delivery type and obtain consent, then set user_saw_preview:true. It also names the concrete alternative (order_cancel) to invoke if the human says 'stop' within the 10-minute window, giving the agent both when-to-call and when-not-to-call guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_decide_appFreigabe auf der Karte entscheidenAInspect
Nur fuer die interaktive Freigabe-Karte: gibt die angezeigte Freigabe frei oder lehnt sie ab, nachdem der Mensch auf der Karte gedrueckt hat. Bei Freigabe geht der Brief erst nach 10 Minuten raus und kann bis dahin gestoppt werden. EN: For the interactive approval card only: approves or rejects the displayed approval after the human pressed the button on the card. On approval the letter goes out after 10 minutes and can be stopped until then.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | ||
| cardNonce | No | ||
| reasoning | No | ||
| approvalId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses a non-obvious delayed side effect: on approval, the letter is sent only after 10 minutes and can be stopped during that window. It also emphasizes a human-in-the-loop prerequisite, which is valuable behavioral context for an agent deciding whether to call the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, repeating the key constraint first. However, the German and English versions duplicate the same content almost entirely, so each sentence does not earn its place for an English-reading agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four undocumented parameters and no output schema, the description is too sparse for reliable invocation. It covers the high-level purpose and delay behavior, but leaves cardNonce, reasoning, and any stop/cancel mechanism unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain key parameters such as cardNonce or reasoning, nor does it clarify when reasoning is required or what cardNonce represents. The action words map only loosely to decision and approvalId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('approves or rejects the displayed approval'), a specific resource ('Freigabe-Karte' / approval card), and a clear trigger ('after the human pressed the button on the card'). It also explicitly limits itself to the interactive card, distinguishing it from the sibling approval_decide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool: only for the interactive approval card and only after a human has pressed the button. It gives an explicit exclusion ('nur fuer...' / 'only'), but it does not name an alternative tool such as approval_decide, so the routing guidance 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.
approval_listFreigaben auflistenARead-onlyInspect
Listet die Freigaben deines Kontos, neueste zuerst, mit einer zeitlich begrenzten PDF-Vorschau, den Kosten, dem Grund und den Fristen. Standardmäßig nur die offenen Freigaben. Über eine der zurückgegebenen approvalIds entscheidest du anschließend mit approval_decide. EN: Lists your account's approvals, newest first, with a time-limited PDF preview, the cost, the reason and the deadlines. Only the pending approvals by default. You then decide on one of the returned approvalIds with approval_decide.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: Default 20, maximum 100. | |
| since | No | Nur Freigaben, die seit diesem Zeitpunkt eingereicht wurden (ISO 8601). EN: Only approvals submitted since this time (ISO 8601). | |
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0. | |
| status | No | Standard pending. EN: Default pending. | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond the readOnlyHint annotation: newest-first ordering, time-limited PDF preview, included fields, and the default pending filter. This gives the agent useful expectations about the output and its constraints without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, followed by the default behavior and the follow-up tool. It is bilingual, which duplicates content, but both languages carry the same key information and the extra length is modest and intentional for accessibility.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with five optional parameters and no output schema, the description conveys the key return elements (approvalIds, PDF preview, cost, reason, deadlines) and the default pending state. The main missing piece is a note about pagination behavior, but limit/offset are self-explanatory from the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema description coverage, the baseline is 3. The tool description does not add parameter-specific semantics; it only mentions default pending status, which relates to the 'status' parameter already documented in the schema. The 'reasoning' parameter lacks both schema and description coverage, but the high overall schema coverage keeps this at baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Lists your account's approvals, newest first' with concrete fields (PDF preview, cost, reason, deadlines). It also distinguishes itself from the sibling approval_decide by explicitly directing the agent to use that tool for the returned approvalIds, which is more than a generic listing description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to retrieve approvals before making a decision, and explicitly names approval_decide as the next step. It also clarifies the default status filter ('Only the pending approvals by default'). However, it does not explicitly state when not to use it or mention alternatives like approval_status_app for single-status lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_page_urls_appBildlinks der Freigabe-Karte erneuernARead-onlyInspect
Nur fuer die interaktive Freigabe-Karte: erneuert die zeitlich begrenzten Bildlinks der Briefseiten, wenn die alten abgelaufen sind. EN: For the interactive approval card only: renews the time-limited image links of the letter pages once the old ones have expired.
| Name | Required | Description | Default |
|---|---|---|---|
| approvalId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about time-limited links and the expiration-triggered renewal, which is beyond the annotations. However, it does not disclose whether new URLs are returned, whether old links are invalidated, or what happens if called before expiry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with scope and action. The bilingual German/English repetition is somewhat redundant but acceptable in a multilingual context; both versions say the same thing without extra fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with safe-read annotations, the description is mostly usable: an agent knows when to call it and what it does. However, there is no output schema and no mention of the return value or what the renewed links look like, so an agent is left unsure about the tool's result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not explain the approvalId parameter at all. An agent must infer from the tool name and context that approvalId identifies the relevant approval card. The description does not compensate for the lack of schema-level parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('erneuert' / 'renews'), a specific resource ('Bildlinks der Briefseiten' / image links of the letter pages), and a clear scope ('Nur fuer die interaktive Freigabe-Karte'). It also adds the condition 'wenn die alten abgelaufen sind', which distinguishes this renewal tool from generic URL/list tools like letter_page_urls_app or template_page_urls_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this is for the interactive approval card only, and gives a clear trigger condition: renew links when the old ones have expired. It does not name alternative sibling tools explicitly, but the 'only for the interactive approval card' constraint provides a clear exclusion boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_status_appFreigabestand fuer die Karte lesenARead-onlyInspect
Nur fuer die interaktive Freigabe-Karte: liest den aktuellen Zustand einer Freigabe, damit eine alte Karte den richtigen Endzustand und den Countdown zeigt. EN: For the interactive approval card only: reads the current state of an approval so an old card renders the correct end state and countdown.
| Name | Required | Description | Default |
|---|---|---|---|
| approvalId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true and destructiveHint=false, so the read-only profile is covered. The description adds that it returns the current state for card rendering, but it does not describe response fields, error behavior, or auth requirements; for a read-only helper that is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is compact: the scope and action are front-loaded, and the purpose clause is kept short. The bilingual duplication is the only repetition, and it serves agents that may rely on English rather than German.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only endpoint, the description covers what it does, when to use it, and why. It does not enumerate exact return fields, but the 'end state and countdown' clause hints at the output shape, and no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema supplies a single required approvalId (UUID), and the description links that ID to the object whose state is read ('einer Freigabe'). It does not explain the UUID format or additional constraints, but with one self-describing parameter that omission is low-impact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact action ('liest den aktuellen Zustand einer Freigabe' / 'reads the current state of an approval') and the resource ('Freigabe' / 'approval'), and immediately confines the tool to the interactive approval card. This clearly distinguishes it from siblings like approval_list or approval_decide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Nur fuer die interaktive Freigabe-Karte' clause is a clear when/where restriction, and the mention of rendering an old card's end state and countdown gives a concrete trigger. It does not explicitly name alternative tools, but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approval_submitZur Freigabe einreichenAInspect
Reicht einen Brief zur menschlichen Freigabe ein, statt ihn sofort zu versenden: prüft Pflichtangaben, Empfänger, AVV und Limits, erstellt die finale PDF, berechnet den Preis, reserviert die Kosten und legt eine Freigabe in der Warteschlange an. Der Versand passiert erst, wenn die zurückgegebene approvalId über approval_decide freigegeben wird. Mit dryRun bleibt es bei der Prüfung: Guthaben und Warteschlange bleiben unberührt. EN: Submits a letter for human approval instead of sending it right away: checks mandatory details, recipient, AVV and limits, creates the final PDF, calculates the price, reserves the cost and adds an approval to the queue. The send only happens once the returned approvalId is approved via approval_decide. With dryRun it stops at the check: balance and queue stay untouched.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Ohne Angabe wird die Farbe automatisch erkannt. EN: If omitted, colour is detected automatically. | |
| dryRun | No | ||
| reason | No | Kurzer Grund fuer die Freigabe, den die pruefende Person auf der Karte liest. EN: Short reason for the approval, shown to the reviewer on the card. | |
| content | No | ||
| express | No | ||
| subject | No | ||
| auditTag | No | ||
| letterId | No | Bestehender Entwurf. Alternativ den Brief inline angeben. EN: Existing draft. Alternatively provide the letter inline. | |
| reasoning | No | ||
| presetName | No | ||
| templateId | No | ||
| scheduledAt | No | ||
| signatureId | No | ||
| approvalMode | No | ||
| deliveryType | No | Standard standard. EN: Defaults to standard. | |
| maxCostEuros | No | Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted. | |
| recipientZip | No | ||
| clientOrderId | No | Idempotenzschluessel. Ein erneuter Aufruf mit demselben Wert liefert dieselbe Freigabe, statt ein zweites Mal einzureichen. Der Praefix 'approval:' ist reserviert. EN: Idempotency key. A repeat call with the same value returns the same approval instead of submitting a second time. The 'approval:' prefix is reserved. | |
| recipientCity | No | ||
| recipientName | No | ||
| mandantennummer | No | ||
| recipientStreet | No | ||
| senderAddressId | No | ||
| senderProfileId | No | ||
| includeSignature | No | ||
| recipientCompany | No | ||
| recipientCountry | No | ISO-3166-alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE. | |
| requesterContext | No | Zusatzkontext zur einreichenden Person oder zum Anlass. EN: Additional context about the submitter or the occasion. | |
| recipientHouseNumber | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only bare annotations (readOnlyHint=false, destructiveHint=false), the description carries the full burden and delivers richly: it discloses side effects (reserves cost, creates a queue entry), the sequencing constraint (send only happens after approval_decide), the returned approvalId, and the dryRun exception where balance and queue stay untouched. There is no contradiction — readOnlyHint=false matches the described mutations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and every clause adds distinct behavioral information: checks, PDF creation, price calculation, cost reservation, queue entry, the approval_decide dependency, and the dryRun variant. The full German/English duplication doubles the length and the single run-on paragraph could be better separated into purpose, side effects, and variants — but there is no filler or content redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-complexity tool (29 params, no output schema, minimal annotations), the description covers the essential workflow, side effects, the dryRun variant, and the critical return value (approvalId). But the parameter surface remains the largest gap: with 72% of schema parameters undocumented and no required params, an agent still cannot reliably know what to pass versus what is optional enrichment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 28% (8 of 29 params documented), so the description should have compensated for the remaining ~21 parameters. It explains dryRun and fragments of the workflow, but leaves approvalMode, presetName, templateId, senderProfileId, mandantennummer, auditTag, reasoning, requesterContext, and most recipient fields unexplained by both schema and description. With 0 required parameters, the agent has no anchor for constructing a valid request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource combination — 'Reicht einen Brief zur menschlichen Freigabe ein, statt ihn sofort zu versenden' — which immediately distinguishes the tool from immediate-send siblings. It also names approval_decide as the explicit downstream step, so the tool's role in the workflow is unmistakable even before looking at any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when a letter must pass human approval before sending, and it explicitly routes the follow-up through approval_decide. The dryRun explanation adds variant-level guidance. However, it never names concrete alternatives (e.g., order_send for immediate sending or letter_create_draft for plain drafts), so the when-not-to-use side is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_exportArchiv exportierenBRead-onlyInspect
Plant einen Archiv-Export (GoBD-CSV, DATEV, PDF-Bundle oder Mandanten-Allokation) für einen Zeitraum ein und liefert eine Job-ID zur Statusabfrage. EN: Schedules an archive export (GoBD CSV, DATEV, PDF bundle or client allocation) for a date range and returns a job ID to query its status.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ||
| until | Yes | ||
| format | Yes | ||
| target | No | ||
| reasoning | No | ||
| notifyEmail | No | ||
| senderProfileFilter | No | ||
| mandantennummerFilter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, which correctly characterizes this as a non-destructive scheduling operation. The description adds the useful detail that the call returns a job ID rather than the export artifact itself, which helps manage agent expectations. It does not disclose asynchronous behavior in more depth (e.g., that results may be delivered later or that jobs can fail after scheduling), but that is partly covered by the sibling status tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one German sentence and one English translation, with the primary purpose and return value front-loaded. Each clause earns its place by conveying the schedule semantics and the job-ID mechanism. The minor redundancy between the two languages is acceptable for bilingual coverage and does not materially bloat the entry.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema and 0% schema description coverage, the description provides the essential scheduling semantics but not enough detail on optional parameters, delivery behavior, or how to correlate the returned job ID with archive_export_status. The presence of the close sibling archive_export_status mitigates the gap, but a fully complete definition would explicitly mention polling and explain the optional filter/notification fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate, but it only clarifies 'format' indirectly by listing formats in prose and establishes that 'since'/'until' define the export date range. It leaves 'target', 'reasoning', 'notifyEmail', 'senderProfileFilter', and 'mandantennummerFilter' unexplained; an agent must guess their semantics from names alone. The format enum provides self-documenting options, which keeps this at a baseline 3, but the description does not compensate strongly enough for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('plant ein' / 'schedules'), names the resource ('Archiv-Export'), and enumerates the supported formats (GoBD-CSV, DATEV, PDF-Bundle, Mandanten-Allokation). The distinction that it returns a job ID for status polling helps clarify it from a potential immediate-export tool, but it does not explicitly differentiate it from archive_export_status, which is the obvious sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a clear trigger: schedule an export for a date range and receive a job ID, and the sibling list contains archive_export_status, implying that one would call this tool first and then poll with the returned ID. However, it never explicitly says 'use archive_export_status to check progress' or lists conditions under which another archive tool would be preferred, so the cross-tool routing is only implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_export_statusArchiv-Export-Status abrufenARead-onlyInspect
Liefert den Status eines Archiv-Export-Jobs und bei Fertigstellung eine 90 Tage gültige Download-URL. EN: Returns the status of an archive export job and, once complete, a download URL valid for 90 days.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that read-only profile. It adds behavioral detail beyond the annotations by disclosing that the download URL is valid for 90 days and only appears once the job is complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, putting the core status and URL behavior in the first sentence. The German and English lines repeat the same information, which is slightly redundant, but the bilingual presentation still keeps the description compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one required parameter and no output schema, the description covers the essential behavior: it returns job status and, when complete, a download URL with a 90-day validity. It does not enumerate possible status values or failure behavior, but that is a minor gap for a simple poll-style status tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for missing parameter documentation. It only refers to 'an archive export job' and never explains the required jobId parameter or the optional reasoning parameter. While jobId's UUID format is self-explanatory, the description adds no parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Liefert'/'Returns') and names the exact resource: the status of an archive export job. It also adds the completion condition and the 90-day download URL, making the tool's role unmistakable and distinguishing it from archive_export by function and name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames the tool as a status-retrieval endpoint for a previously created export job, which strongly implies it should be used after archive_export to check completion and obtain the download URL. It does not explicitly name archive_export as the counterpart or state when not to use it, but the contextual signal is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachment_upload_imageBild-Anhang hochladenAInspect
Lädt ein Bild (PNG/JPEG) als Anhang zu einem Partner-Brief hoch. Das Bild wird serverseitig auf eine A4-PDF-Seite skaliert (optional gedreht) und wie ein PDF gespeichert. Prüft vor dem Speichern die zusammengeführte Seitenzahl (max. 30 Seiten). Die EXIF-Orientierung wird automatisch in die Pixel eingerechnet, ein Handyfoto steht also von selbst aufrecht. rotation wirkt zusätzlich dazu: lass es auf 0, außer du willst das Bild bewusst weiterdrehen. EN: Uploads an image (PNG/JPEG) as an attachment to a partner letter. The image is scaled to an A4 PDF page server-side (optionally rotated) and stored like a PDF. Before saving, it checks the merged page count (max. 30 pages). EXIF orientation is applied to the pixels automatically, so a phone photo is upright by itself. rotation applies on top of that: leave it at 0 unless you deliberately want to turn the image further.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| imageUrl | No | Öffentliche URL des Bildes (Alternative zu imageBase64). EN: Public URL of the image (alternative to imageBase64). | |
| letterId | Yes | ||
| position | No | ||
| rotation | No | Zusätzliche Drehung in Grad, im Uhrzeigersinn. Die EXIF-Orientierung des Bildes wird bereits automatisch in die Pixel eingerechnet, das Bild steht also von sich aus richtig. Dieser Wert dreht es danach ein zweites Mal. Für ein Handyfoto ist deshalb 0 richtig. EN: Additional clockwise rotation in degrees. The image's EXIF orientation is already baked into the pixels automatically, so the image is upright on its own. This value turns it a second time on top of that. For a phone photo, 0 is therefore the correct value. | |
| reasoning | No | ||
| imageBase64 | No | Bild als Base64 (Alternative zu imageUrl). EN: Image as Base64 (alternative to imageUrl). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the minimal annotations, the description discloses rich behavior: server-side scaling to A4 PDF, optional rotation, page-count validation (max 30), automatic EXIF orientation handling, and the fact that rotation applies on top of EXIF correction. It also clearly implies a persisted write operation, consistent with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and format, then covers transformation, limits, and rotation. It is concise despite being bilingual; the English repetition adds length but also makes the content robust for mixed audiences. No filler or vague marketing language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core operation and transformation rules are well covered, including the page-count limit and EXIF behavior. However, there is no description of the return value or result confirmation (no output schema), no explanation of the position/title/reasoning parameters, and no guidance on the precedence or mutual exclusivity of imageUrl versus imageBase64.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, so the description must compensate, but it only elaborates on rotation (mostly repeating the schema) and the accepted image formats. It does not explain title, letterId, position, reasoning, or how to choose between imageUrl and imageBase64. This leaves the majority of parameters under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Lädt ... hoch'), a concrete resource ('ein Bild (PNG/JPEG) als Anhang zu einem Partner-Brief'), and states the server-side conversion to an A4 PDF page. This clearly separates it from sibling attachment_upload_pdf, since the input format and transformation are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need to attach a PNG/JPEG image to a partner letter and have it converted to PDF. It does not explicitly name the sibling attachment_upload_pdf or state 'for PDFs use that tool instead,' but the image-only restriction and conversion behavior make the intended use evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attachment_upload_pdfPDF-Anhang hochladenAInspect
Lädt ein PDF als Anhang zu einem Partner-Brief hoch. Prüft vor dem Speichern die Dateigröße (max. 50 MB) und die zusammengeführte Seitenzahl (max. 30 Seiten inkl. Brief und übriger Anhänge). EN: Uploads a PDF as an attachment to a partner letter. Before saving, it checks the file size (max. 50 MB) and the merged page count (max. 30 pages including the letter and other attachments).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| pdfUrl | No | Öffentliche URL des PDF (Alternative zu pdfBase64). EN: Public URL of the PDF (alternative to pdfBase64). | |
| letterId | Yes | ||
| position | No | ||
| pdfBase64 | No | PDF als Base64 (Alternative zu pdfUrl). EN: PDF as Base64 (alternative to pdfUrl). | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses validation behavior beyond the annotations: file size max 50 MB and merged page count max 30 pages including the letter and other attachments. This informs the agent about important failure conditions that are not visible in the schema or annotations. It doesn't mention side effects or what happens on validation failure, but the added constraints are meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bilingual and repetitive, but each language contains a clear purpose sentence followed by a validation sentence. There is no filler, and the action is front-loaded. The duplication makes it longer than strictly necessary, but it remains tightly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and validation limits, but for a 6-parameter mutation tool with no output schema it leaves gaps: it doesn't state that at least one of pdfUrl/pdfBase64 is required for a successful call, nor explain the role of position, title, or reasoning. It is adequate for basic understanding but incomplete for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only pdfUrl and pdfBase64 have descriptions). The tool description adds no parameter-level guidance: it doesn't explain letterId, title, position, or reasoning, and doesn't clarify that pdfUrl and pdfBase64 are mutually exclusive alternatives. With low schema coverage, the description fails to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Lädt ein PDF als Anhang zu einem Partner-Brief hoch' / 'Uploads a PDF as an attachment to a partner letter.' The PDF qualifier clearly distinguishes this tool from the sibling attachment_upload_image, and the partner-letter context separates it from other upload tools like letterhead_upload or signature_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when a PDF needs to be attached to a partner letter. It does not explicitly name alternatives or exclusions, such as pointing to attachment_upload_image for images, but the purpose statement leaves little ambiguity about the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_import_from_websiteMarke von der Website uebernehmenAInspect
Liest eine oeffentliche Firmenwebsite aus und schlaegt daraus ein Briefkopf-Design vor: Markenfarben, Hausschriftzuordnung, Logo-Kandidaten und Firmendaten aus dem Impressum. Die gefundenen Logos werden als Design-Assets im Konto gespeichert, damit du sie sofort verwenden kannst. Das Ergebnis ist ein Vorschlag zur Abstimmung mit der Kundin oder dem Kunden; uebernommen wird die Marke erst durch einen anschliessenden Aufruf von brand_kit_save mit brandingOwnershipConfirmed. Suche technisch nach brand_import_from_website. EN: Reads a public company website and proposes a letterhead design from it: brand colours, a mapped house typeface, logo candidates and company details from the imprint. Found logos are stored as design assets in the account so you can use them right away. The result is a proposal to review with the customer; the brand is adopted by a following brand_kit_save call carrying brandingOwnershipConfirmed. Search technically for brand_import_from_website.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | Kurze Begruendung fuer das Audit-Protokoll. EN: Short rationale for the audit log. | |
| websiteUrl | Yes | Oeffentliche Adresse der Firmenwebsite, zum Beispiel https://beispiel.de. EN: Public company website address. | |
| maxLogoCandidates | No | Wie viele Logo-Kandidaten heruntergeladen und gespeichert werden. Standard 3. EN: How many logo candidates get downloaded and stored. Default 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a concrete side effect beyond the annotations: 'Die gefundenen Logos werden als Design-Assets im Konto gespeichert' (found logos are stored as design assets in the account), which specifies what the write actually does given readOnlyHint=false. It also reveals the behavioral trait that the result is only a proposal, not a committed brand, adding commit semantics that the annotations cannot express. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core function in the first sentence and progresses logically to side effects then workflow. However, the full German text is duplicated verbatim in English, roughly doubling length, and the trailing instruction 'Suche technisch nach brand_import_from_website / Search technically for brand_import_from_website' is a search-index artifact that adds no value to an agent deciding whether to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by explaining what the result is (a proposal for customer review) and enumerating its contents (colours, typeface, logos, imprint data). The required follow-up step and the brandingOwnershipConfirmed flag are also covered, giving the agent the full lifecycle. The main gap is the absence of detailed response-shape expectations, but the description is adequate for a moderate three-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents websiteUrl (with example), maxLogoCandidates (with default and range), and reasoning (audit log rationale). The description reinforces the logo-candidate concept by listing 'Logo-Kandidaten' as an output, but it adds no parameter-level meaning beyond what the schema provides. Baseline 3 is appropriate when the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Liest eine oeffentliche Firmenwebsite aus und schlaegt daraus ein Briefkopf-Design vor' (reads a public website and proposes a letterhead design), then enumerates concrete outputs (brand colours, house typeface mapping, logo candidates, imprint data). The description explicitly distinguishes this tool from the adoption step by naming brand_kit_save as the separate follow-up, removing ambiguity with sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-phase workflow is explicit: this tool produces a proposal for customer review, and the brand is only adopted by a subsequent brand_kit_save call carrying brandingOwnershipConfirmed. This tells the agent when this tool ends its job and where routing continues. It falls short of explicitly stating when NOT to use it or contrasting it with alternatives like letter_design_list_presets, but for a specialized import tool the workflow guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_kit_getBriefkopf & Marke abrufenARead-onlyInspect
Liest die gespeicherten Markenwerte fuer das nutzerseitige Ergebnis Briefkopf & Marke. Liefert Logo-Referenzen, Farben und Schrift fuer die weitere Gestaltung mit letter_design_preview und letter_design_save. Suche technisch nach brand_kit_get. EN: Reads the saved brand values for the user-facing result letterhead and brand. Returns logo references, colours and font for further work with letter_design_preview and letter_design_save.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description only needs to add behavioral context. It adds value by specifying what the read returns: logo references, colours, and font, and that these are the saved user-facing brand values. It does not describe edge cases like missing brand data, but this is a minor gap for a simple getter with full annotation safety coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core information is front-loaded and useful, but the description repeats the same content in German and English, effectively doubling its length. The sentence 'Suche technisch nach brand_kit_get' adds no informational value and reads as filler. It could be more concise without losing any meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only getter with one optional parameter and no output schema, the description covers the essential context: what is read, what is returned, and which downstream tools will consume the result. Exact return format and behavior when no brand values exist are unspecified, but these are low-risk gaps given the tool's simplicity and the provided annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single optional 'reasoning' parameter with only a maxLength and no semantic description, and schema description coverage is 0%. The description does not mention the parameter at all or suggest why an agent might supply it. Since the schema does not define the parameter's meaning, the description should have compensated but did not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise read operation ('Liest die gespeicherten Markenwerte') on a clear resource, and lists the returned content: logo references, colors, and font. It also differentiates itself from design tools by explicitly positioning its output as input to letter_design_preview and letter_design_save. The contrast with sibling brand_kit_save is implicit but clear from the verb and name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'fuer die weitere Gestaltung mit letter_design_preview und letter_design_save' gives a clear, practical context: call this tool before working on letter design. It does not explicitly state when not to use it or mention alternatives like brand_kit_save, but the intended usage context is direct and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_kit_saveBriefkopf & Marke speichernBInspect
Speichert Logo-Referenzen, Farben und Schrift fuer das nutzerseitige Ergebnis Briefkopf & Marke. brandingOwnershipConfirmed muss true sein und bestaetigt die Nutzungsrechte an den angegebenen Marken-Assets. Die Antwort enthaelt den gespeicherten Stand und den Prueflink. Suche technisch nach brand_kit_save. EN: Saves logo references, colours and font for the user-facing result letterhead and brand. brandingOwnershipConfirmed must be true and confirms the usage rights for the supplied brand assets. The response includes the saved state and review link.
| Name | Required | Description | Default |
|---|---|---|---|
| brandKit | Yes | ||
| reasoning | No | ||
| brandingOwnershipConfirmed | Yes | Bestaetigt die Nutzungsrechte an Logo und eigener Schrift. Muss true sein. EN: Confirms usage rights for the logo and custom font. Must be true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false and destructiveHint=false, the description carries some burden and adds useful behavior: the call is a save operation, ownership confirmation is required, and the response includes the saved state and review link. It does not disclose overwrite/upsert behavior, effects on existing brand kits, or auth/rate specifics, so transparency is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description repeats the full content in German and English and includes the unhelpful instruction 'Suche technisch nach brand_kit_save', adding length without value. Important information is spread across duplicated bilingual blocks rather than being front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, the description usefully states that the response contains the saved state and review link and highlights the required ownership flag. However, it leaves the purpose of 'reasoning' undocumented and doesn't clarify semantics of nullable logo/font asset IDs or save behavior, so it is not fully complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, but the prose adds meaning to the brandKit object by mentioning logo references, colours and font, and it repeats the brandingOwnershipConfirmed requirement. The 'reasoning' parameter is not explained at all, and the optional logo/font asset IDs get no semantic guidance, so the description only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific action ('Saves logo references, colours and font') and the resource ('user-facing result letterhead and brand'), which makes the tool's function clear. It doesn't explicitly contrast with sibling tools like brand_kit_get or brand_import_from_website, so it misses full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for use: persisting brand assets for the final letterhead/brand output, and it states an explicit prerequisite ('brandingOwnershipConfirmed must be true') that an agent must satisfy before calling. It does not name alternatives or exclusion cases, but the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
document_createBeleg erstellenAInspect
Erzeugt aus strukturierten Belegdaten ein fertiges Dokument und legt es als Briefentwurf an: FrankKi rechnet Positionen, Netto, USt-Sätze und Brutto nach, prüft die Pflichtangaben nach § 14 UStG, vergibt auf Wunsch die Belegnummer aus deinem Nummernkreis und setzt alles im DIN-5008-Layout mit deinem Briefdesign. Der Entwurf bleibt kostenfrei liegen, bis du ihn versendest. Alle Beträge in ganzen Cent. Kompaktes Beispiel: {"document":{"documentType":"rechnung","documentNumber":"RE-2026-014","documentDate":"2026-07-30","leistungszeitraum":{"von":"2026-06-01","bis":"2026-06-30"},"zahlungszielTage":14,"lineItems":[{"description":"Beratung Juni","quantity":4,"unit":"Std","unitPriceCents":12000,"ustRate":19,"lineNetCents":48000}],"totals":{"nettoCents":48000,"ustLines":[{"rate":19,"netCents":48000,"ustCents":9120}],"bruttoCents":57120}},"recipientAddressId":"…"} Nächster Schritt mit der zurückgegebenen letterId: order_send versendet den Brief, approval_submit legt ihn stattdessen einem Menschen zur Freigabe vor, letter_schedule versendet ihn später. EN: Turns a structured billing payload into a finished document and stores it as a letter draft: FrankKi re-computes line items, net, VAT rates and gross, checks the mandatory details under § 14 UStG, optionally draws the document number from your sequence, and typesets everything in the DIN 5008 layout with your letter design. The draft stays free of charge until you send it. All amounts in integer cents. Compact example: {"document":{"documentType":"rechnung","documentNumber":"RE-2026-014","documentDate":"2026-07-30","leistungszeitraum":{"von":"2026-06-01","bis":"2026-06-30"},"zahlungszielTage":14,"lineItems":[{"description":"Beratung Juni","quantity":4,"unit":"Std","unitPriceCents":12000,"ustRate":19,"lineNetCents":48000}],"totals":{"nettoCents":48000,"ustLines":[{"rate":19,"netCents":48000,"ustCents":9120}],"bruttoCents":57120}},"recipientAddressId":"…"} Next step with the returned letterId: order_send sends the letter, approval_submit puts it in front of a human for approval instead, letter_schedule sends it later.
| Name | Required | Description | Default |
|---|---|---|---|
| subject | No | Betreff des Briefs. Ohne Angabe setzt FrankKi ihn aus Dokumentart und Belegnummer, z. B. 'Rechnung RE-2026-014'. EN: letter subject. If omitted FrankKi builds it from the document type and number. | |
| designId | No | ||
| document | Yes | Die Belegdaten. Alle Betraege in ganzen Cent. Du lieferst die Summen, FrankKi rechnet sie nach und lehnt Abweichungen ab. EN: the document payload. All amounts in integer cents. You supply the sums, FrankKi re-computes them and rejects mismatches. | |
| language | No | Standard de. EN: defaults to de. | |
| reasoning | No | ||
| reference | No | ||
| signatureId | No | ||
| sequenceScope | No | ||
| clientLetterId | No | Idempotenzschluessel fuer den Briefentwurf. EN: idempotency key for the letter draft. | |
| mandantennummer | No | Mandant, dem das Dokument zugeordnet wird. Nur Zuordnung fuer Liste und Auswertung. EN: client this document is filed under. Filing only. | |
| senderAddressId | No | ||
| senderProfileId | No | Absenderprofil, aus dem die Pflichtangaben (USt-IdNr oder Steuernummer) gelesen werden. Ohne Angabe gilt dein Standardprofil. EN: sender profile the mandatory tax details are read from. Defaults to your default profile. | |
| includeSignature | No | ||
| recipientAddressId | No | Empfaenger aus deinem Adressbuch (address_list / mandant_search liefern die id). Entweder das oder recipientAddressInline. EN: recipient from your address book. Either this or recipientAddressInline. | |
| recipientAddressInline | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No contradiction with annotations — readOnlyHint=false is consistent with a creation tool. The description adds valuable behavior beyond the minimal all-false annotation set: the draft 'bleibt kostenfrei liegen, bis du ihn versendest' (cost disclosure), the recompute-and-reject arithmetic behavior, the §14 UStG mandatory-details validation, and the option to draw document numbers from a sequence. What it omits — idempotency semantics, failure modes — is secondary for a creation tool whose safety profile is already clear from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded — purpose, then behavior, then pricing, then example, then next steps — and nearly every content unit earns its place. The main structural cost is the near-identical German/English duplication, which roughly doubles the length to about 600 words. Given the tool's real complexity (nested payload, 15 parameters), the size is defensible, but it is not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, deeply nested creation tool with no output schema, the description provides a strong end-to-end model: what input to send, a worked example, validation and pricing behavior, and follow-up tool routing. The notable gap is the return value — only 'letterId' is named, with no hint of the draft's status or how validation failures surface. Because there is no output schema, the description itself carries that burden and under-delivers on it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 47%, below the 50% threshold, so the description must compensate — and it does with a compact example payload that makes the core parameters concrete: quantity × unitPriceCents = lineNetCents at 19% USt, totals interlocking with line items, leistungszeitraum as von/bis dates, and recipientAddressId usage. This gives an agent a working model of the central document object. Several top-level parameters (sequenceScope, mandantennummer, reasoning, signatureId, reference) remain unexplained in both schema and description, which keeps this from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource pair: 'Erzeugt aus strukturierten Belegdaten ein fertiges Dokument und legt es als Briefentwurf an' — it creates a finished billing document as a letter draft. It further distinguishes itself through unique behaviors (recomputing amounts, §14 UStG checks, DIN 5008 typesetting, number-sequence assignment) that no other sibling claims. It never explicitly contrasts with the close sibling letter_create_draft, which also creates a letter draft, so the differentiation is demonstrated but not stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong post-invocation guidance: 'Nächster Schritt mit der zurückgegebenen letterId: order_send versendet den Brief, approval_submit legt ihn stattdessen einem Menschen zur Freigabe vor, letter_schedule versendet ihn später.' It also implies the use case through 'Du lieferst die Summen, FrankKi rechnet sie nach und lehnt Abweichungen ab' — this tool is for validated billing payloads. However, it never states when to use this tool instead of letter_create_draft or when it should not be used, leaving tool-selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
document_getBeleg abrufenARead-onlyInspect
Liefert ein Dokument mit allen Belegdaten (Positionen, Summen, USt-Sätze, Bezug) sowie letterId und orderId des Briefs, in dem es steckt. Das Feld referencePrefill enthält den fertigen references-Block für einen Folgebeleg: übernimm ihn unverändert als document.references in ein document_create für Mahnung, Zahlungserinnerung oder Gutschrift. Unter exports liefert FrankKi für versendete Rechnungen und Gutschriften signierte Download-Links: zugferdPdfUrl ist ein PDF/A-3 mit eingebetteter EN-16931-XML (ZUGFeRD), xrechnungXmlUrl die reine XRechnung-XML. Beide sind zum Herunterladen und Archivieren gedacht; die Übermittlung an ein Portal bleibt bei dir. Fehlt ein Export, nennt das Feld den Grund: DOCUMENT_EXPORT_NOT_READY heisst später erneut versuchen (Versand oder Freischaltung stehen noch aus), DOCUMENT_EXPORT_NOT_SUPPORTED heisst dauerhaft (der Export gilt für Rechnungen und Gutschriften; bei Mahnung und Zahlungserinnerung nutze die Rechnung, auf die sie sich beziehen). Nächster Schritt: order_status verfolgt den Versand, document_create legt mit references eine Mahnung oder Gutschrift dazu an. EN: Returns one document with its full payload (line items, totals, VAT rates, reference) plus the letterId and orderId of the letter it lives in. The field referencePrefill carries the ready-made references block for a follow-up document: paste it unchanged into document.references of a document_create for a dunning letter, payment reminder or credit note. Under exports FrankKi returns signed download links for sent invoices and credit notes: zugferdPdfUrl is a PDF/A-3 with embedded EN 16931 XML (ZUGFeRD), xrechnungXmlUrl the pure XRechnung XML. Both are download-only; transmitting an e-invoice to a portal stays with you. When an export is missing the slot names the reason: DOCUMENT_EXPORT_NOT_READY means try again later (the send or the activation is still pending), DOCUMENT_EXPORT_NOT_SUPPORTED means permanently (the export covers invoices and credit notes; for a dunning letter or payment reminder use the invoice they refer to). Next step: order_status tracks the send, document_create creates a dunning letter or credit note via references.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| documentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds meaningful behavioral context: signed download links are download-only, portal transmission remains the caller's responsibility, and missing exports carry specific reasons with retryable vs permanent semantics. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose but is quite long because it fully repeats the same content in German and English. Most sentences carry substantive information, but the bilingual duplication makes it less concise than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by explaining the meaning of referencePrefill, export URLs, error codes, export readiness semantics, and appropriate follow-up tools. An agent has enough context to invoke the tool correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the documentId parameter or the optional reasoning parameter. documentId is inferable from its name and the tool's purpose, but reasoning is completely undocumented, and the description focuses on response fields rather than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it 'returns one document with its full payload' including line items, totals, VAT rates, reference, and letterId/orderId. This clearly distinguishes the singular retrieval behavior from sibling tools like document_list and document_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: referencePrefill is meant to be pasted unchanged into document_create, and when an export is not supported for dunning or payment reminders, the agent should use the referenced invoice. It also names order_status as the next step for tracking shipment, clearly routing between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
document_listBelege auflistenARead-onlyInspect
Listet deine erzeugten Dokumente (Rechnung, Zahlungserinnerung, Mahnung, Gutschrift), neueste zuerst, gefiltert nach Art, Mandant, Empfänger oder Bezugsbeleg. Nächster Schritt: document_get liefert die vollständigen Belegdaten, document_create legt mit references einen Folgebeleg dazu an. EN: Lists the documents you created (invoice, payment reminder, dunning letter, credit note), newest first, filtered by type, client, recipient or referenced document. Next step: document_get returns the full payload, document_create creates a follow-up document via references.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: default 20, maximum 100. | |
| since | No | ||
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: offset for pagination. Default 0. | |
| reasoning | No | ||
| documentType | No | ||
| recipientQuery | No | Freitext über Name, Firma oder Ort des Empfängers. EN: free text over the recipient name, company or city. | |
| mandantennummer | No | ||
| referencesNumber | No | ||
| referencesDocumentId | No | Nur Dokumente, die sich auf dieses FrankKi-Dokument beziehen (z. B. alle Mahnungen zu einer Rechnung). EN: only documents referring to this FrankKi document (for example every dunning letter for one invoice). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds useful behavioral detail: scope to the user's created documents, newest-first ordering, and filter dimensions. It does not mention pagination behavior or response shape, but for a read-only list operation that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and next-step routing, and it is not overly long. The German and English sections duplicate each other, which adds some redundancy, but it remains compact enough for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter read-only list tool with no output schema, the description covers the main scope, sort order, filters, and workflow links. It could be more complete by stating that it returns summaries (via the document_get hint) or describing the remaining parameters, but it is sufficiently complete for selection and basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 44% schema description coverage, the description helps by naming filter categories (type, client, recipient, referenced document) that map to documentType, mandantennummer, recipientQuery, and referencesDocumentId. However, it leaves several parameters (since, referencesNumber, reasoning) semantically uncovered and does not clarify the distinction between referencesNumber and referencesDocumentId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Listet/Lists'), the resource ('deine erzeugten Dokumente / documents you created'), the concrete document types, and the ordering ('neueste zuerst'). It also names sibling tools document_get and document_create as next steps, so an agent can distinguish listing from fetching or creating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this tool to list/filter created documents, then follow up with document_get for full payloads or document_create for follow-up documents. It does not explicitly list exclusions or alternative list tools like letter_list, but the next-step routing provides adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_create_draftBriefentwurf anlegenAInspect
Legt einen Briefentwurf an: erstellt eine Vorschau-PDF im hinterlegten Briefdesign (nur der Brieftext), speichert den Entwurf und liefert eine Seitenzahl, einen Vorschau-Link (24 Stunden gültig) und eine unverbindliche Kostenvorschau. Der Entwurf bleibt kostenfrei liegen, bis du ihn versendest. Der Brieftext ist entweder content (Fliesstext) ODER blocks (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz inkl. styleDefs und Limits: MCP-Ressource frankki://blocks-guide. Die ersten Seiten kommen als Bild zurück: sieh sie dir an, bevor du versendest, und prüfe Betreff, Anschrift im Adressfenster, Absender, Datum und Umbrüche. Gemeldete Auffälligkeiten stehen in warnings. Findest du einen Fehler, korrigiere ihn und lege den Entwurf neu an, solange er noch Entwurf ist: gedruckt geht der Brief endgültig raus. Nächster Schritt mit der zurückgegebenen letterId: letter_preview zeigt den Entwurf als Bild zum Nachbessern, order_send versendet ihn, letter_schedule versendet ihn zu einem späteren Zeitpunkt. EN: Creates a letter draft: produces a preview PDF in the stored letter design (letter body only), stores the draft and returns a page count, a preview link (valid for 24 hours) and a non-binding cost estimate. The draft stays free of charge until you send it. The body is either content (plain text) OR blocks (structured: tables, headings, totals lines), exactly one of the two. Compact blocks example: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Full reference incl. styleDefs and limits: MCP resource frankki://blocks-guide. The first pages come back as images: look at them before sending and check the subject, the address inside the address window, sender, date and line breaks. Reported findings are in warnings. If you find a defect, fix it and create the draft again while it is still a draft: once printed, the letter is out for good. Next step with the returned letterId: letter_preview shows the draft as an image to refine it, order_send sends the draft, letter_schedule sends it at a later time.
| Name | Required | Description | Default |
|---|---|---|---|
| blocks | No | Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. EN: structured letter content as typed blocks (alternative to content, never both). Jeder Block braucht type; erlaubte Typen: paragraph, heading, keyValue, checkboxRow, fillLine, table, totals, columns, box, image, spacer, pageBreak. Die vollstaendige Feldreferenz liegt in der MCP-Ressource frankki://blocks-guide. EN: every block needs type; read frankki://blocks-guide for the complete field reference. | |
| content | No | Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both. | |
| subject | Yes | ||
| designId | No | Ein gespeichertes Briefdesign fuer diesen Brief verwenden. Es wird bereits in der Vorschau-PDF gerendert und am Entwurf gespeichert, sodass ein spaeterer Versand ueber die letterId es uebernimmt (ausser der Versand nennt selbst ein Design). Ohne Angabe gilt das Standard-Design des Absenderprofils, in der Vorschau wie beim Versand. EN: Use a saved letter design for this letter. It is already rendered into the preview PDF and stored on the draft so a later send by letterId inherits it (unless the send names its own design). If omitted, the sender profile default design applies, in the preview as well as on send. | |
| language | No | Standard de. EN: Defaults to de. | |
| reasoning | No | ||
| reference | No | Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode. | |
| styleDefs | No | Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide. | |
| presetName | No | ||
| signatureId | No | Eine bestimmte gespeicherte Unterschrift verwenden statt der zuerst hinterlegten. EN: Use a specific stored signature instead of the first one on file. | |
| clientLetterId | No | Idempotenzschluessel. Ein erneuter Aufruf mit demselben Wert UND derselben Nutzlast liefert denselben Entwurf, statt einen zweiten anzulegen. Fuer einen anderen Brief brauchst du einen neuen Schluessel: derselbe Schluessel mit anderem Inhalt wird mit IDEMPOTENCY_CONFLICT abgelehnt, damit du keinen Brief fuer angelegt haeltst, den es nicht gibt. EN: Idempotency key. A repeat call with the same value AND the same payload returns the same draft instead of creating a second one. A different letter needs a new key: the same key with different content is refused with IDEMPOTENCY_CONFLICT, so you never believe a letter exists that does not. | |
| senderAddressId | No | ||
| senderProfileId | No | Absenderprofil, mit dem spaeter versendet wird. Fuer die Vorschau zaehlt daraus nur das Standard-Briefdesign. EN: Sender profile the letter will later be sent with. For the preview only its default letter design is used. | |
| includeSignature | No | Hinterlegte Unterschrift unter den Brieftext setzen. Standard aus, wie beim Versand. EN: Place the stored signature under the letter text. Off by default, same as on send. | |
| recipientAddressInline | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only carry readOnlyHint=false, openWorldHint=false, destructiveHint=false, so the description bears the full burden. It discloses side effects (draft stored, preview PDF generated), output behavior (page count, 24h preview link, cost estimate, warnings), the content/blocks exclusivity rule, and the irreversible nature of a printed letter. This is substantial behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and outputs, then moves into the mutually exclusive body format, an example, error-recovery guidance, and next steps. It is long and repeats every point in German and English, which costs conciseness, but for a 15-parameter tool with nested blocks and no output schema the level of detail is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema and minimal annotations, the description covers what the agent needs: return values, warnings, the draft lifecycle, the free-until-send rule, how to handle defects, and the follow-up tools by letterId. Paired with the schema's parameter descriptions, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema does much of the work. The description adds real value by clarifying the mutually exclusive content vs blocks relationship, providing a concrete compact blocks example, and pointing to the full blocks reference resource. It does not need to re-explain every parameter given the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states the specific action ('Legt einen Briefentwurf an' / 'Creates a letter draft') and the resource, and immediately distinguishes the tool from send/preview siblings by saying it stores a draft and returns a preview link and cost estimate. The description also names next-step tools (letter_preview, order_send, letter_schedule), reinforcing what this tool is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: create the draft, inspect the returned pages, fix defects by re-creating while it is still a draft, and only then send via order_send or schedule via letter_schedule. It names the alternatives as next steps but does not explicitly state 'use X instead of Y' or exclusions, hence 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_design_deleteBriefdesign löschenADestructiveInspect
Archiviert (loescht) ein gespeichertes Briefpapier (Briefdesign). Neue Sendungen laufen danach ueber die verbleibenden Briefpapiere, egal ob Kuendigung, Rechnung, Mahnung, Angebot, Vertrag oder Behoerdenpost; bereits versendete Briefe behalten ihr Original zur Nachvollziehbarkeit. EN: Archives (deletes) a saved letterhead (letter design). New sends then run on the remaining letterheads, whether cancellation, invoice, payment reminder, quote, contract or letter to a public authority; already-sent letters keep their original for auditability.
| Name | Required | Description | Default |
|---|---|---|---|
| designId | Yes | Das zu loeschende Briefdesign. EN: The letter design to delete. | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, but the description goes further by clarifying the action is archival ('Archiviert') and that sent letters retain their original. This is valuable behavioral context beyond the annotations, explaining what actually happens and what is not destroyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action is front-loaded and the structure is logical, but the content is duplicated in German and English, and the long list of document types (cancellation, invoice, reminder, etc.) adds little functional value. A shorter single-language version would convey the same meaning more efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, two parameters, and no output schema, the description covers the essential behavioral consequences: future sends use remaining letterheads, and sent letters are preserved. It does not mention reversibility or what happens if the design is not found, but these are minor gaps for an archive/delete operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes designId well enough, but the description adds no parameter-specific meaning. The optional 'reasoning' parameter is left undocumented, and schema description coverage is only 50%. The description does not compensate for this gap, though the most important parameter is already clear from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Archiviert (loescht)') and resource ('gespeichertes Briefpapier (Briefdesign)'), making the action unmistakable. It also differentiates from sibling tools like letter_design_save, letter_design_list, and letter_design_preview by clearly indicating this is the archival/deletion operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear decision-relevant context: after deletion, new sends use remaining letterheads, while already-sent letters keep their original for auditability. This implies when the tool should be used and states no exclusions. It does not explicitly name alternatives, but the usage context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_design_listBriefdesigns auflistenBRead-onlyInspect
Listet die gespeicherten Briefpapiere (Briefdesigns) des Partners samt vollstaendigem Design-JSON. Ein Design wird per Name oder ID beim Versand referenziert und traegt jede Post: Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost. EN: Lists the partner's saved letterheads (letter designs) with the full design JSON. A design is referenced by name or id when sending and carries every kind of mail: cancellation, invoice, payment reminder, quote, contract and letters to public authorities.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| includeArchived | No | Auch archivierte (geloeschte) Designs einschliessen. Standard false. EN: Include archived (deleted) designs too. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context by stating that the response includes the full design JSON and that designs cover all mail categories, but it does not disclose pagination, ordering, or result structure in more detail. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and is reasonably compact, but it duplicates the full content in German and English, which adds length without new information. The mail-category sentence is contextually useful but not essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two optional parameters, the description gives the core purpose and result content. However, with no output schema and one parameter left entirely unexplained, an agent still lacks complete information about the return value and the intended use of the 'reasoning' argument.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: the 'reasoning' parameter is undocumented in both the schema and the tool description. The 'includeArchived' parameter is described in the schema, but the description itself adds no parameter-level meaning and does not compensate for the undocumented reasoning field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the specific resource ('Briefpapiere/Briefdesigns') and the action ('Listet'), and adds that it returns the full design JSON. It is clear and self-contained, though it does not explicitly distinguish itself from closely related siblings like letter_design_list_presets or letterhead_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: designs are referenced by name or ID when sending mail, so an agent can infer that this tool is for looking up saved designs. However, there is no explicit when-to-use statement, no exclusions, and no comparison to the closely related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_design_list_presetsBriefdesign-Vorlagen auflistenBRead-onlyInspect
Liefert die vom Inhaber freigegebenen native-v2 Briefpapiere als sichere Ausgangspunkte fuer Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost. Sie waechst mit jeder abgenommenen Vorlage. Die normale Liste bleibt reiner Text und damit guenstig; mit presetId wird genau eine echte Composer-Vorschau samt Inline-PNG erzeugt. EN: Returns the owner-approved native-v2 letterheads as safe starting points for cancellations, invoices, payment reminders, quotes, contracts and letters to public authorities. It grows with every curated design that passes review. The plain list stays text-only and therefore cheap; presetId renders exactly one real-composer preview with an inline PNG.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| presetId | No | Optional: genau eine Vorlage samt gerenderter Vorschau laden. Ohne presetId bleibt die Liste bildfrei und guenstig. EN: Optional: load one preset with its rendered preview. Without presetId the list stays image-free and cheap. | |
| reasoning | No | ||
| resolution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive; the description adds useful behavior beyond that: the list grows with approved templates, the default result is text-only, and presetId triggers a real-composer preview. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key information is front-loaded and the structure is logical, but the German and English sections duplicate the same content and add some non-essential framing like 'grows with every curated design.' It is organized yet longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no clarification of what fields the list returns, nor how pages and resolution affect the preview. For a tool with four optional parameters and no output schema, the description leaves too many operational details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description compensates only for presetId. The meaning and effect of pages, resolution, and reasoning are left entirely undocumented, so an agent cannot know how to set them correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—'Returns the owner-approved native-v2 letterheads'—and clarifies the resource as curated, safe starting points for common letter types. It is clear, but it does not explicitly differentiate from sibling letter_design_list or letterhead_list, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear conditional: use the plain list for cheap text-only results, or pass presetId to render exactly one composer preview with an inline PNG. It does not name alternatives or say when not to use this tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_design_previewBriefdesign ansehenARead-onlyInspect
Rendert ein gespeichertes oder inline uebergebenes Briefdesign mit schemaVersion 1 oder 2 durch dieselbe Aufloesung und denselben Composer wie ein echter Versand. Nutzt echte Partner-Absenderdaten und einen erfundenen Empfaenger sowie Beispieltext. Liefert standardmaessig eine Inline-PNG-Seite; Seite 2 nur fuer continuationHeader. Mit sampleVariant empty siehst du das Briefpapier allein: Kopf und Fuss stehen echt, die Textflaeche bleibt frei, und genau dieses Bild zeigt auch das Dashboard. So siehst du vorab, wie Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost auf diesem Briefpapier aussehen. Der Lauf bleibt kostenfrei und der Brief bleibt ein Entwurf. EN: Renders a saved or inline schemaVersion 1 or 2 letter design through the same resolution and composer as an actual send. It uses real partner sender data with a fictional recipient and sample body. Returns one inline PNG page by default; page 2 only for continuationHeader. With sampleVariant empty you see the stationery on its own: header and footer are typeset for real, the text area stays open, and this is the very picture the dashboard shows. It shows in advance how a cancellation, invoice, payment reminder, quote, contract or letter to a public authority looks on this stationery. The run stays free of charge and the letter stays a draft.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Standard ist nur Seite 1. Seite 2 wird ausschliesslich bei continuationHeader geliefert. EN: The default is page 1 only. Page 2 is returned only for continuationHeader. | |
| design | No | ||
| designId | No | ||
| reasoning | No | ||
| reference | No | ||
| resolution | No | ||
| sampleContent | No | ||
| sampleSubject | No | ||
| sampleVariant | No | typical zeigt eine vollstaendige Beispielseite, an der du Lesbarkeit und Rhythmus beurteilst. empty zeigt das Briefpapier allein: Kopf und Fuss stehen echt, die Textflaeche bleibt frei. Ein eigener sampleContent hat Vorrang vor beidem. EN: typical shows a full example page for judging readability and rhythm. empty shows the stationery on its own: header and footer are typeset for real and the text area stays open. Your own sampleContent takes precedence over both. | typical |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description aligns with them ('Der Lauf bleibt kostenfrei und der Brief bleibt ein Entwurf'), so no contradiction. The description adds substantial behavior beyond annotations: data substitution (real partner sender data, fictional recipient and sample body), fidelity guarantees ('dieselbe Aufloesung und denselben Composer wie ein echter Versand'), output format (inline PNG), the page-2-only-for-continuationHeader condition, and the precise claim that sampleVariant empty produces exactly the picture the dashboard shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and bilingual, but every clause earns its place and it is well structured: purpose first, then fidelity, output mechanics, the sampleVariant edge case, concrete use cases, and finally the cost/draft guarantee. The EN mirror duplicates the DE text, which is conventional for this audience, and the density justifies the length given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with nested objects and no output schema, the description covers the essential call-relevant behaviors: how to select input (saved or inline design), rendering fidelity, return format (inline PNG), paging rules, and sample-variant effects. The remaining gaps are minor but real: the resolution parameter semantics and an explicit statement of how this tool differs from letter_preview.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at only 22%, the description must compensate, and it partially does: it explains the design/designId distinction ('gespeichertes oder inline uebergebenes'), the page-2 trigger ('Seite 2 nur fuer continuationHeader'), and the sampleVariant empty behavior ('Kopf und Fuss stehen echt, die Textflaeche bleibt frei'). However, the resolution parameter (thumb vs full) is not explained in either the schema or the description, and sampleSubject, reference, and reasoning also receive no semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Rendert ein gespeichertes oder inline uebergebenes Briefdesign' (renders a saved or inline letter design), with explicit scope of schemaVersion 1 or 2. The focus on rendering the *design* rather than a concrete letter distinguishes it from siblings like letter_preview, letter_design_save, and letter_design_delete without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'So siehst du vorab, wie Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost auf diesem Briefpapier aussehen' tells the agent when a preview is useful, and 'Der Lauf bleibt kostenfrei und der Brief bleibt ein Entwurf' signals a safe, pre-send scenario. However, it never names alternatives or states when-not-to-use, and it offers no explicit differentiation from the sibling letter_preview, which is the obvious competing choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_design_saveBriefdesign speichernAInspect
Speichert ein wiederverwendbares Briefpapier (Briefdesign) mit schemaVersion 1 oder 2 im Partnerprofil und gibt designId sowie den Hash der gespeicherten Quelldaten zurueck. Dasselbe Briefpapier traegt danach jede Post: Kuendigung, Rechnung, Mahnung, Angebot, Vertrag und Behoerdenpost. Falls das Tool clientseitig entfernt wurde, suche exakt nach letter_design_save. Das Design wird vor dem Speichern vollstaendig validiert und gegen die Zustellzonen geprueft. EN: Saves a reusable schemaVersion 1 or 2 letterhead (letter design) in the partner profile and returns its designId and stored-source hash. The same stationery then carries every kind of mail: cancellation, invoice, payment reminder, quote, contract and letters to public authorities. If the client unloaded the tool, search for letter_design_save. The design is fully validated and checked against postal clear zones before it is stored.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Eindeutiger Name des Briefdesigns. EN: Unique name of the letter design. | |
| design | Yes | ||
| designId | No | ||
| reasoning | No | ||
| brandingOwnershipConfirmed | No | Bei einer Neuanlage oder geaenderten Branding-Asset-Referenz zwingend true. Unveraenderte Folgespeicherungen brauchen keine erneute Bestaetigung. EN: Required as true when creating or changing a branding asset reference. Unchanged iterative saves need no renewed confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description carries the behavioral burden and does disclose meaningful traits: the design is fully validated before storage, checked against postal clear zones (Zustellzonen), and the tool returns a hash of stored source data. This goes beyond the schema. It stops short of stating overwrite/update behavior (what happens when designId is passed or a name is reused), but the disclosed validation and return-value behaviors are genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The essential purpose and return values are front-loaded in the first sentence, which is good. However, the description is bloated: the full bilingual repetition doubles length, and the enumeration of every mail type (Kuendigung, Rechnung, Mahnung, Angebot, Vertrag, Behoerdenpost) is illustrative filler rather than load-bearing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with a massive two-version nested schema and no output schema, the description covers the core contract: what it saves, where, what it validates, and what it returns. It does not explain update semantics (passing designId to modify an existing design), the purpose of the reasoning parameter, or what happens on validation failure — gaps an agent would benefit from knowing before first invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40% (name and brandingOwnershipConfirmed have descriptions in the schema). The tool description mentions schemaVersion 1 or 2 support, which touches design semantics, but it does not explain the undocumented parameters: designId (which doubles as an update handle given the returned designId), reasoning, or the update-vs-create meaning of brandingOwnershipConfirmed. With coverage below 50%, the description needed to compensate more than it does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (saves/speichert), resource (reusable letterhead/Briefdesign), scope (partner profile), and what it returns (designId + source-data hash). It clearly distinguishes itself from siblings like letter_design_delete, letter_design_list, and letter_design_preview, which are different operations on the same resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool — saving a reusable design so it carries all mail types (cancellation, invoice, reminder, etc.) — which gives contextual motivation. However, it does not explicitly state when not to use it or route to alternatives (e.g., letter_design_list_presets for preset-based designs, or letter_design_preview for checking before saving). The recovery hint about searching for letter_design_save is operational, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_getBrief abrufenBRead-onlyInspect
Liefert einen Brief des Partners samt zugehörigem Auftrag und einer 24 Stunden gültigen Download-URL für die PDF. EN: Returns one of the partner's letters together with its order and a download URL for the PDF valid for 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | No | ||
| letterId | No | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and non-destructive. The description adds useful behavioral context by stating that the response includes the letter, its associated order, and a PDF download URL that is only valid for 24 hours. It does not cover error cases, but that is acceptable for a simple read-only retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the main verb and resource, and includes the important URL-expiry detail at the end. The main inefficiency is repeating the same content in German and English, but overall it is compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main return values and the time-limited URL, which is useful since there is no output schema. However, it does not explain the optional `reasoning` parameter or how the agent should obtain/use the IDs, leaving the invocation details partially dependent on inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain the parameters, but it never mentions orderId, letterId, or reasoning. The parameter names are somewhat self-explanatory, yet the purpose of `reasoning` and whether both IDs are required or how they relate remain unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Returns/Liefert') and a specific resource: one of the partner's letters, together with its order and a 24-hour-valid PDF download URL. This makes the tool's core purpose clear and implicitly distinguishes it from list/search tools, though it never explicitly names a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single letter when its IDs are available, but it does not explicitly say when to use this tool instead of letter_list, letter_search, or letter_preview. It provides no when-not-to-use guidance or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letterhead_listBriefköpfe auflistenARead-onlyInspect
Listet die im Partnerprofil gespeicherten Briefköpfe mit einer kurzlebigen Vorschau-URL (24 Stunden gültig). EN: Lists the letterheads stored in the partner profile with a short-lived preview URL (valid for 24 hours).
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and non-destructive behavior. The description adds one useful behavioral detail—the preview URL is only valid for 24 hours—which is beyond the schema. However, it does not describe return shape, pagination, or other response behavior, so it provides only modest extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the primary action, and includes the key detail about URL validity. The bilingual repetition is intentional and not filler for a German/English tool surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no required parameters and no output schema, the description gives enough to understand what is returned: letterheads with preview URLs. It could mention whether the list is complete or how the optional reasoning parameter is used, but those are minor gaps given the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the only parameter, 'reasoning'. Since the parameter is optional and named in a self-explanatory way, the impact is limited, but the description still does not compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it states it lists the letterheads stored in the partner profile. It also mentions the distinguishing detail of a short-lived preview URL, which separates it from related letter/design list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool to retrieve letterheads already saved in the partner profile, with preview URLs. It does not explicitly name alternatives or exclusions, but the scope is obvious enough from the description and the sibling-tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letterhead_uploadBriefkopf hochladenAInspect
Lädt einen Briefkopf als PNG oder PDF hoch und speichert ihn im Partnerprofil. Quelle ist entweder fileUrl (bevorzugt) oder fileBase64, genau eine von beiden. PNG wird auf die Seite gedruckt; ein PDF-Briefkopf wird vorerst nur abgelegt, gedruckt wird bisher nur PNG (rendered=false). Beim Nachbau eines vorhandenen Briefs: Logo und Titelblock aus dem Kopf der Seite gehören hierher (dann letter_design_save); der Brieftext bleibt den blocks vorbehalten. EN: Uploads a letterhead as PNG or PDF and stores it in the partner profile. The source is either fileUrl (preferred) or fileBase64, exactly one of the two. PNG is printed on the page; a PDF letterhead is only filed for now, printing stays PNG-only (rendered=false). When rebuilding an existing letter: the logo and title block at the top of the page belong here (then letter_design_save); the letter body stays reserved for blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| fileUrl | No | Öffentliche http(s)-URL des Briefkopfs (PNG oder PDF), Alternative zu fileBase64. Bevorzuge diese Variante: Base64 kostet unnötig Kontext und verleitet zu starker Farbreduktion, die den gedruckten Briefkopf verschlechtert. Maximal 20 MB. EN: Public http(s) URL of the letterhead (PNG or PDF), alternative to fileBase64. Prefer this variant: base64 wastes context and encourages heavy colour reduction, which degrades the printed letterhead. Maximum 20 MB. | |
| widthMm | No | Breite in mm (optional). EN: Width in mm (optional). | |
| heightMm | No | Höhe in mm (optional). EN: Height in mm (optional). | |
| placement | No | Platzierung auf der Seite. EN: Placement on the page. | |
| reasoning | No | ||
| fileBase64 | No | Der Briefkopf als PNG oder PDF (Base64), Alternative zu fileUrl. EN: The letterhead as PNG or PDF (Base64), alternative to fileUrl. | |
| displayName | No | Anzeigename des Briefkopfs (optional). EN: Display name of the letterhead (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries the burden. It discloses that PNG is printed while PDF is only filed with rendered=false, that fileUrl is preferred over base64 due to context/color concerns, and the 20MB limit. This adds meaningful behavioral context beyond annotations. It doesn't mention side effects like overwriting existing letterheads, but for this tool the key behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
About 5 sentences covering the essential behavior, source selection, rendering limitations, and sibling routing. The bilingual structure is somewhat redundant, but each sentence adds information. The description is longer than ideal but not bloated; the front-loaded functional statement is first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 7-parameter upload with no output schema, the description explains the critical decisions: source priority, PNG vs PDF, exactly-one constraint, and when to use letter_design_save. The 'reasoning' parameter is undocumented and width/height semantics are thin, but the description covers the high-stakes aspects of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86% (6 of 7 parameters described). The description adds semantics beyond the schema by explaining the source selection logic ('genau eine von beiden'), the PNG/PDF rendering difference, and why fileUrl is preferred. However, widthMm/heightMm/displayName are only described as 'optional' in both schema and description without further guidance, and the 'reasoning' parameter is completely undocumented. Still, the core parameter semantics are substantially enriched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lädt ... hoch und speichert'), a resource ('Briefkopf'), and target ('Partnerprofil'), and distinguishes from letter_design_save and blocks. It clearly explains what this tool does and what it does not do. The sibling differentiation is explicit with 'dann letter_design_save' and 'der Brieftext bleibt den blocks vorbehalten.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the source preference (fileUrl bevorzugt), the mutual exclusivity ('genau eine von beiden'), and when to use letter_design_save for rebuilding letters. It gives clear context for what belongs here versus the blocks. This is explicit when-to-use guidance with alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_listBriefe auflistenBRead-onlyInspect
Listet die Briefe des Partners mit optionalen Filtern nach Empfängername, Betreff, Status und Zeitpunkt. EN: Lists the partner's letters with optional filters by recipient name, subject, status and time.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ||
| offset | No | ||
| reasoning | No | ||
| statusFilter | No | ||
| subjectContains | No | ||
| recipientNameContains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds the scope 'des Partners' and the filtering dimensions, but it does not disclose pagination behavior, ordering, or return format; with the annotations doing the heavy lifting on safety, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact bilingual sentence pair, front-loaded with the core action and containing no filler. The EN repetition is mildly redundant but serves clarity for multilingual agents, so it remains appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and a closely related sibling (letter_search), the description is under-specified. It omits pagination/limit/offset semantics, return shape, and any guidance for choosing between letter_list and letter_search, leaving a substantial gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by mapping filter concepts to parameters: recipient name (recipientNameContains), subject (subjectContains), status (statusFilter), and time (since). However, it does not explain limit, offset, or reasoning, which remain ambiguous despite the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Listet'/'Lists') and a specific resource ('Briefe des Partners'/'partner's letters'), and it names the main filter dimensions (recipient name, subject, status, time). It does not explicitly distinguish itself from the sibling tool letter_search, which likely overlaps in function, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does and mentions optional filters, but it gives no guidance on when to choose letter_list over letter_search or letter_get. No exclusion criteria or alternative routing is provided, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_page_urls_appBildlinks der Brief-Ansicht erneuernARead-onlyInspect
Nur fuer die interaktive Brief-Ansicht: erneuert die zeitlich begrenzten Bildlinks der Briefseiten, wenn die alten abgelaufen sind. EN: For the interactive letter view only: renews the time-limited image links of the letter pages once the old ones have expired.
| Name | Required | Description | Default |
|---|---|---|---|
| letterId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only and non-destructive behavior. The description adds relevant context beyond those annotations: the links are time-limited, they expire, and renewal applies only to the interactive letter view. It does not describe the return format, but for a read-only helper this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: scope, action, then trigger condition. The English translation is a deliberate duplication that improves accessibility without adding unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-only, non-destructive helper, the description covers the main facts: what it does, when to use it, and its scope. It does not specify the exact return shape of the renewed URLs, but the tool name and verb make the outcome reasonably clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, letterId, with no description and 0% schema description coverage. The description never explicitly explains that letterId identifies the letter whose page link URLs should be renewed; this must be inferred from the tool name and the word 'Briefseiten'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('renews the time-limited image links'), a specific resource ('letter pages in the interactive letter view'), and an explicit scope boundary ('Nur fuer die interaktive Brief-Ansicht'). This distinguishes it from sibling page-URL tools for approvals and templates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit trigger condition ('when the old ones have expired') and an explicit when-not constraint ('only for the interactive letter view'). An agent can confidently decide when to call this tool and when to look at other view-specific tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_previewBrief und Vorlage prüfenARead-onlyInspect
Brief und Entwurf als Bild pruefen, Formularvorschau rendern: komponiert wie einen echten Versand und liefert Inline-PNGs, PDF-Link, Seitenzahl, Preis und designRender mit dem tatsaechlichen documentMode, den gezeichneten Brief-Elementen und bodyStartMm. Die Vorschau bleibt kostenfrei und der Brief bleibt liegen. Der Brief kommt ueber letterId oder inline mit content ODER blocks. Ein ungespeichertes design kann direkt mitgegeben werden und gilt nur für diese eine Vorschau. WICHTIG FUER FORMULARE: Selbstauskunft, Fragebogen, Zertifikat und andere eigenstaendige Formulare immer zuerst mit design: { "schemaVersion": 1, "documentMode": "form" } pruefen; genau dann entfallen Empfaengerblock, Datum und Betreff und der Inhalt beginnt bei 27 mm. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz: frankki://blocks-guide. Beim Nachbau ist letter_preview PFLICHT: PNG Seite fuer Seite mit dem Original vergleichen. Weichen Seitenzahl oder wesentliche Geometrie ab, korrigiere blocks oder design und rufe letter_preview erneut auf; gespeichert wird erst, wenn beides passt. Wenn das Layout sitzt mit template_save als Entwurf sichern und danach template_release nutzen. EN: Preview letter and draft as images, render form preview: composes like a real send and returns inline PNGs, PDF link, page count, cost and designRender with the actual documentMode, rendered letter chrome and bodyStartMm. The preview stays free of charge and the letter stays put. Use letterId or inline content OR blocks. An unsaved design may be supplied directly and applies to this one preview only. IMPORTANT FOR FORMS: always preview self-declarations, questionnaires, certificates and other standalone forms first with design: { "schemaVersion": 1, "documentMode": "form" }; that is what drops recipient block, date and subject and starts content at 27 mm. Full reference: frankki://blocks-guide. For a rebuild, compare every PNG page against the original. If page count or major geometry differs, correct blocks or design and preview again; save once both match. Once matched, save with template_save, then use template_release.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Wie viele Seiten als Bild zurueckkommen. Standard 3, Maximum 8. Der PDF-Link enthaelt immer alle Seiten. EN: How many pages come back as images. Default 3, maximum 8. The PDF link always contains every page. | |
| blocks | No | Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. EN: structured letter content as typed blocks (alternative to content, never both). Jeder Block braucht type; erlaubte Typen: paragraph, heading, keyValue, checkboxRow, fillLine, table, totals, columns, box, image, spacer, pageBreak. Die vollstaendige Feldreferenz liegt in der MCP-Ressource frankki://blocks-guide. EN: every block needs type; read frankki://blocks-guide for the complete field reference. | |
| design | No | Ungespeichertes Briefdesign nur fuer diese Vorschau. Hat Vorrang vor designId und erzeugt keinen Eintrag im Konto. Fuer eigenstaendige Formulare documentMode: "form" setzen. EN: Unsaved letter design for this preview only. Takes precedence over designId and creates no account entry. Set documentMode: "form" for standalone forms. | |
| content | No | Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both. | |
| subject | No | Betreff. Ohne letterId erforderlich. EN: Subject. Required without a letterId. | |
| designId | No | Ein gespeichertes Briefdesign fuer diese Vorschau verwenden. EN: Use a saved letter design for this preview. | |
| language | No | ||
| letterId | No | Einen gespeicherten Entwurf in der Vorschau anzeigen. Alternativ den Brief inline angeben. EN: Preview a stored draft. Alternatively provide the letter inline. | |
| reasoning | No | ||
| reference | No | Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen Infoblock und Barcode in der Vorschau. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and barcode in the preview. | |
| styleDefs | No | Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide. | |
| resolution | No | thumb (96 dpi, Standard, schnell und klein) oder full (150 dpi, zum Pruefen von Details). EN: thumb (96 dpi, default, fast and small) or full (150 dpi, for checking details). | |
| senderProfileId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds meaningful beyond-annotation context: the preview is free of charge, the letter stays put, an unsaved design creates no account entry and only applies to this one preview, and a passed design takes precedence over designId. It also discloses form-mode behavior (recipient block/date/subject dropped, content starts at 27 mm). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and includes genuinely useful workflow details. However, it is very long and duplicates the entire German content in English, roughly doubling its length. It could be tightened substantially without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, the description covers the essentials: return values (PNGs, PDF link, page count, price, designRender with documentMode and bodyStartMm), side effects (free, letter stays put, no account entry), form-specific rendering behavior, iteration workflow, and a pointer to frankki://blocks-guide for the full block reference. Nothing critical for invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 77%, so the schema already documents most parameters. The description adds value with a compact runnable blocks example (heading/table/totals), a design:{schemaVersion,documentMode:'form'} snippet for forms, and the invariant that input comes via letterId or inline content OR blocks. This meaningfully supplements the schema without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names the action (pruefen/rendern), the resource (Brief/Entwurf/Formularvorschau), and the concrete outputs (Inline-PNGs, PDF-Link, Seitenzahl, Preis, designRender). It clearly frames letter_preview as a mandatory verification step before template_save/template_release, which helps distinguish it from the save/release flow. It does not explicitly contrast it with letter_design_preview or template_preview, but the letter/draft/form scope is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit iterative workflow: preview first, compare PNG pages against the original, correct blocks/design, preview again, and only then use template_save and template_release. It also gives a specific rule for standalone forms: always preview with design.documentMode='form'. It does not explicitly state when not to use sibling preview tools, which keeps it just 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.
letter_scheduleVersand planenAInspect
Plant den Versand eines bestehenden Entwurfs für einen späteren Zeitpunkt (fester Termin, relative Verzögerung oder wiederkehrend per cron). Alle Prüfungen und der Preis werden sofort ermittelt und die Kosten reserviert; der eigentliche Versand läuft zum geplanten Zeitpunkt durch dieselbe Versandpipeline. EN: Schedules the sending of an existing draft for a later time (fixed date, relative delay or recurring via cron). All checks and the price are determined immediately and the cost is reserved; the actual send runs at the scheduled time through the same send pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | at = fester Zeitpunkt, in = relative Verzögerung, cron = wiederkehrend. EN: at = fixed time, in = relative delay, cron = recurring. | |
| color | No | ||
| delay | No | Verzögerung bei mode='in': '2d', '1w', '3h', 'next-business-day', 'next-monday', 'end-of-month'. EN: Delay for mode='in': '2d', '1w', '3h', 'next-business-day', 'next-monday', 'end-of-month'. | |
| dryRun | No | Prüft und bepreist die Planung, legt aber nichts an und reserviert nichts. Liefert dryRunWouldHaveCost. EN: Validates and prices the schedule but creates nothing and reserves nothing. Returns dryRunWouldHaveCost. | |
| sendAt | No | Zeitpunkt bei mode='at' (ISO 8601, Berlin-Zeit wenn ohne Offset). EN: Time for mode='at' (ISO 8601, Berlin time if no offset). | |
| endDate | No | Enddatum für eine cron-Serie. EN: End date for a cron series. | |
| express | No | ||
| auditTag | No | ||
| letterId | Yes | Bestehender Entwurf, der geplant versendet wird. EN: Existing draft to be sent on schedule. | |
| reasoning | No | ||
| presetName | No | ||
| templateId | No | ||
| signatureId | No | ||
| deliveryType | No | ||
| maxCostEuros | No | Maximalbetrag in Euro. Liegt der Preis darüber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted. | |
| cronExpression | No | 5-Felder cron bei mode='cron': 'min std tag monat wochentag'. EN: 5-field cron for mode='cron': 'min hour day month weekday'. | |
| sendBeforeHour | No | Versand-Cutoff in Berliner Ortszeit. Nach dieser Stunde wird auf den nächsten Werktag verschoben. EN: Send cutoff in Berlin local time. After this hour it shifts to the next business day. | |
| mandantennummer | No | ||
| senderAddressId | No | ||
| senderProfileId | No | ||
| businessDaysOnly | No | Nur an Werktagen versenden, sonst auf den nächsten Werktag verschieben. Standard true. EN: Send on business days only, otherwise shift to the next business day. Default true. | |
| includeSignature | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say the tool is not read-only and not destructive, so the description carries the behavioral burden. It meaningfully discloses non-obvious side effects: checks and pricing happen immediately, costs are reserved, and the actual send later reuses the same send pipeline. It does not cover cancellation or how to identify the created schedule, but the core side effects are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The German and English halves are near-verbatim duplicates, which adds length, but each half is tight, front-loaded with the core action, and followed by the key cost-reservation side effect. There is no filler or irrelevant detail, and the bilingual structure is reasonable for this API.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 22 parameters, no output schema, and only 45% schema coverage, the description needs to explain return behavior or at least point to related lifecycle tools. It does not describe what the tool returns, how to cancel a scheduled send, or that schedule_list_or_cancel exists. For a tool that reserves real costs, this operational context is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers only 45% of parameters, and the description does not compensate for the gap. It restates the three modes but does not map them to specific parameters or explain undocumented fields such as color, express, auditTag, deliveryType, senderProfileId, or includeSignature. For a 22-parameter tool, this leaves too much to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it schedules the sending of an existing draft for a later time. It also enumerates the three scheduling modes (fixed, relative delay, recurring cron), which clearly distinguishes it from immediate-send siblings like order_send and from schedule management tools like schedule_list_or_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The target use case is clear: use this tool when an existing draft should be sent later rather than immediately. However, it does not explicitly name alternatives or exclusion conditions, such as 'for immediate sending use order_send' or 'for managing existing schedules use schedule_list_or_cancel', so it provides clear context without explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
letter_searchBriefe durchsuchenARead-onlyInspect
Durchsucht die Briefe des Partners per Freitext über Betreff, Empfängername und Briefinhalt. EN: Full-text searches the partner's letters across subject, recipient name and letter content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: Default 20, maximum 100. | |
| query | Yes | ||
| since | No | Nur Briefe, die seit diesem Zeitpunkt geändert wurden (ISO 8601). EN: Only letters modified since this time (ISO 8601). | |
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0. | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scope information (which fields are searched) but does not disclose other behavioral traits such as result ordering, matching semantics, or response structure beyond the schema defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence in German plus its English translation, with no filler. The key search behavior and scope are front-loaded before any schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with 5 parameters, the description plus schema covers the search scope, required/optional parameters, and pagination. Because there is no output schema, a small gap remains around what the returned matches look like, but this is unlikely to block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 60%, the description becomes important for the undocumented 'query' parameter, and it delivers by specifying that the query applies to subject, recipient name, and letter content. It does not explain the 'reasoning' parameter, but the other three parameters already have schema descriptions, so the overall semantic gap is small.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Durchsucht' / 'searches') and resource ('Briefe des Partners' / 'partner's letters') and names the exact searchable fields: subject, recipient name, and letter content. This clearly differentiates the tool from sibling list/retrieval tools like letter_list and letter_get, which do not perform full-text content search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this is the tool to use for full-text search over letter fields, but it does not explicitly state when to prefer it over alternatives such as letter_list or letter_get, nor does it give exclusions. No alternative tool is named, so the agent must infer the selection from the word 'Freitext'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mandant_getMandant abrufenBRead-onlyInspect
Liefert einen Mandanten mit Adressen, Kategorie, Sachbearbeiter, Monatslimit, verbrauchtem Monatsbudget, Aufbewahrungsdauer und der Briefanzahl der letzten 12 Monate. EN: Returns a client (Mandant) with addresses, category, case handler, monthly cap, monthly budget used, retention period and the letter count of the last 12 months.
| Name | Required | Description | Default |
|---|---|---|---|
| mandantId | No | ||
| reasoning | No | ||
| mandantennummer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds transparency by enumerating exactly what the tool returns (addresses, category, monthly budget, retention period, letter count), which is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence, but the English sentence fully duplicates the German sentence without adding information. This repetition costs tokens without benefit, though the field list is dense and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and three undocumented parameters, the description covers the return fields but leaves critical invocation details unaddressed: how to identify the Mandant, whether mandantId or mandantennummer is preferred, and what the optional reasoning parameter is for. It also does not distinguish when to use this versus list/search siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the meaning or usage of mandantId, mandantennummer, or reasoning. The parameter names are somewhat self-explanatory, but the description adds no input guidance, leaving ambiguity especially because no parameters are marked required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Liefert' / 'Returns') and the resource ('einen Mandanten'), and lists the specific data fields returned. It is distinguishable from sibling tools like mandant_list and mandant_search by its singular framing, though it does not explicitly contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool rather than alternatives such as mandant_list or mandant_search. It also fails to state whether callers should supply mandantId or mandantennummer, or when this single-record getter is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mandant_listMandanten auflistenBRead-onlyInspect
Listet die Mandanten des Partners, optional gefiltert nach Suchbegriff, Kategorie oder Tag. EN: Lists the partner's clients (Mandanten), optionally filtered by search term, category or tag.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: Default 20, maximum 100. | |
| since | No | Nur Mandanten, die seit diesem Zeitpunkt angelegt wurden (ISO 8601). EN: Only clients created since this time (ISO 8601). | |
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0. | |
| reasoning | No | ||
| tagFilter | No | ||
| searchQuery | No | ||
| kategorieFilter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true and destructiveHint=false, so the description does not need to repeat that this is a safe read. It adds the partner-scoped dataset and optional filtering behavior, but it does not mention pagination, ordering, or edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single bilingual sentence with no filler. The verb and resource are front-loaded, and the English equivalent is compact and useful rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation, the description conveys the core purpose and main filter options. However, with seven parameters and no output schema, it omits the since filter, pagination behavior, the reasoning parameter's purpose, and any description of the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 43%, with limit, since, and offset documented in the schema. The description adds meaning for otherwise undocumented filter parameters by mapping 'Suchbegriff' to searchQuery, 'Kategorie' to kategorieFilter, and 'Tag' to tagFilter. However, the reasoning parameter remains completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb ('Listet') and resource ('Mandanten des Partners'), plus optional filters by search term, category, or tag. It does not explicitly differentiate from the sibling mandant_search, so the agent must infer the list-versus-search boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool instead of alternatives such as mandant_search or mandant_get. The description restates the operation and optional filters, but it never says when this is the right choice or when it is not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mandant_searchMandanten suchenARead-onlyInspect
Sucht Mandanten über Mandantennummer, Name, Tags oder Sachbearbeiter und nennt für jeden Treffer die passende Spalte. Nächster Schritt mit der gefundenen mandantennummer: document_create erzeugt daraus eine Rechnung, Mahnung, Zahlungserinnerung oder Gutschrift, mandant_get liefert die vollständigen Stammdaten, letter_create_draft schreibt einen normalen Brief. EN: Searches clients (Mandanten) by client number, name, tags or case handler and names the matching column for each hit. Next step with the matched mandantennummer: document_create turns it into an invoice, dunning letter, payment reminder or credit note, mandant_get returns the full record, letter_create_draft writes a normal letter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: Default 20, maximum 100. | |
| query | Yes | ||
| since | No | Nur Mandanten, die seit diesem Zeitpunkt angelegt wurden (ISO 8601). EN: Only clients created since this time (ISO 8601). | |
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0. | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail beyond those annotations: each result identifies which column matched the query, helping the agent interpret hits. It does not cover pagination behavior, but limit and offset are documented in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is well ordered, with the main search behavior first and follow-up actions after. However, the full German text is duplicated in English, which doubles the length without adding new information. It is still readable and front-loaded, but not as tight as it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should clarify the return shape; it partially does by saying the matching column is named per hit and that a mandantennummer is available for next steps. It lacks explicit guidance on exact result fields, pagination behavior beyond schema basics, and how this tool relates to sibling search/list tools such as mandant_list or address_search_company.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, and the key parameter 'query' has no schema-level description. The description compensates by explaining that query can match Mandantennummer, Name, Tags, or Sachbearbeiter. The remaining parameters (limit, offset, since) are already described in the schema, though 'reasoning' remains unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Sucht') and resource ('Mandanten') and enumerates the search criteria: client number, name, tags, or case handler. It also notes that each hit names the matching column, which makes the tool's behavior concrete and distinct from generic list or get tools like mandant_list and mandant_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when you need to locate a Mandant by partial search criteria—and provides clear next-step routing by naming document_create, mandant_get, and letter_create_draft as follow-ups. It does not explicitly state exclusions or compare itself with alternatives like address_search_company, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_healthVerbindung prüfenARead-onlyInspect
Health-/Echo-Probe - prüft das Partner-Token und die Verarbeitungskette von Anfang bis Ende und sagt dir unter setup, welche Voraussetzungen für einen echten Versand schon erfüllt sind (Absender-Profil, AVV, Guthaben, Sandbox, Freigabe) und was der nächste Schritt ist. Mit checkRender: true wird zusätzlich geprüft, ob gerade überhaupt gerendert werden kann (Vorschau, Thumbnail). Rufe das auf, bevor du eine Vorlage baust, die du danach ansehen musst. EN: Health/echo probe - verifies the partner token and the chain end to end, and reports under setup which prerequisites for a real send are already met (sender profile, data processing agreement, balance, sandbox, approval) and what the next step is. With checkRender: true it additionally checks whether rendering currently works at all (preview, thumbnail). Call it before building a template you will need to look at.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| checkRender | No | Prüft zusätzlich den Render-Pfad (Composer + Rasterizer). Default false. EN: Additionally probes the render path (composer + rasterizer). Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly and non-destructive; the description adds context by explaining that it validates the token, checks the processing chain, reports setup prerequisites, and optionally probes the render path. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, but it repeats the same content in German and English, doubling its length without adding new information. The sentences are otherwise informative and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only health-check tool with rich annotations, the description covers what is checked, what the setup report contains, and how the optional render probe works. It does not describe the exact response shape, but the absence of an output schema is partially mitigated by the detailed description of what is reported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The checkRender parameter is described both in the schema and in the tool description, but the reasoning parameter has no schema description and is not mentioned in the tool description at all. With 50% schema coverage, the description needed to compensate for the undocumented parameter, and it fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a health/echo probe that verifies the partner token and the end-to-end processing chain. It also mentions the specific setup report and optional render check, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance to call this tool before building a template that will need to be viewed, and explains when checkRender should be enabled. It does not name alternative tools or explicit exclusions, but the context is clear enough for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_cancelAuftrag stornierenADestructiveInspect
Storniert einen Brief und schreibt den Betrag deinem Wallet gut (geschlossener Kreislauf, Gutschrift ins Wallet statt auf die Karte). Mit orderId wird eine bereits erstellte Bestellung im Stornofenster storniert; ist der Brief bereits im Druck, wird sauber abgelehnt. Mit approvalId wird eine per Chat freigegebene Sendung im 10-Minuten-Stornofenster gestoppt, bevor sie ueberhaupt versendet wird (der Mensch sagt 'stopp'). EN: Cancels a letter and credits the amount to your wallet (closed loop, credited to the wallet rather than the card). With orderId it cancels an existing order within the cancellation window; if the letter is already printing the call is cleanly rejected. With approvalId it stops a chat-approved send within its 10-minute grace window before it is even sent (the human says 'stop').
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optionaler Stornogrund. EN: Optional cancellation reason. | |
| orderId | No | Die zu stornierende Bestellung. EN: The order to cancel. | |
| reasoning | No | ||
| approvalId | No | Statt orderId: eine per Chat freigegebene Sendung im 10-Minuten-Stornofenster stoppen, bevor sie versendet wird (der Mensch sagt 'stopp'). EN: Instead of orderId: stop a chat-approved send within its 10-minute grace window before it is sent (the human says 'stop'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag the tool as destructive. The description adds valuable behavioral context: the refund is credited to the wallet rather than the card, already-printing orders are rejected, and chat-approved sends can be stopped before dispatch. It does not cover idempotency or invalid ID combinations, but the core behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and outcome, but the entire content is duplicated in German and English, roughly doubling the length without adding new semantic information. It is organized well but not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both cancellation modes and the wallet-credit side effect well. However, the schema declares zero required parameters, and the description never explicitly states that one of orderId or approvalId must be provided. With no output schema, return behavior is also left unspecified, which is a meaningful gap for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the description reinforces the orderId vs approvalId distinction already present in the schema. It adds real-world framing around printing state and timing windows, but it does not explain the 'reasoning' parameter and adds little meaning to 'reason' beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Storniert einen Brief') and clearly distinguishes the two invocation modes: orderId for existing orders and approvalId for chat-approved sends. It also names the outcome (credit to wallet), which separates it from siblings like order_send and order_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is provided for both modes: orderId works within the cancellation window, already-printing letters are cleanly rejected, and approvalId stops a chat-approved send within a 10-minute grace window. It never explicitly names alternative tools or says 'use X instead', so it is strong but not maximally complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_einlieferungsbelegEinlieferungsbeleg abrufenARead-onlyInspect
Liefert den Einlieferungsbeleg (Einlieferungsnachweis) zu einem versendeten Auftrag: eine 90 Tage gültige Download-URL für die Beleg-PDF, den Poststempel, den Versanddienstleister sowie den geprüften Nachweis aus dem GoBD-Archiv. EN: Returns the proof of posting (Einlieferungsbeleg) for a sent order: a download URL for the receipt PDF valid for 90 days, the postmark, the mail provider and the verified record from the GoBD archive.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so this is known to be a safe read operation. The description adds useful behavioral context beyond that: the returned URL expires after 90 days, the record comes from the GoBD archive, and the result includes postmark and provider details. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the primary purpose and provides a concise list of returned data. The German and English versions duplicate the same content, but this is reasonable for a bilingual tool and does not make the description bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one required UUID parameter and no output schema, the description explains what the caller receives in enough detail. The main gap is the unexplained 'reasoning' parameter, but this does not undermine the overall usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the input schema's lack of parameter documentation. It adds meaning for orderId by linking it to a sent order, but the optional 'reasoning' parameter is never explained, and no parameter-level detail is given in the schema either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Liefert'/'Returns') and a specific resource (Einlieferungsbeleg for a sent order), and enumerates the concrete result components: download URL valid for 90 days, postmark, mail provider, and GoBD archive record. This clearly distinguishes it from sibling tools like order_status or order_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys that this tool applies to a 'versendeten Auftrag' (sent order), which gives clear context for when to use it. However, it does not explicitly name alternatives, exclusions, or when not to use it, so it stops short of the highest guidance level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_fix_resubmitAdresse korrigieren und erneut sendenADestructiveInspect
Korrigiert die Empfaengeradresse eines Briefs, der auf eine Korrektur wartet (Status awaiting_partner_fix), und gibt ihn erneut zum Versand frei. Der Preis bleibt der alte: das reservierte Guthaben bzw. die bereits gebuchte Belastung bleibt bestehen. Das Tool verlangt den Status awaiting_partner_fix; jeder andere Status antwortet mit ORDER_NOT_FIXABLE. EN: Corrects the recipient address of a letter awaiting a fix (status awaiting_partner_fix) and releases it for sending again. The price stays as it was: the reserved balance or the already-booked charge stays. Requires status awaiting_partner_fix; any other status answers ORDER_NOT_FIXABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | ||
| reasoning | No | ||
| recipient | Yes | Die korrigierte Empfaengeradresse als Einzelfelder oder als { addressId } aus dem Partner-Adressbuch. EN: The corrected recipient address as inline fields or as { addressId } from the partner address book. | |
| clientOrderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it explains the price/billing behavior (reserved balance or booked charge stays), the status precondition, and the expected failure code. This is useful given destructiveHint=true, though it does not fully describe downstream side effects of releasing for sending.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and front-loaded: the main action comes first, followed by billing behavior and the critical status constraint. The German/English duplication adds length, but both versions contain no filler and each sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a targeted fix-and-resubmit operation, the description covers purpose, precondition, failure mode, and pricing side effects. It lacks explicit guidance on reasoning and clientOrderId, and there is no output schema, but the core calling context is clear enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description does not compensate for the undocumented parameters. It clarifies the recipient-related purpose but says nothing about reasoning or clientOrderId semantics, and orderId is only implicit through 'eines Briefs'. This leaves a meaningful gap for an agent selecting values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: it corrects the recipient address of a letter awaiting a fix and releases it for sending again. It also states the required status, which distinguishes this tool from generic sending or cancellation tools like order_send and order_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool: only for orders with status awaiting_partner_fix. It also states that any other status results in ORDER_NOT_FIXABLE. However, it does not explicitly name alternative sibling tools for other use cases, so it stops short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_sendBrief versendenADestructiveInspect
Versendet einen Brief physisch per Post: prüft die Pflichtangaben des Absenders, die Empfängeradresse, den AVV und die Limits, erstellt die finale PDF, berechnet den Preis und gibt den Versand frei. Sieh dir den Brief vorher als Bild an: letter_create_draft und letter_preview liefern die gerenderten Seiten, und Satzprobleme wie ein zu langer Betreff zeigen sich erst dort. Ein Brief kommt entweder ueber letterId (ein bereits erstellter Entwurf) oder inline: dann ist der Text entweder content (Fliesstext) ODER blocks (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Kompaktes blocks-Beispiel: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Volle Referenz inkl. styleDefs und Limits: MCP-Ressource frankki://blocks-guide. Standardmäßig landet der Versand zuerst als Freigabe in der Warteschlange, ein Mensch entscheidet über approval_decide. Danach fragst du den Fortschritt mit order_status ab. Zwei Wege zurück: order_cancel storniert einen Brief vor dem Druck, order_fix_resubmit korrigiert einen vom Dienstleister abgelehnten Brief und schickt ihn erneut. Mit dryRun wird der Versand nur geprobt: kostenfrei, und der Brief bleibt liegen. dryRun ist die vollständige Probe genau dieses Briefes durch alle sechs Gates und liefert damit den genauesten Preis. Ein dryRun bleibt eine reine Probe: die zurückgegebene letterId ist eine Probe-Kennung und liefert in letter_get oder letter_preview NOT_FOUND. Für einen echten Entwurf nutze letter_create_draft. shipping_quote beantwortet dagegen die Frage, was ein Brief kosten würde, solange der Inhalt erst geplant ist; letter_preview zeigt einen blocks-Entwurf vorab als Bild, bevor er hier versendet wird. EN: Sends a letter physically by post: checks the sender's mandatory details, the recipient address, the AVV and the limits, creates the final PDF, calculates the price and releases the send. Look at the letter as an image first: letter_create_draft and letter_preview return the rendered pages, and typesetting defects such as an over-long subject show up only there. A letter arrives either via letterId (an existing draft) or inline: then the body is either content (plain text) OR blocks (structured: tables, headings, totals lines), exactly one of the two. Compact blocks example: {"blocks":[{"type":"heading","text":"Rechnung"},{"type":"table","columns":[{"key":"text","label":"Artikel","width":"grow"},{"key":"sum","label":"Summe","align":"right","format":"eur"}],"rows":[{"text":"Beratung","sum":32000}]},{"type":"totals","lines":[{"label":"Gesamt","amountCents":32000,"emphasis":true}]}]} Full reference incl. styleDefs and limits: MCP resource frankki://blocks-guide. By default the send first lands in the approval queue and a human decides via approval_decide. After that, poll progress with order_status. Two recovery paths: order_cancel cancels a letter before it goes to print, order_fix_resubmit corrects a letter the provider rejected and resubmits it. With dryRun the send is only rehearsed: free of charge, and the letter stays put. dryRun is the full rehearsal of this specific letter through all six gates and therefore the highest-fidelity price. A dryRun stays a pure rehearsal: the returned letterId is a rehearsal handle and answers NOT_FOUND in letter_get or letter_preview. For a real draft, use letter_create_draft. shipping_quote instead answers what a letter would cost while the content is still only planned; letter_preview shows a blocks draft as an image before it is sent here.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | Ohne Angabe wird die Farbe automatisch erkannt. EN: If omitted, colour is detected automatically. | |
| blocks | No | Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. EN: structured letter content as typed blocks (alternative to content, never both). Jeder Block braucht type; erlaubte Typen: paragraph, heading, keyValue, checkboxRow, fillLine, table, totals, columns, box, image, spacer, pageBreak. Die vollstaendige Feldreferenz liegt in der MCP-Ressource frankki://blocks-guide. EN: every block needs type; read frankki://blocks-guide for the complete field reference. | |
| design | No | Exakter Briefdesign-Snapshot aus template_apply_with_merge_fields.composition.design. Hat Vorrang vor designId und verhindert, dass eine spaetere Designaenderung die freigegebene Vorlagenkomposition veraendert. EN: Exact letter-design snapshot from template_apply_with_merge_fields.composition.design. Takes precedence over designId and prevents later design edits from changing the released template composition. | |
| dryRun | No | ||
| content | No | Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both. | |
| express | No | ||
| subject | No | ||
| auditTag | No | ||
| designId | No | Ein gespeichertes Briefdesign fuer diesen Versand verwenden. Ohne Angabe gilt in dieser Reihenfolge: das am Entwurf gespeicherte Design (beim Versand ueber letterId), sonst das Standard-Design des Absenderprofils, sonst keins. EN: Use a saved letter design for this send. If omitted, in order: the design stored on the draft (when sending by letterId), else the sender profile default design, else none. | |
| letterId | No | Bestehender Entwurf. Alternativ den Brief inline angeben. EN: Existing draft. Alternatively provide the letter inline. | |
| reasoning | No | ||
| reference | No | Werte fuer diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie fuellen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode. | |
| styleDefs | No | Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide. | |
| presetName | No | ||
| templateId | No | ||
| scheduledAt | No | ||
| signatureId | No | ||
| approvalMode | No | Wie der Versand freigegeben wird. 'draft' und 'review' stellen ihn in die Freigabe-Warteschlange, statt sofort zu versenden. Wichtig: auch diese beiden reservieren den Betrag beim Einreichen im Wallet, damit ein freigegebener Brief spaeter nicht am Guthaben scheitert. Ohne Deckung kommt INSUFFICIENT_FUNDS zurueck und es wird nichts angelegt. Willst du nur einen Entwurf ohne Wallet-Deckung, nutze letter_create_draft. EN: How the send is approved. 'draft' and 'review' put it into the approval queue instead of sending immediately. Note: both still reserve the amount in the wallet at submit time, so an approved letter cannot fail on funds later. Without cover the call returns INSUFFICIENT_FUNDS and nothing is created. For a plain draft with no wallet cover, use letter_create_draft. | |
| deliveryType | No | Standard standard. EN: Defaults to standard. | |
| letterheadId | No | Bestimmter Briefkopf fuer diesen Versand. Ohne Angabe wird der Standard-Briefkopf verwendet. EN: A specific letterhead for this send. If omitted, the default letterhead is used. | |
| maxCostEuros | No | Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted. | |
| priceVersion | No | Optional: die priceVersion aus einem vorherigen shipping_quote. Weicht der Preis beim Versand davon ab, wird mit PRICE_CHANGED abgebrochen, bevor etwas berechnet wird. EN: Optional: the priceVersion from an earlier shipping_quote. If the price at send time differs, the call is aborted with PRICE_CHANGED before anything is charged. | |
| recipientZip | No | ||
| clientOrderId | No | Idempotenzschluessel: eine beliebige Zeichenkette (1-200 Zeichen, z. B. 'mahnung-kunde42-2026-07-20'; kein UUID-Format noetig). Ein erneuter Aufruf mit demselben Wert liefert dieselbe Bestellung, statt ein zweites Mal zu versenden. Der Namensraum 'approval:' ist reserviert. EN: Idempotency key: any string (1-200 characters, e.g. 'mahnung-kunde42-2026-07-20'; no UUID format required). A repeat call with the same value returns the same order instead of sending a second time. The 'approval:' namespace is reserved. | |
| recipientCity | No | ||
| recipientName | No | ||
| coverTemplateId | No | Anschreiben für eine eigenständige Formularvorlage. EN: Cover letter for a standalone form template. | |
| mandantennummer | No | ||
| recipientStreet | No | ||
| senderAddressId | No | ||
| senderProfileId | No | ||
| includeSignature | No | ||
| recipientCompany | No | ||
| recipientCountry | No | ISO-3166-alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE. | |
| letterheadEnabled | No | Auf false setzen, um den Briefkopf fuer diesen einen Versand zu unterdruecken. EN: Set to false to suppress the letterhead for this one send. | |
| templateVersionId | No | Exakte freigegebene Vorlagenversion. Nur gemeinsam mit templateId; der Server rendert sie mit templateMergeValues neu und ignoriert mitgesendeten Betreff/Inhalt. EN: Exact released template version. Only with templateId; the server rerenders it with templateMergeValues and ignores caller-supplied subject/content. | |
| templateMergeValues | No | Merge-Werte fuer die exakte Vorlagenversion. EN: Merge values for the exact template version. | |
| quotedUnitPriceCents | No | Optional: der Stueckpreis in Cent aus einem vorherigen shipping_quote (unitPriceCents). Ist er gesetzt, entscheidet er den PRICE_CHANGED-Abgleich und liefert den alten Preis im Fehler mit. EN: Optional: the unit price in cents from an earlier shipping_quote (unitPriceCents). If set, it decides the PRICE_CHANGED comparison and returns the old price in the error. | |
| recipientHouseNumber | No | ||
| coverTemplateVersionId | No | Exakte freigegebene Version des Anschreibens. EN: Exact released version of the cover letter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true/readOnlyHint=false; the description adds a wealth of behavioral context beyond that: the default approval-queue behavior with a human deciding via approval_decide, dryRun semantics (free, letter stays put, probe letterId returns NOT_FOUND in letter_get/letter_preview), wallet reservation for draft/review modes with INSUFFICIENT_FUNDS, and PRICE_CHANGED abort behavior. The description aligns with destructiveHint=true (sends physically, charges) rather than contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the purpose well and every sentence carries information, but the full German text is then repeated verbatim in English, roughly doubling the length. For an LLM parsing this, the duplication is pure overhead; a single well-structured bilingual or English-only version would be tighter. Dense content earns it a 3 rather than lower, but it is not concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, money-moving tool with 40 parameters, nested objects, no output schema, and an approval workflow, the description covers a remarkable amount: input modes, preview prerequisite, approval routing, wallet reservation, dryRun side effects, error conditions, price-abort semantics, idempotency, and recovery paths, plus a pointer to the frankki://blocks-guide resource. The main omission is any hint about the success response shape, which matters more here because no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 53%, so the description carries real weight and it delivers on the highest-stakes parameters: the letterId-vs-inline distinction, the content-OR-blocks exclusivity with a concrete compact blocks example, dryRun semantics, and the shipping_quote priceVersion flow. Many remaining parameters already have strong schema descriptions (clientOrderId, approvalMode, designId, templateVersionId). Minor gap: some parameters like color, express, subject, recipient fields get no description-level attention, but they are low-complexity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Versendet einen Brief physisch per Post' and then enumerates the full pipeline (checks sender details, recipient address, AVV, limits; creates PDF; calculates price; releases send). It actively differentiates from siblings by name (shipping_quote, letter_preview, letter_create_draft, order_cancel, order_fix_resubmit), so an agent can tell exactly which operation this is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance throughout: recommends previewing via letter_create_draft/letter_preview before sending, instructs use of letter_create_draft for plain drafts without wallet cover, routes cost-estimation-during-planning to shipping_quote, and names recovery paths (order_cancel, order_fix_resubmit). The schema's approvalMode description reinforces the letter_create_draft alternative. No exclusions are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_send_batchBriefe im Stapel versendenADestructiveInspect
Versendet mehrere Briefe in einem Stapel. Jeder Eintrag wird einzeln geprüft, bepreist und versendet; ein fehlerhafter Eintrag lässt den Rest des Stapels weiterlaufen (mit stopOnError hält der Stapel dort an). Der ganze Stapel wird als EINE einzige Freigabe für alle Empfänger zusammen eingereicht: der Mensch sieht die Empfängerliste, die Anzahl und die Gesamtkosten und entscheidet mit einem approval_decide über alles. Bei Freigabe gehen alle Einträge raus, bei Ablehnung wird die gesamte Reservierung zurückgebucht. Mit dryRun bleibt es bei der Probe: kostenfrei, und die Briefe bleiben liegen. EN: Sends several letters in one batch. Each entry is checked, priced and sent individually; a failing entry lets the rest of the batch continue (with stopOnError the batch stops there). The whole batch is submitted as ONE single approval covering every recipient: the human sees the recipient list, the count and the total cost and decides on all of it with a single approval_decide. On approval every entry goes out, on rejection the entire reservation is refunded. With dryRun it stays a rehearsal: free of charge, and the letters stay put.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Liste der Briefe im Stapel. Jeder Eintrag traegt seinen eigenen clientOrderId und genau eine Quelle: eine letterId ODER einen inline Brief. EN: List of letters in the batch. Each entry carries its own clientOrderId and exactly one source: a letterId OR an inline letter. | |
| dryRun | No | Simuliert den ganzen Stapel: prueft jeden Eintrag, berechnet aber nichts und versendet nichts. EN: Simulates the whole batch: validates each entry but charges nothing and sends nothing. | |
| presetName | No | Optionales Preset fuer den ganzen Stapel; pro Eintrag ueberschreibbar ist nicht vorgesehen. EN: Optional preset for the whole batch; per-entry override is not supported. | |
| stopOnError | No | Bricht den Stapel beim ersten Fehler ab. Standard false. EN: Aborts the batch on the first error. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say destructiveHint=true, but the description goes much further: it explains per-item validation and pricing, failure continuation, stopOnError, one combined approval, full send on approval, refund on rejection, and dryRun behavior. This is rich, accurate behavioral disclosure beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and contains useful detail, but it is long because every point is repeated in both German and English. It could be more concise with one language or structured bullets without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex batch-send tool, the description covers the key operational context: approval flow, error behavior, cost implications, dryRun, and side effects. No output schema exists, but the description provides enough for an agent to invoke the tool correctly and understand what will happen.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by connecting items, dryRun, and stopOnError to the actual batch execution model and approval semantics, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: sending multiple letters as one batch. It also distinguishes itself from single-send siblings by emphasizing the batch, the single approval, and options like stopOnError and dryRun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the batch context and approval flow clear, so an agent can infer when to use it. However, it never explicitly says when to prefer this over order_send, shipping_quote, or other related tools, nor does it state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
order_statusAuftragsstatus abrufenARead-onlyInspect
Liefert den aktuellen Status eines Auftrags samt chronologischer deutscher Sendungsverfolgung, der Sendungsnummer (nur bei Einschreiben), der voraussichtlichen Zustellung und ob sich der Brief noch stornieren lässt. Beim Status awaiting_partner_fix wartet der Brief auf eine Korrektur: rufe dann order_fix_resubmit auf. Solange cancellable true ist, kann order_cancel den Versand noch stoppen. EN: Returns the current status of an order including a chronological German tracking history, the tracking number (registered mail only), the estimated delivery and whether the letter can still be cancelled. On status awaiting_partner_fix the letter is waiting for a correction: call order_fix_resubmit. While cancellable is true, order_cancel can still stop the send.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context: tracking numbers appear only for registered mail, tracking history is chronological German tracking, and the response includes delivery estimate and cancellation availability. It also explains the awaiting_partner_fix state. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The German description is well-structured and front-loaded with core behavior before conditional routing. However, the entire text is repeated verbatim in English, doubling the length without adding new information and reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by enumerating the returned fields and status-dependent next steps. The main gap is the unexplained reasoning parameter; otherwise an agent has sufficient context to invoke the tool and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the description does not explain the orderId or reasoning parameters. While orderId is inferable from its name and UUID format, the optional reasoning field is entirely opaque, leaving the agent unsure what to pass or why.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('Liefert'/'Returns') and names the exact resource: the current status of an order. It also enumerates the specific payload fields (German chronological tracking history, tracking number for registered mail, estimated delivery, cancellation availability), which clearly distinguishes it from mutation siblings like order_send or order_cancel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit conditional routing: on status awaiting_partner_fix, call order_fix_resubmit; while cancellable is true, order_cancel can still stop the send. This gives an agent clear when-to-use and when-to-hand-off guidance beyond simply invoking the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preset_saveVoreinstellung speichernAInspect
Speichert eine benannte Voreinstellung (Konfigurations-Bundle) im Partnerprofil. Der Name ist pro Partner eindeutig. Limits in der Voreinstellung werden unverändert gespeichert und dienen als Notiz. Durchgesetzt werden ausschließlich die im Web gesetzten Konto- und Sub-Wallet-Limits. EN: Saves a named preset (configuration bundle) in the partner profile. The name is unique per partner. Limits inside the preset are stored as-is and serve as a note. Enforcement runs exclusively on the account and sub-wallet limits set in the web app.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Eindeutiger Name der Voreinstellung (pro Partner). EN: Unique name of the preset (per partner). | |
| preset | Yes | Das Konfigurations-Bundle (Absender/Unterschrift/Briefkopf, Versand, Kennzeichnung, Freigabe, Planung, Limits, auditTagPrefix). EN: The configuration bundle (sender/signature/letterhead, shipping, labelling, approval, scheduling, limits, auditTagPrefix). | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal non-readonly, non-destructive mutation, so the description carries the behavioral burden and delivers meaningfully. It discloses that the name is unique per partner (implying duplicate-name semantics), that limits are stored unmodified as a note, and critically, that the saved limits are not enforced — saving the agent from a wrong mental model. It does not specify whether a duplicate name overwrites or errors, which would have made this a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: the core verb-object is front-loaded in the first sentence, followed by two short sentences that add uniqueness and non-enforcement semantics. Being bilingual (German/English) doubles length, but both versions are complete and every sentence earns its place. No filler or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a complex nested-object parameter and no output schema, the description covers purpose, uniqueness, and the non-enforcement nuance well. However, it omits what happens on duplicate name (overwrite vs. error), any return-value expectations, and any mention of the reasoning parameter. These are notable gaps for an agent deciding how to invoke and interpret the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with name and preset documented but reasoning having no description at all. The description adds genuine semantic value for the preset parameter — clarifying that limits within it are stored as-is and serve only as a note — which is beyond the schema text. However, it does not cover the undocumented reasoning parameter, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Saves a named preset (configuration bundle) in the partner profile.' It goes beyond a bare statement by defining what the bundle contains and clarifying a key semantic boundary — that limits inside the preset are stored as notes and not enforced, which differentiates it from limit-setting or enforcement tools among the siblings. It does not explicitly name a sibling tool, but the functional scoping is strong enough to avoid confusion with template_save, letter_design_save, or brand_kit_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys implied usage context: it tells the agent this tool persists a configuration bundle and that enforcement happens 'exclusively on the account and sub-wallet limits set in the web app.' This indirectly warns the agent not to expect limit enforcement from this tool, but it never states explicit when-to-use or when-not-to-use conditions, nor does it name an alternative tool. The guidance is inferable rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pricing_tiersStaffelpreise abrufenARead-onlyInspect
Liefert die Staffelpreise (Mengenrabatte) von FrankKi: ab welcher Monatsmenge welcher Beispielpreis pro Brief gilt. Nutze das, wenn jemand nach Mengenrabatt, Volumenpreis, Staffelpreis oder Großkundenpreis fragt. Die Beispielpreise gelten für einen einseitigen Standardbrief in Schwarzweiß innerhalb Deutschlands, der echte Preis pro Brief hängt zusätzlich von Seitenzahl, Farbe, Versandart und Zielland ab (dafür shipping_quote). EN: Returns FrankKi's volume tiers (bulk discounts): from which monthly quantity which example price per letter applies. Use this when someone asks about bulk discounts, volume pricing or enterprise pricing. The example prices are for a one-page black and white standard letter within Germany; the real per-letter price also depends on page count, color, delivery type and destination country (use shipping_quote for that).
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description adds important behavioral context beyond annotations: the prices are examples for a one-page black-and-white standard letter within Germany, and the real price depends on additional factors. This sets correct expectations about the nature of the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it states the purpose, gives trigger keywords, then provides the caveat and the alternative tool. The only redundancy is the full bilingual repetition (German and English versions of the same content), which is acceptable for accessibility but slightly reduces conciseness. Every sentence earns its place in terms of content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only pricing tool with no business parameters, the description is complete. It explains what data is returned (tier thresholds and example prices), the exact assumptions (one-page B&W standard domestic letter), and routes to the relevant sibling tool for real quotes. The absence of an output schema is mitigated by a clear textual description of the return concept.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one optional 'reasoning' parameter with no description, but it is a generic meta-parameter rather than a business input. The description effectively covers the tool's domain semantics by explaining what data is returned, so no additional parameter guidance is necessary. The lack of a business parameter list is compensated by the description's clarity about scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns FrankKi's volume tiers') and resource, clearly stating what the tool provides: bulk discount tiers with the monthly quantity thresholds and example per-letter prices. It also distinguishes itself from shipping_quote by explicitly stating the tool gives example prices only, not real quotes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use the tool: 'Use this when someone asks about bulk discounts, volume pricing or enterprise pricing.' It also indicates when not to use it by directing real price calculations to shipping_quote, making the decision boundary unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profile_getPartnerprofil abrufenARead-onlyInspect
Liefert das Partnerprofil im Überblick: Standard-Absenderadresse, hinterlegte Signatur und Briefkopf, gespeicherte Presets, eine kurze Wallet-Zusammenfassung und das aktuelle Preismodell des Partners (Standardpreis oder Mengenstaffel, inklusive nächster Staffelstufe). EN: Returns an overview of the partner profile: default sender address, stored signature and letterhead, saved presets, a short wallet summary and the partner's current pricing (standard price or volume tier, including the next tier threshold).
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the scope of returned data, but does not disclose any behavioral traits such as aggregation behavior, latency, or auth requirements. It adds some value beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that conveys the tool's scope and contents efficiently. The bilingual repetition adds length but serves multilingual users; it remains appropriately sized and well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it lists the major categories (address, signature, letterhead, presets, wallet, pricing). It does not detail the reasoning parameter, but since the tool is callable with zero parameters and returns a summary, the coverage is sufficient for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter, 'reasoning', with zero schema description coverage (0%). The description does not explain the parameter's purpose or format. Since the schema gives no help and the description does not compensate, parameter semantics are weakly documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Liefert das Partnerprofil im Überblick') and enumerates the exact contents (sender address, signature, letterhead, presets, wallet summary, pricing model). This clearly distinguishes it from sibling tools like sender_profile_get or wallet_balance, which return narrower data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for getting a consolidated profile overview, but it does not explicitly state when to prefer it over individual sibling tools or when not to use it. It provides context (overview vs detail) without naming alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_list_or_cancelGeplante Sendungen verwaltenADestructiveInspect
Listet die geplanten Sendungen des Partners auf oder bricht eine geplante Sendung ab. Beim Abbrechen wird die reservierte Summe wieder freigegeben. EN: Lists the partner's scheduled sends or cancels a scheduled send. On cancellation the reserved amount is released again.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | list = Planungen auflisten, cancel = eine Planung abbrechen. EN: list = list schedules, cancel = cancel a schedule. | |
| dryRun | No | Bei action='cancel' nur eine Vorschau: zeigt die freizugebende Summe, ohne die Planung abzubrechen. EN: For action='cancel', a preview only: shows the amount to be released without cancelling the schedule. | |
| reasoning | No | ||
| scheduleId | No | Erforderlich bei action='cancel'. EN: Required for action='cancel'. | |
| statusFilter | No | Optionaler Statusfilter für action='list'. EN: Optional status filter for action='list'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state destructiveHint=true and readOnlyHint=false, so the destructive nature is covered. The description adds one useful behavioral detail: cancellation releases the reserved amount. However, it does not discuss irreversibility, permissions, or what happens when no matching scheduled send exists, so the addition is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short bilingual sentences with no wasted words. It front-loads the main action and the cancellation side effect, and it avoids repeating schema-level parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dual-mode tool with no required top-level parameters and no output schema, the description is minimal: it does not state that action is practically required, describe list versus cancel responses, or clarify that cancel is the destructive branch. The schema compensates for some of this, so the description is adequate but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes action, dryRun, scheduleId, and statusFilter with 80% coverage. The tool description adds little parameter-level meaning beyond connecting cancellation to the release of the reserved amount. With high 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('listet auf', 'bricht ab') and a clear resource ('geplanten Sendungen des Partners'), and adds a meaningful side effect ('reservierte Summe wird freigegeben'). It clearly distinguishes the list and cancel behaviors, so an agent can tell what this tool does without relying on the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to choose this tool over sibling tools such as letter_schedule or order_cancel, and it does not mention exclusions, prerequisites, or alternative tools. The intended use is only implied by the name and action enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sender_profile_getAbsenderprofil abrufenARead-onlyInspect
Liefert ein einzelnes Absenderprofil mit allen Pflichtangaben, Bankverbindung und Disclaimer. EN: Returns a single sender profile with all mandatory details, bank account and disclaimer.
| Name | Required | Description | Default |
|---|---|---|---|
| profileId | Yes | ||
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is well covered. The description adds useful return-content expectations but does not mention error cases, authorization requirements, or other behavioral aspects. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded in German with a direct English equivalent. There is no filler or unnecessary repetition beyond the bilingual translation, which is appropriate. It is concise and easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with read-only annotations and a required ID, the description is adequate at a high level but incomplete: it omits parameter semantics, especially for reasoning, and gives no guidance on when to use this tool over sender_profile_list or sender_profile_validate. It also lacks output structure, though the listed fields partially compensate for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain both parameters, but it mentions neither profileId nor reasoning. profileId can be inferred as the target profile identifier, but reasoning is left entirely undefined. The description therefore adds no parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly uses an action verb ('Liefert/Returns'), names the resource ('ein Absenderprofil/sender profile'), and specifies scope ('ein einzelnes/single'), which distinguishes it from sender_profile_list. It also lists the key returned content: mandatory details, bank account, and disclaimer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The word 'single' and the required profileId parameter imply this tool is for retrieving one profile by ID, but the description does not direct agents away from sender_profile_list or sender_profile_upsert. Usage context is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sender_profile_listAbsenderprofile auflistenBRead-onlyInspect
Listet alle Absenderprofile des Partners mit ihrer Rechtsform und ob die Pflichtangaben vollständig sind. EN: Lists all of the partner's sender profiles with their legal form and whether the mandatory details are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral context about what the result includes (legal form, mandatory-details completeness) and the scope ('all profiles'). However, it does not mention ordering, pagination, empty results, or any partner-identification prerequisite.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the verb and object. The bilingual duplication adds a little length but is compact and useful for language coverage. Every key point fits in two concise statements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only listing tool, and the annotations cover side-effect safety. However, the undocumented 'reasoning' parameter and the lack of any guidance about sibling tools leave gaps that an agent must resolve by trial or external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the only parameter, 'reasoning', is left entirely unexplained in both the schema and the description. The description does not compensate for this gap, so an agent cannot know what value to pass or whether the parameter affects the listing behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('listet/lists') and a clear resource ('alle Absenderprofile des Partners / all of the partner's sender profiles'). It further distinguishes the tool by specifying the returned attributes: legal form and completeness of mandatory details. This separates it cleanly from siblings like sender_profile_get or sender_profile_upsert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives the scope ('all profiles of the partner') but provides no guidance on when to choose this tool instead of sender_profile_get, sender_profile_validate, or other list tools. No alternatives or exclusion conditions are mentioned, so the agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sender_profile_upsertAbsenderprofil anlegen oder bearbeitenAInspect
Legt ein Absenderprofil an oder bearbeitet es: Rechtsform, Pflichtangaben, optional Bankverbindung, Haftungsausschluss und Standard-Briefpapier. Ein unvollstaendiges Profil wird gespeichert und meldet die fehlenden Felder zurueck, sodass du es schrittweise ergaenzen kannst. Versenden ist mit vollstaendigen Pflichtangaben moeglich. EN: Creates or edits a sender profile: legal form, mandatory details, optionally bank details, disclaimer and default letterhead. An incomplete profile is saved and reports its missing fields back, so you can complete it step by step. Sending works once they are complete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ID eines bestehenden Profils zum Bearbeiten. Weglassen legt ein neues an. EN: Id of an existing profile to edit. Omitting creates a new one. | |
| isDefault | No | true macht dieses Profil zum Standardabsender; jedes andere verliert die Markierung. Das erste angelegte Profil wird automatisch Standard. EN: true makes this the default sender. The first profile created becomes default. | |
| reasoning | No | ||
| disclaimer | No | Optionaler Haftungsausschluss oder Fusszeilentext, unabhaengig von der Vollstaendigkeit. EN: Optional disclaimer or footer, independent of completeness. | |
| rechtsform | Yes | Rechtsform des Absenders, zum Beispiel gmbh, ug, gbr, verein, freiberufler. Sie bestimmt die verlangten Pflichtangaben. EN: The sender's legal form. It determines the required mandatory details. | |
| displayName | No | Optionaler Anzeigename in Listen. EN: Optional display name in lists. | |
| bankverbindung | No | Optionale Bankverbindung, unabhaengig von der Vollstaendigkeit. EN: Optional bank details, independent of completeness. | |
| pflichtangaben | Yes | Pflichtangaben als Objekt, zum Beispiel firmenname, strasse, plz, ort, land, registergericht, ustIdNr. sender_profile_validate nennt die je Rechtsform verlangten Felder. EN: Mandatory details as an object. sender_profile_validate names the fields required per legal form. | |
| defaultDesignId | No | Briefpapier fuer Briefe, die selbst keines nennen. Weglassen behaelt den Wert, null loescht ihn. EN: Letterhead for letters naming none. Omitting keeps the value, null clears it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (three false hints), so the description carries the behavioral burden. It discloses the tool's most non-obvious contract: a partial/incomplete profile is still saved and missing fields are reported back, rather than the call failing validation; and sending is gated on completeness. This is exactly the kind of behavior an agent cannot infer from the name or schema and it is clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences per language, each carrying one distinct fact: purpose/scope, the partial-save-and-report behavior, and the sending requirement. The content is front-loaded and every clause earns its place; the only length comes from the deliberate bilingual (DE/EN) duplication, which is an accessibility choice rather than bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter write tool with nested objects and no output schema, the description covers the key uncertainty an agent faces — what happens on incomplete input (saved, missing fields reported) — and sketches the sending consequence. The remaining operational details (id-based upsert selection, isDefault default-marking side effects) live in the schema, which is rich enough to carry them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89% (only 'reasoning' lacks a description), and the schema descriptions are already rich — id's create-vs-edit semantics, isDefault's side effects, defaultDesignId's null-vs-omit distinction. The description's field list (Rechtsform, Pflichtangaben, Bankverbindung, Haftungsausschluss, Briefpapier) merely mirrors the schema property names without adding deeper meaning, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair — "Legt ein Absenderprofil an oder bearbeitet es" (creates or edits a sender profile) — and enumerates the affected fields (Rechtsform, Pflichtangaben, Bankverbindung, Haftungsausschluss, Standard-Briefpapier). The create/edit (upsert) semantics clearly distinguish it from the read-oriented siblings sender_profile_get, sender_profile_list, and sender_profile_validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys workflow context: incomplete profiles are saved and missing fields reported for step-by-step completion, and sending requires complete mandatory details. This implies when the tool is useful (iterative profile setup), but it never names alternatives or states explicit when/when-not conditions — the routing to sender_profile_validate for per-legal-form required fields appears only in the schema, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sender_profile_validateAbsenderprofil prüfenARead-onlyInspect
Prüft, ob ein Absenderprofil (per profileId) oder ein vorgeschlagener Feldsatz alle Pflichtangaben für seine Rechtsform enthält. Gib genau eine Form an: profileId ODER rechtsform + proposedFields. proposedFields ist ein Objekt; ein JSON-kodierter Objekt-String wird ebenfalls akzeptiert. Liefert valid, missingFields und weiche Hinweise. Meldet eine Lücke als Ergebnis und läuft dabei durch. EN: Checks whether a sender profile (by profileId) or a proposed field set contains all mandatory details for its legal form. Provide exactly one form: profileId OR rechtsform + proposedFields. proposedFields is an object; a JSON-encoded object string is also accepted. Returns valid, missingFields and soft hints. Reports a gap as a result and keeps running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint=true annotation, the description adds valuable behavioral detail: gaps are reported as a result rather than thrown as errors ('Meldet eine Lücke als Ergebnis und läuft dabei durch'), and soft hints are returned as part of the response. This tells the agent the tool is non-blocking and safe to call even when data may be incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and usage instructions are front-loaded, and the structure is logical: purpose, invocation pattern, accepted input variation, return fields, and non-blocking behavior. The full German/English duplication doubles the length, but each language block is internally tidy and the repetition is not excessive enough to obscure meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-mode validation tool with no output schema, the description covers everything an agent needs: what is checked, how to specify inputs, what is returned (valid, missingFields, soft hints), and how gaps are handled. The only minor nuance is that the schema makes proposedFields optional in the rechtsform branch while the description implies both are needed, but the description's 'exactly one form' guidance prevents ambiguity in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides oneOf structure but no per-property descriptions, so the description carries the semantic burden. It clarifies that profileId and rechtsform+proposedFields are mutually exclusive, that proposedFields is an object, and that a JSON-encoded object string is also accepted. This is precisely the kind of meaning an agent cannot derive from the raw JSON schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Prüft' / 'Checks') and resource ('Absenderprofil' / 'field set'), and clearly distinguishes the two validation modes: by profileId or by rechtsform + proposedFields. This makes it easy to tell apart from siblings like sender_profile_get or sender_profile_upsert, which have different verbs and resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs 'Gib genau eine Form an: profileId ODER rechtsform + proposedFields', telling the agent exactly which input combination to use. It does not explicitly name alternative tools or exclusion conditions, but the guidance is clear enough for correct invocation without cross-referencing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_fix_linkAuf der Website erledigenARead-onlyInspect
Gibt einen Punkt an den Menschen im Browser weiter: Guthaben aufladen, Einwilligung (AVV) unterschreiben oder das Absender-Profil vervollstaendigen. Liefert die passende Seite und eine Karte, die den Briefentwurf sichtbar stehen laesst und selbst merkt, wenn der Mensch zurueck ist. Bezahlt wird immer im Browser. EN: Hands one item over to the human in a browser: top up the balance, sign the data processing agreement or complete the sender profile. Returns the matching page plus a card that visibly keeps the letter draft and notices by itself when the human is back. Payment always happens in the browser.
| Name | Required | Description | Default |
|---|---|---|---|
| gap | Yes | Welcher Punkt uebergeben wird: wallet (Guthaben), avv (Einwilligung) oder senderProfile (Absender-Profil). EN: Which item is handed over: wallet (balance), avv (consent) or senderProfile (sender profile). | |
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and non-destructive; the description adds useful behavioral context by stating that it returns a page plus a self-monitoring card that keeps the letter draft visible and notices when the human returns. It also clarifies that payment is not handled by this API call but happens in the browser.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and supported items, then adds only essential behavioral details. The bilingual repetition is slightly redundant but does not hurt scanning, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description covers the trigger, the three target values, the returned artifacts (page/card), and the payment boundary. It does not describe the output format or the purpose of 'reasoning', but an agent has enough context to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the 'gap' enum well, so the description's restatement of the three values adds minimal value. The optional 'reasoning' parameter is undocumented in both the schema and the description, and with only 50% schema coverage the prose should have filled that gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('hands one item over to the human in a browser') and enumerates the three supported gaps: balance top-up, AVV consent, and sender profile completion. It is clear about the resource and expected outcome, though it does not explicitly distinguish itself from sibling tools like wallet_topup_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended context is evident: use this when a setup item must be completed by a human in the browser, and the statement that 'payment always happens in the browser' clarifies a boundary. It does not name alternatives or state exclusions, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_status_appEinrichtungsstand fuer die Karte lesenARead-onlyInspect
Nur fuer die FrankKi-Karten im Chat: liest den aktuellen Einrichtungsstand, damit die Stand-Karte frisch bleibt und die Uebergabe-Karte selbst merkt, wenn der Mensch aus dem Browser zurueck ist. EN: For the FrankKi cards in the chat only: reads the current setup state so the status card stays fresh and the handover card notices by itself when the human is back from the browser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, so the description only needs to add context beyond that. It explains that the tool helps keep the status card fresh and enables the handover card to detect browser return, which is useful behavioral context. It does not describe return values or exact update mechanics, but the safety profile is already 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the scope and action, and the purpose is clearly stated. The German and English versions are identical in content, which adds slight redundancy, but the overall length is still reasonable and well-structured for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool, the description covers scope and purpose well. However, there is no output schema and no explicit description of what the returned setup state contains or how the agent should use it. This leaves a notable gap for an agent deciding what to do after invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage, so there are no parameter semantics for the description to clarify. Per the baseline for zero-parameter tools, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('liest'/'reads') and resource: the current setup state for the FrankKi cards in the chat. It also clarifies that this is not a general-purpose status tool by explicitly limiting it to those cards. This clearly distinguishes it from sibling status tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it only for FrankKi cards in the chat, and use it to keep the status card fresh or let the handover card notice the human's return. It does not explicitly name alternatives or say when not to use it, but the 'Nur fuer'/'only' phrase provides a meaningful exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shipping_quoteVersandpreis ermittelnARead-onlyInspect
Ermittelt den Preis, das Briefformat, die Versandart und die voraussichtliche Laufzeit für einen geplanten Brief, bevor er versendet wird. Das ist die Schätzung für den Fall, dass der Brief erst geplant ist: du gibst nur Seitenzahl, Land und Versandart an. Steht der Brief schon fest, versendest du ihn mit order_send (order_send mit dryRun:true liefert dann den genaueren Preis für genau diesen Brief). Der Preis gilt pro Brief und enthält bereits die Mengenstaffel des Partners, falls eine greift (Feld tierId). Für die Staffelpreise selbst nutze pricing_tiers. EN: Determines the price, letter format, shipping method and estimated delivery time for a planned letter, before it is sent. This is the estimate for when the letter is still only planned: you only supply page count, country and delivery type. Once the letter exists, order_send performs the actual send (and order_send with dryRun:true gives the more precise price for that specific letter). The price is per letter and already includes the partner's volume tier where one applies (field tierId). For the volume tiers themselves, call pricing_tiers.
| Name | Required | Description | Default |
|---|---|---|---|
| color | Yes | Farbannahme fuer eine allgemeine Schaetzung. Mit letterId erkennt FrankKi die Farbe aus der gespeicherten Vorschau und ignoriert diesen Wert. EN: Colour assumption for a general estimate. With letterId, FrankKi detects colour from the stored preview and ignores this value. | |
| country | No | ISO 3166-1 alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE. | |
| express | No | ||
| letterId | No | Optional: die letterId eines bestehenden Entwurfs. Dann kommen Seitenzahl und Farbe aus der gespeicherten Vorschau; fuer den endgueltigen Preis inklusive Anhaengen nutze order_send mit dryRun:true. EN: Optional: the letterId of an existing draft. Page count and colour then come from the stored preview; for the final price including attachments, use order_send with dryRun:true. | |
| pageCount | Yes | Seitenzahl fuer eine allgemeine Schaetzung. Mit letterId verwendet FrankKi die gespeicherte Seitenzahl und ignoriert diesen Wert. EN: Page count for a general estimate. With letterId, FrankKi uses the stored page count and ignores this value. | |
| reasoning | No | ||
| deliveryType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds useful behavioral context by clarifying this is an estimate for a not-yet-sent letter and that the price already includes applicable volume tier (tierId). This complements, rather than contradicts, the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, but the full explanation is duplicated in German and English, roughly doubling the length without adding information. Each language version is coherent, but the overall size is not fully earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers main return aspects (price, format, shipping method, ETA, tierId) and differentiates well from siblings, which is important given no output schema. However, it omits the required color parameter in its usage summary and gives no guidance on express or reasoning parameters, leaving meaningful gaps for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 57%, but the description fails to compensate for undocumented parameters like express, reasoning, and deliveryType. More importantly, it states users only supply page count, country, and delivery type, omitting the required color parameter, which is misleading. It does add some context around letterId and tierId, but the inaccuracy and missing parameter meaning are significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool determines price, letter format, shipping method, and estimated delivery time for a planned letter. It explicitly differentiates itself from order_send and pricing_tiers, so an agent can distinguish it from relevant siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use this for planned letters where only page count, country, and delivery type are known. It also names the alternatives: order_send with dryRun:true for exact pricing on an existing letter, and pricing_tiers for volume tier details. This fully routes the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signature_listUnterschriften auflistenARead-onlyInspect
Listet die im Partnerprofil gespeicherten Unterschriften mit einer kurzlebigen Vorschau-URL (24 Stunden gültig). EN: Lists the signatures stored in the partner profile with a short-lived preview URL (valid for 24 hours).
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety is covered. The description adds meaningful behavioral context beyond annotations: the preview URLs are short-lived and valid for exactly 24 hours, which is important for downstream use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the key action and resource in the first words. It is duplicated in German and English, which adds accessibility but means the English sentence does not contribute new semantic information; still, it remains appropriately compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no required parameters and no output schema, the description sufficiently covers what the tool does and what kind of result to expect (signatures with short-lived preview URLs). The only meaningful gap is the undocumented 'reasoning' parameter and the absence of any explicit statement about the returned list's structure or pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single optional string parameter 'reasoning' with no description, and schema description coverage is 0%. The tool description does not explain the purpose or expected value of this parameter, so an agent receives no parameter-level guidance beyond the schema's type and optionality.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Listet'/'Lists') with a clear resource ('Unterschriften'/'signatures') and a precise source ('Partnerprofil'). It further specifies the output type (preview URL with 24-hour validity), distinguishing it from related tools like signature_upload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving stored signatures, but it does not explicitly state when to use it instead of alternatives or mention exclusion criteria. It gives useful context by focusing on 'stored in the partner profile,' but no direct reference to sibling tools like signature_upload.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signature_uploadUnterschrift hochladenAInspect
Lädt eine Unterschrift als PNG hoch und speichert sie im Partnerprofil. Die Unterschrift wird beim Versand unterhalb deines Brieftexts eingefügt. Nur PNG wird unterstützt. EN: Uploads a signature as PNG and stores it in the partner profile. On sending, the signature is inserted below your letter body. Only PNG is supported.
| Name | Required | Description | Default |
|---|---|---|---|
| widthMm | No | Gewünschte Breite in mm (optional). EN: Desired width in mm (optional). | |
| pngBase64 | Yes | Die Unterschrift als PNG (Base64). EN: The signature as PNG (Base64). | |
| reasoning | No | ||
| displayName | No | Anzeigename der Unterschrift (optional). EN: Display name of the signature (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnly=false and destructive=false, so description carries the burden of explaining side effects. It clearly states the upload stores the signature in the partner profile and that it will be inserted into outgoing letters. It could add details about overwrite behavior or size limits, but these are not critical for basic invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action. Repeating the content in English after German adds length but serves bilingual clarity without being verbose. Every sentence contributes either the purpose, the use context, or the format constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple upload tool with no output schema, the description gives essential context about storage and usage, but it omits what the response contains (e.g., an ID or success status) and does not address potential overwrite behavior or file size limits. These gaps are noticeable but not severe given the low complexity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with pngBase64, widthMm, and displayName already described in the schema. The description adds the note that only PNG is supported, which reinforces the meaning of pngBase64. However, it does not elaborate on reasoning, and the schema already covers most parameter semantics, so the added value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('uploads a signature as PNG and stores it in the partner profile') and clarifies its role in the letter-sending flow. It clearly distinguishes itself from sibling upload tools like letterhead_upload or attachment_upload_image by specifying 'signature' and the PNG format.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by explaining that the signature is inserted below the letter body on sending, giving a clear context. However, it does not explicitly name alternatives or state when not to use it (e.g., for letterheads or general images). The 'Only PNG is supported' constraint partially guides format selection but not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_apply_with_merge_fieldsVorlage mit Werten füllenARead-onlyInspect
Füllt die Platzhalter einer gespeicherten Vorlage mit deinen Werten und gibt Betreff und Inhalt oder ein vollständiges Anschreiben-Formular-Paket zurück. Bei einer Blockvorlage kommen statt content die fertigen blocks zurück. Briefkopf und Marke werden getrennt bei Vorschau oder Versand gewählt. Eine eigenständige Formularvorlage mit sendable:false und releaseBlocker:null braucht coverTemplateId aus einer direkt adressierbaren Briefvorlage; eine gespeicherte Verknüpfung bleibt nur der optionale Standard. Übergib danach templateId, templateVersionId, coverTemplateId, coverTemplateVersionId und die ursprünglichen templateMergeValues unverändert an order_send. Gib Paketabschnitte so weiter, wie sie zurückkommen. Fehlt eine Pflichtangabe, antwortet das Tool mit MERGE_FIELDS_MISSING und nennt die fehlenden oder ungültigen Felder. EN: Fills a saved template and returns subject and content or a complete cover-form package. For a block template the finished blocks are returned instead of content. Letterhead and brand are selected separately at preview or send time. A standalone form template with sendable:false and releaseBlocker:null needs coverTemplateId from a directly addressable letter template; a saved link is only the optional default. Then pass templateId, templateVersionId, coverTemplateId, coverTemplateVersionId and the original templateMergeValues unchanged to order_send. Pass package sections on exactly as they come back. If a required value is missing, the tool returns MERGE_FIELDS_MISSING and lists the missing or invalid fields.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Sprache fuer die Formatierung von Betrag und Datum. Standard de. EN: Language for money and date formatting. Defaults to de. | |
| reasoning | No | ||
| templateId | Yes | Id der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get. | |
| mergeValues | No | Zuordnung von Platzhalter-Namen zu Werten, z. B. { "provider": "Telekom" }. Der Typ des Merge-Feldes gilt: date erwartet ISO JJJJ-MM-TT, currency ganzzahlige Cent, number eine Zahl, rows eine Liste von Zeilenobjekten mit den Spaltenschluesseln der gebundenen Tabelle. EN: Mapping of placeholder names to values, e.g. { "provider": "Telekom" }. The merge field's type applies: date expects ISO YYYY-MM-DD, currency integer cents, number a number, rows a list of row objects keyed by the bound table's column keys. | |
| coverTemplateId | No | Optionales Anschreiben für eine eigenständige Formularvorlage. Ohne gespeicherte Verknüpfung ist es zum Anwenden erforderlich. EN: Optional cover letter for a standalone form template. Required when applying a form that has no saved link. | |
| mandantennummer | No | Optionaler Mandantenbezug (nur Kontext). EN: Optional client reference (context only). | |
| templateVersionId | No | Exakte freigegebene oder ersetzte Vorlagenversion. Ohne Angabe wird die aktuell freigegebene Version verwendet. EN: Exact released or superseded template version. If omitted, the currently released version is used. | |
| coverTemplateVersionId | No | Optional: exakte freigegebene Version des gewählten Anschreibens. EN: Optional exact released version of the selected cover letter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses error behavior (MERGE_FIELDS_MISSING with missing/invalid fields), output shape differences (blocks vs content vs form package), and the rule that letterhead and brand are not set here. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and logically ordered, but every section is repeated in German and English, so the description is about twice as long as necessary. The redundant bilingual duplication keeps it from earning a higher score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the three output variants (content, blocks, cover-form package) and the error response. It also covers the post-processing handoff to order_send. Exact response field names/types are absent, but the essential behavioral context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high, so baseline is 3; the description adds workflow meaning by requiring the same templateId/templateVersionId/coverTemplateId/coverTemplateVersionId and mergeValues to be passed unchanged to order_send. It also clarifies the conditional requirement on coverTemplateId. Minor naming mismatch ('templateMergeValues' vs schema's 'mergeValues') prevents a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a concrete verb and resource: filling a saved template's placeholders and returning Betreff/Inhalt or a complete cover-form package. It also specifies block templates return blocks instead of content, which distinguishes this as the template-application step from siblings such as template_get/template_preview and order_send.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames when the tool is used: before order_send, and instructs passing the resulting IDs and mergeValues unchanged. It also explains when coverTemplateId is required for standalone form templates, but it does not explicitly list alternatives or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_archiveVorlage archivierenADestructiveInspect
Archiviert eine Vorlage. Sie verschwindet aus den Listen und aus dem Versand, bleibt aber erhalten. Der Inhalt bleibt vollstaendig erhalten, und ein erneuter Aufruf ist unschaedlich. EN: Archives a template. It disappears from the lists and from sending but is kept. The content stays fully preserved and calling it again is harmless.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral detail beyond the destructiveHint=true annotation: it specifies the exact consequences (removal from lists/sending), guarantees content preservation, and notes idempotency ('calling it again is harmless'), which tempers the destructive hint without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: first sentence names the action, second describes effects and caveats. The bilingual duplication (German and English) is redundant for an agent but not excessive, keeping the description efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with no output schema, the description covers the essential action and consequences (what disappears, what remains, idempotency). It doesn't mention reversibility or return values, but these are less critical given the clear behavioral outline.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no parameter-level guidance. With 0% schema description coverage, it fails to explain the optional 'reasoning' parameter or confirm the role of 'templateId' beyond what the schema already shows, so it doesn't compensate for the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Archives a template') and immediately explains the effect ('disappears from lists and from sending but is kept'), which clearly distinguishes it from deletion or other template mutations among the many template_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to use it—when a template should stop being listed and sendable but remain available—yet does not name alternative tools or explicit exclusions, so the guidance is context-based rather than comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_decide_appVorlagenfreigabe auf der Karte entscheidenBInspect
Nur fuer die interaktive Vorlagen-Karte: gibt die angezeigte Entwurfsversion frei oder verwirft sie, nachdem der Mensch auf der Karte gedrueckt hat. Freigeben macht die Vorlage fuer Versand und Agenten sichtbar. EN: For the interactive template card only: releases or discards the displayed draft version after the human pressed the button on the card. Releasing makes the template visible to sending and to agents.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | ||
| versionId | Yes | ||
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool 'verwirft die angezeigte Entwurfsversion' (discards the displayed draft version), which is a destructive action, yet annotations declare destructiveHint=false. This is an annotation contradiction. While the description usefully notes that releasing makes the template visible to sending and agents, the discard semantics conflict with the structured hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively short and front-loads the key scope and action before the effect. The main inefficiency is the full German/English duplication, which is understandable for a bilingual UI context but slightly redundant for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter tool, the description provides enough core context: scope, action, and release effect. However, it leaves the discard side effects unclear and omits any return/value expectations, and the destructiveHint contradiction creates an incomplete behavioral picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate, and it partially does: 'release or discard' maps to the decision enum, and 'displayed draft version' maps to versionId. However, templateId is only inferable from the tool name, and the description gives no guidance on how to obtain or validate the IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action pair, 'releases or discards the displayed draft version,' on a specific resource and clearly restricts it to 'the interactive template card only.' This distinguishes it from sibling tools like template_release and template_draft_discard by adding the card/button context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says this is 'nur fuer die interaktive Vorlagen-Karte' and is to be used 'nachdem der Mensch auf der Karte gedrueckt hat,' which gives clear contextual guidance. It does not name alternative tools or state explicit when-not-to-use conditions, but the scope restriction is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_diff_checkAbweichung zur Vorlage prüfenARead-onlyInspect
Vergleicht deinen finalen Brief mit der Vorlage und zeigt dir, wo du abgewichen bist. Bei einer Blockvorlage uebergibst du finalBlocks statt finalContent; verglichen werden die Texte in Lesereihenfolge. Kostenlos und rein lesend. EN: Compares your final letter with the template and shows you where you deviated. For a block template pass finalBlocks instead of finalContent; the texts are compared in reading order. Free and read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| versionId | No | Optional: bestimmte Version, sonst die freigegebene. EN: Optional: a specific version, otherwise the released one. | |
| templateId | Yes | Id der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get. | |
| finalBlocks | No | Deine finalen Bloecke, wenn der Brief strukturiert ist. Verglichen werden die Texte in Lesereihenfolge. EN: Your final blocks when the letter is structured. The texts are compared in reading order. | |
| mergeFields | No | Zuordnung der Platzhalter-Namen zu Werten, z. B. { "provider": "Telekom" }. EN: Mapping of placeholder names to values, e.g. { "provider": "Telekom" }. | |
| finalContent | No | Dein finaler Brieftext. Bei einem Blockbrief stattdessen finalBlocks. EN: Your final letter text. For a block letter use finalBlocks instead. | |
| finalSubject | Yes | Dein finaler Betreff. EN: Your final subject line. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'rein lesend' / 'read-only' and 'free', reinforcing the readOnlyHint=true annotation. It adds behavioral detail that the text comparison happens in reading order, but it does not describe the shape of the deviation output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the purpose, and each clause adds either the block-template rule or the read-only/free status. The bilingual repetition is compact and not excessive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only comparison tool with detailed schema descriptions, the main facts are covered: what is compared, the block-vs-content input distinction, and safety/cost. A minor gap is the lack of an output format since no output schema is provided, but the description still gives enough to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already documents most parameters. The description's finalBlocks/finalContent guidance largely repeats the schema's existing descriptions and adds little new meaning beyond emphasizing the block-template case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('compares'), a resource ('your final letter' vs 'the template'), and the result ('shows you where you deviated'). This clearly differentiates it from siblings such as template_apply_with_merge_fields or template_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use it to compare a finished letter against a template and see deviations. It also gives parameter-level guidance (pass finalBlocks for a block template, finalContent otherwise), though it does not explicitly name alternative tools or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_draft_discardVorlagenentwurf verwerfenADestructiveInspect
Verwirft eine Entwurfsversion, solange sie noch auf ihre Freigabe wartet. Freigegebene und ersetzte Versionen bleiben unantastbar und vollstaendig erhalten. Ein erneuter Aufruf ist unschaedlich. EN: Discards a draft version while it is still waiting for its release. Released and superseded versions stay untouchable and fully preserved. Calling it again is harmless.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| versionId | Yes | Die zu verwerfende Entwurfsversion. EN: The draft version to discard. | |
| templateId | No | Optional. Bindet die Version zusaetzlich an diese Vorlage. EN: Optional. Additionally pins the version to this template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The destructiveHint annotation is already present, but the description adds meaningful behavioral detail: only drafts awaiting release are affected, released and superseded versions remain untouched, and idempotence is guaranteed ('calling it again is harmless'). This goes beyond the annotation and clarifies exactly what the destructive operation destroys and what it preserves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then covers exclusions and idempotence. The German/English duplication doubles the length, but it is consistent wording and serves a bilingual audience, so the slight redundancy is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with three parameters and no output schema, the description provides the essential call context: what is discarded, what is preserved, and that it is idempotent. The main omission is expected return or error behavior, but the described action and boundaries are sufficiently complete for an agent to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents versionId and templateId, so the description adds little parameter-level meaning beyond restating the draft-discard concept. The reasoning parameter has no description in either the schema or the tool description, creating a small gap. At 67% schema coverage, the description is adequate but does not compensate for the undocumented reasoning field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('discards') and resource ('draft version') and adds the precise condition 'while it is still waiting for its release.' It also explicitly excludes released and superseded versions, which distinguishes it clearly from sibling tools like template_release and template_archive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when the tool is applicable (draft pending release) and when it is not (released or superseded versions), plus notes that repeated calls are harmless. It does not name alternative sibling tools explicitly, but the when-not conditions provide enough routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_getVorlage abrufenARead-onlyInspect
Liefert eine einzelne Vorlage mit Betreff- und Inhaltsvorlage, den Merge-Feldern und der empfohlenen Freigabe-Voreinstellung. Eine Blockvorlage liefert zusaetzlich blocksTemplate und styleDefs, sodass du sie kopieren, anpassen und mit template_save als eigenen Entwurf speichern kannst. Genau so faengt die Gestaltungsschleife an: template_get auf einer kuratierten Standardvorlage (template_list zeigt sie mit curated: true), blocksTemplate anpassen, mit letter_preview ansehen, nachbessern, dann template_save, mit template_preview die gespeicherte Version pruefen und zuletzt template_release. Mit versionId und dem Scope template:write lässt sich auch eine bestimmte Entwurfsversion lesen. Nächster Schritt: template_apply_with_merge_fields füllt die Platzhalter mit deinen Werten. EN: Returns a single template with subject and content template, the merge fields and the recommended approval default. A block template additionally returns blocksTemplate and styleDefs, so you can copy it, modify it and store it as your own draft with template_save. That is exactly how the crafting loop starts: template_get on a curated standard template (template_list marks them with curated: true), modify blocksTemplate, look at it with letter_preview, refine, then template_save, check the stored version with template_preview and finally template_release. With versionId and the template:write scope a specific draft version can be read too. Next step: template_apply_with_merge_fields fills the placeholders with your values.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| versionId | No | Optional: eine bestimmte Version lesen, auch einen Entwurf. Braucht zusaetzlich den Scope template:write. Ohne Angabe wird die freigegebene Version gelesen. EN: Optional: read one specific version, including a draft. Additionally requires the template:write scope. If omitted, the released version is read. | |
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true already present, the description adds meaningful behavior: it explains that a block template additionally returns blocksTemplate/styleDefs, that omitting versionId reads the released version, and that reading a draft version requires the template:write scope. These are concrete behavioral details beyond the annotations and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and structured in a logical workflow, but it repeats the entire content in German and English, roughly doubling its length. The bilingual duplication is redundant for tool invocation and makes the description longer than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values, which it does: subject/content template, merge fields, approval default, and the block-template extras. It also covers versioning, auth scope, and the surrounding workflow, so an agent has enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies versionId semantics (default released version, draft requires template:write) and implies templateId refers to a single curated/standard template via template_list. However, with schema description coverage at only 33%, the required templateId parameter is not explicitly explained and the reasoning parameter is left entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns a single template with subject/content template, merge fields, and approval default, and it distinguishes itself from sibling tools by noting the extra blocksTemplate/styleDefs for block templates. This goes well beyond the tool name and title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly frames template_get as the start of the crafting loop, lists the follow-up sequence (letter_preview, template_save, template_preview, template_release), names template_list for finding curated templates, and gives the next-step alternative template_apply_with_merge_fields. It also states the versionId + template:write scope condition, which is clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_listVorlagen auflistenARead-onlyInspect
Vorlagen auflisten, Template-Liste, template list: Listet die verfügbaren Brief-Vorlagen für Anlässe wie Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost, mit Kategorie, Version und ihren Platzhaltern (Merge-Feldern). Der exakte technische Tool-Name ist template_list; falls dein Client Tools verzögert lädt, suche nach template_list. Standardmäßig nur freigegebene Vorlagen; mit statusFilter und dem Scope template:write auch offene Entwürfe. Jeder Eintrag sagt mit curated: true, ob es eine kuratierte FrankKi-Standardvorlage ist (die Bibliothek zum Kopieren), und mit hasBlocks: true, ob sie ein strukturiertes Layout mit Tabellen und Summen traegt statt Fliesstext. Naechster Schritt: template_get liefert eine Vorlage vollstaendig (bei einer Blockvorlage inklusive blocksTemplate und styleDefs zum Kopieren und Anpassen), template_apply_with_merge_fields fuellt sie mit deinen Werten. EN: List templates, template list: lists the available letter templates for occasions such as cancellation, invoice, payment reminder, quote, contract and letters to public authorities, with category, version and their placeholders (merge fields). The exact technical tool name is template_list; if your client defers tools, search for template_list. By default it returns released templates; with statusFilter and the template:write scope also open drafts. Every entry says with curated: true whether it is a curated FrankKi standard template (the library to copy from), and with hasBlocks: true whether it carries a structured layout with tables and totals instead of plain text. Next step: template_get returns one template in full (for a block template including blocksTemplate and styleDefs to copy and modify), template_apply_with_merge_fields fills it with your values.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Standard 20, maximal 100. EN: Default 20, maximum 100. | |
| offset | No | Versatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0. | |
| reasoning | No | ||
| statusFilter | No | released (Standard) zeigt alle freigegebenen Vorlagen. Eigenständige Formularvorlagen tragen sendable:false und brauchen beim Anwenden ein Anschreiben. draft zeigt nur offene Entwürfe, all beide. draft und all brauchen zusätzlich den Scope template:write. EN: released (default) shows every released template. Standalone form templates carry sendable:false and require a cover letter when applied. draft shows only open drafts, all shows both. draft and all additionally require the template:write scope. | released |
| kategorieFilter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the call as read-only and non-destructive; the description adds the default released-only behavior, the scope requirement for drafts, and the curated/hasBlocks flags on entries. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded, but the text is bloated by full bilingual repetition and an unnecessary reminder that the tool name is template_list. It remains readable but not every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by naming the fields returned per entry (category, version, placeholders, curated, hasBlocks) and by pointing to follow-up tools. It does not describe ordering or kategorieFilter usage, but the schema covers pagination parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description expands statusFilter meaningfully by linking it to the template:write scope and released/draft/all modes. With 60% schema coverage, kategorieFilter and reasoning still lack explanation, though limit and offset are already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: listing the available letter templates for defined occasions, with category, version, and placeholders. It also clearly distinguishes itself from template_get, which returns a single template in full, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: default returns only released templates, drafts require statusFilter plus the template:write scope, and the next-step note routes to template_get for full content and template_apply_with_merge_fields for filling. It does not spell out explicit when-not-to-use conditions, but the workflow guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_page_urls_appBildlinks der Vorlagen-Karte erneuernARead-onlyInspect
Nur fuer die interaktive Vorlagen-Karte: erneuert die zeitlich begrenzten Bildlinks der Vorlagenseiten, wenn die alten abgelaufen sind. EN: For the interactive template card only: renews the time-limited image links of the template pages once the old ones have expired.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | No | ||
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the readOnlyHint/destructiveHint annotations: it reveals that the image links are time-limited and that the tool refreshes them when expired. This is useful and consistent with the annotations, since renewal appears to be a non-destructive read-like operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the scope restriction, and has no filler. The German and English versions are near-duplicates, which is a minor redundancy, but it improves accessibility without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, 0% parameter coverage, and two parameters including a mysterious versionId, the description is too sparse. It does not explain what the agent should do with the result, what versionId controls, or what qualifies as the 'interactive template card'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description bears the burden of explaining the parameters. It never mentions templateId or versionId, and versionId is left completely unexplained. The word 'Vorlagenseiten' weakly implies that templateId identifies the template, but that is not enough for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('erneuert die ... Bildlinks', renews image links), the resource ('Vorlagen-Karte', template card), and the narrow scope ('Nur fuer die interaktive Vorlagen-Karte'). This makes it readily distinguishable from sibling page-URL tools like approval_page_urls_app and letter_page_urls_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use condition: use it only for the interactive template card and only when older image links have expired. It does not explicitly name alternative tools or when not to use it beyond the 'Nur fuer' scope restriction, but the condition is specific enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_previewGespeicherte Vorlage ansehenARead-onlyInspect
Rendert eine GESPEICHERTE Vorlage mit Beispielwerten und liefert Inline-PNGs, PDF-Link und designRender. designId oder ein ungespeichertes design bestimmen das Briefpapier; fuer eigenstaendige Formulare documentMode: "form" setzen. Die Vorschau bleibt kostenfrei und rein zum Ansehen. Fuer ein blocks-Layout, das erst im Entstehen ist, nimm letter_preview. Zum Persistieren einer fertigen Version template_save aufrufen. Falls das Tool clientseitig entfernt wurde, in der Tool-Suche exakt nach dem technischen Namen template_save suchen. EN: Renders a STORED template with sample values and returns inline PNGs, PDF link and designRender. designId or an unsaved design selects the stationery; set documentMode: "form" for standalone forms. The preview stays free of charge and is purely for looking at. Use letter_preview for a blocks layout that is still in the making. Call template_save to persist a finished version. If the client unloaded that tool, search for the exact technical name template_save.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | Wie viele Seiten als Bild zurueckkommen. Standard 1, Maximum 3. EN: How many pages come back as images. Default 1, maximum 3. | |
| design | No | Ungespeichertes Briefdesign nur fuer diese Vorschau. Fuer Formulare documentMode: "form" setzen. EN: Unsaved letter design for this preview only. Set documentMode: "form" for forms. | |
| designId | No | Gespeichertes Briefdesign fuer diese Vorlagenvorschau. EN: Saved letter design for this template preview. | |
| reasoning | No | ||
| versionId | No | Exakte Vorlagenversion, die geprueft werden soll. Ohne Angabe gilt die freigegebene Version, danach der neueste Entwurf. EN: Exact template version to inspect. If omitted, the released version is used, then the newest draft. | |
| templateId | Yes | Id der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get. | |
| designVersionId | No | Exakte unveränderliche Briefkopf-Version für diese Vorschau. EN: Exact immutable letterhead version for this preview. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: returned artifacts (inline PNGs, PDF link, designRender), the free-of-charge property, and the stationery-selection behavior (designId or unsaved design). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core German text is front-loaded and functional, with the primary purpose in sentence one and sibling routing in the middle. However, the full bilingual duplication doubles the length, and the closing meta-note about searching for template_save if the client unloaded it is unusual agent-environment noise that doesn't belong in a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a nested design object and no output schema, the description covers the essentials: what is rendered, what is returned, how stationery is chosen, form mode, cost, and alternative tools. The main gap is that 'designRender' is listed as an output but never explained, and there is no mention of invalid/unknown templateId handling, though the versionId fallback is documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already documents most parameters. The description adds cross-parameter relationship semantics not present in the schema: designId OR an unsaved design object determines the stationery ('designId oder ein ungespeichertes design bestimmen das Briefpapier'), and documentMode: 'form' maps to standalone forms. This goes beyond individual field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Rendert eine GESPEICHERTE Vorlage mit Beispielwerten') and names concrete outputs (Inline-PNGs, PDF-Link, designRender). It emphasizes 'stored' template and contrasts with letter_preview for in-progress block layouts, making the tool's scope unmistakable among 70+ siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes to alternatives with conditions: 'Fuer ein blocks-Layout, das erst im Entstehen ist, nimm letter_preview' and 'Zum Persistieren einer fertigen Version template_save aufrufen'. It also states the cost/inspection context ('kostenfrei und rein zum Ansehen'), so an agent knows this is the right choice for view-only previews.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_releaseVorlage freigebenAInspect
Gibt eine Entwurfsversion frei, sodass sie versendet werden kann. Das ist der letzte Schritt der Gestaltungskette (template_get, anpassen, letter_preview, template_save, template_preview, template_release). WICHTIG: template_preview zeigt dem Menschen eine Freigabekarte mit einem Freigeben-Knopf. Ist diese Karte offen, gehoert die Freigabe dem Menschen. Rufe template_release dann nur auf, wenn die Person dich ausdruecklich darum bittet, und sage in jedem Fall klar dazu, dass du selbst freigegeben hast. Das geht ueber MCP NUR, wenn dein Konto genau einen aktiven Nutzer hat. Bei mehreren Nutzern gibt ein Mensch im Dashboard frei (Vier-Augen-Prinzip) und die Antwort enthaelt den Link dorthin. Danach: template_apply_with_merge_fields fuellt die Vorlage mit Werten, letter_create_draft oder order_send verschickt das Ergebnis. EN: Releases a draft version so it can be sent. This is the last step of the crafting chain (template_get, modify, letter_preview, template_save, template_preview, template_release). IMPORTANT: template_preview shows the human an approval card with a Release button. While that card is open the release belongs to the human. Only call template_release when the person explicitly asks you to, and always say plainly that you released it yourself. Via MCP this is only possible when your account has exactly one active user. With several users a human releases it in the dashboard (four-eyes principle) and the response contains the link. After that: template_apply_with_merge_fields fills the template with values, letter_create_draft or order_send sends the result.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| versionId | Yes | Die freizugebende Entwurfsversion. EN: The draft version to release. | |
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that releasing while the template_preview approval card is open preempts human ownership, that the agent must announce that it released the template itself, that MCP execution is restricted to single-active-user accounts, and that multi-user responses include a dashboard link. These are real behavioral side effects 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is clearly structured and front-loaded with the action and the critical warning, but it repeats the same content in German and English, which roughly doubles its length. It is close to appropriately sized for a consequential action, but not maximally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description still covers preconditions, human-approval rules, account restrictions, and next steps (template_apply_with_merge_fields, letter_create_draft, order_send), which is enough for an agent to decide when and how to call it. Minor omissions like the exact success response are not needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only versionId has a schema description; templateId and reasoning are undocumented. The long description adds little beyond reinforcing that versionId is the draft version to release and never explains the purpose of the optional reasoning field, so it does not compensate for the 33% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Gibt eine Entwurfsversion frei, sodass sie versendet werden kann') and differentiates template_release from siblings by placing it as the last step of the crafting chain. It also clarifies the boundary with template_preview, so an agent can tell them apart without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use instructions: only after the human explicitly asks, and only when the account has exactly one active user; otherwise a human releases in the dashboard (four-eyes principle). It also names excluded situations (approval card open, multi-user accounts) and the follow-up tools after release.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_saveVorlage speichernAInspect
Vorlage speichern, Vorlagenversion speichern, Vorlagenentwurf anlegen, Template sichern: Verfasst eine Vorlage als ENTWURF. Setze documentKind auf letter oder form. Briefkopf und Marke bleiben eine externe Schicht und werden erst bei Vorschau oder Versand aufgeloest und bleiben ausserhalb der Vorlage. designId bleibt nur als veralteter Hinweis zur Ableitung der Dokumentart kompatibel; explizites documentKind gewinnt. Ein Formular darf eigenstaendig gespeichert werden. coverTemplateId kann eine Anschreibenversion fuer ein Paket pinnen. Laesst du templateId weg, entsteht eine neue Vorlage; mit templateId eine neue Entwurfsversion. Der Entwurf ist erst nach der Freigabe nutzbar; die Antwort enthaelt den Prueflink. Falls das Tool fehlt, suche exakt nach dem technischen Namen template_save. Der Vorlageninhalt ist entweder contentTemplate (Fliesstext) ODER blocksTemplate (strukturiert: Tabellen, Ueberschriften, Summenzeilen), genau eines von beiden. Merge-Felder sind typisiert (text, date, number, currency, rows); ein Tabellenblock bindet eine rows-Liste ueber rowsFrom. Kopiere am schnellsten eine Standardvorlage mit template_get und passe sie an. Vor dem Speichern: mit letter_preview rendern und Seite fuer Seite vergleichen. Speichere erst, wenn Seitenzahl und wesentliche Geometrie beim Nachbau zum Original passen. Eigenstaendige Formulare zuerst mit einem design im documentMode "form" pruefen. EN: Save template, save template version, create template draft: writes a template as a DRAFT. Set documentKind to letter or form. Letterhead and brand remain an external layer resolved at preview or send time and stay outside the template. designId remains only as a deprecated hint for inferring document kind; explicit documentKind wins. A form may be saved independently. coverTemplateId may pin a cover-template version for a package. Leave templateId out and a new template is created; with templateId a new draft version is created. The draft is usable only after release; the response includes the review link. If the tool is missing, search for the exact technical name template_save. The template body is either contentTemplate (plain text) OR blocksTemplate (structured: tables, headings, totals lines), exactly one of the two. Merge fields are typed (text, date, number, currency, rows); a table block binds a rows list via rowsFrom. The fastest start is copying a standard template with template_get and modifying it. Before saving: render with letter_preview and compare page by page. Save once page count and major geometry match the original. Preview standalone forms with a design using documentMode "form" first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name der Vorlage. EN: Name of the template. | |
| designId | No | Veralteter Autor-Hinweis zur Ableitung von documentKind. Das Design wird nicht in der Vorlage gespeichert. Explizites documentKind gewinnt. EN: Deprecated authoring hint used to infer documentKind. The design is not stored on the template. Explicit documentKind wins. | |
| kategorie | No | Fachliche Kategorie, z.B. kuendigung. EN: Subject category, e.g. kuendigung (termination). | |
| reasoning | No | ||
| styleDefs | No | Benannte Stile der Blockvorlage. Nur zusammen mit blocksTemplate. EN: Named styles of the block template. Only together with blocksTemplate. Benannte Stile fuer das ganze Dokument (max. 24). Bloecke referenzieren sie ueber style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide. | |
| templateId | No | Bestehende Vorlage: es entsteht eine NEUE Entwurfsversion. Ohne Angabe wird eine neue Vorlage angelegt. EN: Existing template: a NEW draft version is created. If omitted, a new template is created. | |
| clearDesign | No | Veralteter kompatibler Autor-Hinweis. Es gibt keine Design-Bindung an neuen Vorlagenversionen. EN: Deprecated compatibility authoring hint. New template versions have no design binding. | |
| mergeFields | No | Die Platzhalter der Vorlage. EN: The placeholders of the template. | |
| documentKind | No | Unveränderliche Dokumentart der Vorlagenversion. letter ist direkt adressierbar, form benötigt ein Anschreiben. EN: Immutable document kind of the template version. letter is directly addressable; form requires a cover letter. | |
| blocksTemplate | No | Strukturierte Inhaltsvorlage (Tabellen, Ueberschriften, Summenzeilen). Textfelder duerfen {{platzhalter}} enthalten; ein Tabellenblock kann mit rowsFrom: "<schluessel>" ein Merge-Feld vom Typ rows binden und bekommt dessen Zeilen beim Anwenden. Entweder contentTemplate ODER blocksTemplate. Volle Referenz: MCP-Ressource frankki://blocks-guide. EN: Structured content template (tables, headings, totals lines). Text fields may contain {{placeholders}}; a table block can bind a rows merge field via rowsFrom: "<key>" and receives its rows on apply. Either contentTemplate OR blocksTemplate. Full reference: MCP resource frankki://blocks-guide. Strukturierter Briefinhalt als typisierte Bloecke (Alternative zu content, nie beides). Limits: 200 Bloecke, 100 Zeilen/Tabelle, 20 Spalten, 2000 Zeichen/Zelle, 10 Bilder, 262144 Bytes. EN: structured letter content as typed blocks (alternative to content, never both). Jeder Block braucht type; erlaubte Typen: paragraph, heading, keyValue, checkboxRow, fillLine, table, totals, columns, box, image, spacer, pageBreak. Die vollstaendige Feldreferenz liegt in der MCP-Ressource frankki://blocks-guide. EN: every block needs type; read frankki://blocks-guide for the complete field reference. | |
| contentTemplate | No | Inhaltsvorlage als Fliesstext, darf {{platzhalter}} enthalten. Entweder contentTemplate ODER blocksTemplate. EN: Content template as plain text, may contain {{placeholders}}. Either contentTemplate OR blocksTemplate. | |
| coverTemplateId | No | Deckvorlage fuer ein Formular ohne Empfaengerblock. Beim Speichern wird exakt ihre aktuelle freigegebene Version gepinnt. EN: Cover template for a form without a recipient block. Saving pins its exact current released version. | |
| subjectTemplate | Yes | Betreffvorlage, darf {{platzhalter}} enthalten. EN: Subject template, may contain {{placeholders}}. | |
| clearCoverTemplate | No | Entfernt die geerbte Deckvorlagen-Bindung. Ohne coverTemplateId und ohne clearCoverTemplate erbt eine neue Version die bisherige Bindung. EN: Removes the inherited cover-template pin. Without coverTemplateId and clearCoverTemplate, a new version inherits the previous pin. | |
| approvalModeRecommended | No | Empfohlener Freigabemodus fuer Briefe aus dieser Vorlage. EN: Recommended approval mode for letters from this template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish that this is a write operation (readOnlyHint=false) that is non-destructive. The description adds substantial behavioral context: drafts are unusable until release, the response includes the review link, letterhead/brand stay an external layer resolved only at preview/send, coverTemplateId pins the exact released version with explicit inheritance semantics, and designId is deprecated in favor of documentKind. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well front-loaded (core action in the first sentence) and topically organized, but nearly every sentence is duplicated in German and English, roughly halving information density. The tool-discovery note ('If the tool is missing, search for the exact technical name template_save') is off-topic for invoking the tool correctly and adds noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with nested objects and no output schema, the description is unusually thorough: it covers version semantics, release gating, cover-template pinning and inheritance, content exclusivity, typed merge fields, and pre-save verification steps. The main gap is the response shape beyond the single mention of the review link, which is the agent's only handle on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 93%, so the baseline of 3 applies—the schema already documents every parameter including enums, limits, deprecation notes, and the contentTemplate OR blocksTemplate exclusivity. The description adds only marginal cross-parameter emphasis (merge-field typing and rowsFrom binding), most of which repeats what the schema's own property descriptions already state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation with specific verbs—'writes a template as a DRAFT' / 'Verfasst eine Vorlage als ENTWURF'—and the resource (a template draft/version). It differentiates itself from siblings like template_release, template_get, template_archive, and template_draft_discard, and even clarifies the two internal modes: omitted templateId creates a new template, while provided templateId creates a new draft version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit workflow context: copy a standard template with template_get, render and compare with letter_preview before saving, and preview standalone forms with a design in documentMode 'form' first. It also explains the draft-then-release sequence, but never explicitly names exclusions or an alternative tool to choose instead, so the guidance stops short of full when-not-to-use coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_status_appVorlagenstand fuer die Karte lesenARead-onlyInspect
Nur fuer die interaktive Vorlagen-Karte: liest den aktuellen Zustand einer Vorlagenversion, damit eine alte Karte den richtigen Endzustand zeigt. EN: For the interactive template card only: reads the current state of a template version so an old card renders the correct end state.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | No | ||
| templateId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read behavior is covered. The description adds useful context about rendering old cards to the correct end state, but it does not reveal substantial behavioral traits beyond that, such as caching, version resolution, or response semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but the German and English sentences say exactly the same thing, creating redundancy. One well-placed sentence would carry the same information more efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool, the description gives enough situational context and purpose. However, because there is no output schema and no parameter explanations, an agent still lacks clarity about what the returned 'state' looks like and how the optional versionId changes the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden of explaining templateId and versionId. It mentions 'template version' but does not clarify which parameter is which, that templateId is required, or how versionId affects the returned state. This is a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it 'reads the current state of a template version' (liest den aktuellen Zustand einer Vorlagenversion). It also scopes itself to the interactive template card, which distinguishes it from broader template tools like template_get and template_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'only for the interactive template card' (Nur fuer die interaktive Vorlagen-Karte), giving a clear condition for when to use it. It does not name alternative tools, but the exclusion is explicit enough to guide selection away from general template tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_balanceWallet-Guthaben abrufenARead-onlyInspect
Liefert den aktuellen Wallet-Stand: Guthaben, Tageslimit für Briefe und Kosten, den nächsten Reset-Zeitpunkt sowie das aktuelle Preismodell (Standardpreis oder Mengenstaffel). Bleibt das Guthaben unter den geplanten Versandkosten, rufe wallet_topup_link auf und gib dem Menschen den Link zum Aufladen. EN: Returns the current wallet status: balance, daily cap for letters and costs, and the next reset time. If the balance is short of the planned send, call wallet_topup_link and give the human the top-up link.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, and the description is fully consistent with them. It adds meaningful behavioral context by enumerating what information is returned and prescribing the follow-up action when the balance is insufficient, which is genuinely useful for agent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: returned fields are front-loaded, and the conditional action follows clearly. The only real inefficiency is that the English sentence largely duplicates the German sentence, adding length without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining the result, and it does so by listing the key return values: balance, daily limit, reset time, and pricing model. For a read-only tool with one optional parameter, an agent has enough information to invoke it and act on the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional 'reasoning' parameter with 0% schema description coverage, and the description does not explain it. The name is self-explanatory and the parameter is optional, so the gap is minor, but the description still adds no semantic value beyond what the schema field name implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Liefert' / 'Returns') and names the exact resource: the current wallet status, including balance, daily cap, reset time, and pricing model. It is clearly distinguishable from the sibling wallet_topup_link, which is a top-up action rather than a read-only status check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the decision rule: if the balance is below the planned sending costs, call wallet_topup_link and give the human the top-up link. This gives the agent a concrete condition for choosing the relevant alternative, going beyond a vague 'use when needed'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wallet_topup_linkWallet aufladenBRead-onlyInspect
Erstellt einen Stripe-Checkout-Link zum Aufladen deines Wallet-Guthabens. Die Kartendaten bleiben bei Stripe; das Guthaben wird nach Abschluss der Zahlung gutgeschrieben. EN: Creates a Stripe checkout link to top up your wallet balance. Card data stays with Stripe; the balance is credited once the payment completes.
| Name | Required | Description | Default |
|---|---|---|---|
| reasoning | No | ||
| amountEuros | Yes | Aufladebetrag in Euro, zwischen 10 und 500. EN: Top-up amount in euros, between 10 and 500. | |
| requestNonce | No | Optionaler stabiler Wiederholungs-Schluessel. Bei einer Wiederholung denselben Wert senden, um denselben Checkout-Link zu erhalten statt eines zweiten. EN: Optional stable retry key. On a retry send the same value to get the same checkout link instead of a second one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says the tool 'erstellt'/'creates' a Stripe checkout link, which is a side-effecting external creation, while annotations declare readOnlyHint: true. This directly contradicts the read-only contract the annotation promises. The added context about card data staying with Stripe and balance crediting after payment is useful, but the contradiction is a serious issue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action in the first sentence. The bilingual duplication is understandable but slightly redundant; otherwise each element—purpose, card data handling, and settlement timing—serves a clear function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should clarify what the tool returns, such as a checkout URL, link ID, or structured payment reference. It explains the conceptual payment flow but omits the return contract and any link-related details like expiry or downstream usage, leaving an agent with incomplete information after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-specific meaning beyond the schema. The schema already documents amountEuros and requestNonce, but the reasoning parameter is left undocumented in both the schema and the description. With schema coverage at 67%, the description should at least clarify what reasoning is for or how details like amount and nonce relate to the checkout link, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Erstellt einen Stripe-Checkout-Link zum Aufladen deines Wallet-Guthabens' / 'Creates a Stripe checkout link to top up your wallet balance.' This makes the purpose immediately clear and distinguishes it from sibling tools like wallet_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is reasonably clear: call this when a user wants to top up their wallet using a Stripe checkout link. However, there is no explicit guidance on when not to use it or which sibling tool to prefer in related scenarios, such as checking the current wallet balance instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
72 tool updates
- First observed
address_list - First observed
address_search_company - First observed
address_upsert - First observed
address_validate - First observed
analytics_summary - First observed
approval_decide - First observed
approval_decide_app - First observed
approval_list - First observed
approval_page_urls_app - First observed
approval_status_app - First observed
approval_submit - First observed
archive_export - First observed
archive_export_status - First observed
attachment_upload_image - First observed
attachment_upload_pdf - First observed
brand_import_from_website - First observed
brand_kit_get - First observed
brand_kit_save - First observed
document_create - First observed
document_get - First observed
document_list - First observed
letter_create_draft - First observed
letter_design_delete - First observed
letter_design_list - First observed
letter_design_list_presets - First observed
letter_design_preview - First observed
letter_design_save - First observed
letter_get - First observed
letter_list - First observed
letter_page_urls_app - First observed
letter_preview - First observed
letter_schedule - First observed
letter_search - First observed
letterhead_list - First observed
letterhead_upload - First observed
mandant_get - First observed
mandant_list - First observed
mandant_search - First observed
mcp_health - First observed
order_cancel - First observed
order_einlieferungsbeleg - First observed
order_fix_resubmit - First observed
order_send - First observed
order_send_batch - First observed
order_status - First observed
preset_save - First observed
pricing_tiers - First observed
profile_get - First observed
schedule_list_or_cancel - First observed
sender_profile_get - First observed
sender_profile_list - First observed
sender_profile_upsert - First observed
sender_profile_validate - First observed
setup_fix_link - First observed
setup_status_app - First observed
shipping_quote - First observed
signature_list - First observed
signature_upload - First observed
template_apply_with_merge_fields - First observed
template_archive - First observed
template_decide_app - First observed
template_diff_check - First observed
template_draft_discard - First observed
template_get - First observed
template_list - First observed
template_page_urls_app - First observed
template_preview - First observed
template_release - First observed
template_save - First observed
template_status_app - First observed
wallet_balance - First observed
wallet_topup_link
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Let AI agents prepare, review, pay for, and send real letters and postcards.
Physical mail API for AI agents. Send letters, certified mail. Sandbox + live keys via MCP.
Email for AI agents: send mail, manage contacts, automations & webhooks. Zero-DNS first send.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to prepare, price, review, pay for, and send real physical letters and postcards via a hosted MCP server.-
- FlicenseNot gradedqualityCmaintenanceAgentBureau provides the legal and physical infrastructure for AI agents to operate within the German jurisdiction. We bridge the gap between digital intelligence and real-world action by providing "Embodiment-as-a-Service." Through our API, agents can perform legally binding actions—like sending faxes, mailing physical letters, issuing invoices, forming entire companies (GmbH/UG), ...1-
- AlicenseAqualityCmaintenanceEnables AI agents to send physical letters and postcards to over 200 countries using Solana cryptocurrency for payment. It provides tools for generating mail quotes, managing wallet balances, and automating physical correspondence directly through the Model Context Protocol.4751MIT
- AlicenseAqualityCmaintenanceOfficial mailbox.bot MCP server for AI agents. Send letters, certified mail, postcards, and receive scanned inbound physical mail with sandbox keys, approval controls, tracking, and webhooks.291142MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
The surface contains multiple clusters whose boundaries are unclear: letterhead_list/letter_design_list/brand_kit_get/profile_get all expose similar letterhead/brand data, and letter_preview/template_preview/letter_design_preview are easy to confuse. The many *_app variants (approval_decide_app, template_decide_app, status/page-url helpers) further duplicate core actions. Rich descriptions help, but with 72 tools an agent will frequently pick the wrong member of a cluster.
Most tools follow a readable snake_case resource_action pattern (address_upsert, approval_list, letter_schedule, wallet_balance). However, there are notable exceptions like analytics_summary, mcp_health, pricing_tiers, shipping_quote and order_einlieferungsbeleg, plus German/English mixing and semantically competing prefixes (letterhead_ vs letter_design_ vs brand_kit_). The style is not chaotic, but it is not uniformly consistent.
With 72 tools this is an extreme mismatch for an MCP surface. The count is inflated by app-card-only helpers, separate preview variants and overlapping design/letterhead/brand tools that could be consolidated. Even a complex domain like postal letters does not justify this many top-level entry points.
The core domain is very well covered: addresses, letters, documents, templates, approvals, sender profiles, wallet, scheduling, archive exports and analytics all have lifecycle operations. The main gaps are minor workarounds rather than dead ends: no delete for addresses or documents, no attachment listing/deletion, and letter corrections are handled by creating a new draft.