Skip to main content
Glama

Server Details

The agentic layer of letters. Agents send real printed mail worldwide, German compliance built in.

Ownership verified
Status
Healthy
Uptime
88.9% over 71 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
datPascal/frankki-mcp
GitHub Stars
1
Server Listing
FrankKi MCP

TDQS

B3.3/5.0

Scored across 72 tools

Disambiguation2/5

Several overlapping families make tool selection risky: letter_create_draft, letter_preview, order_send, approval_submit and order_send_batch all accept inline content/blocks and blur draft/preview/send boundaries; document_create competes with letter_create_draft; letter_design_*, letterhead_*, brand_* and template_* all touch design. The long descriptions try to disambiguate, but the agent must track many subtle preconditions and app-only duplicates.

Naming Consistency4/5

Most names follow a predictable prefix_action snake_case pattern (address_list, approval_decide, template_save, wallet_balance). Minor deviations exist: order_einlieferungsbeleg is a German noun rather than verb_noun, and the _app suffix creates a parallel naming layer, while letterhead_* and letter_design_* are two names for related design concepts.

Tool Count1/5

72 tools is an extreme mismatch for a letter-mailing service; many are app-internal helpers (approval_page_urls_app, template_page_urls_app, setup_status_app) that duplicate agent-facing tools or serve only interactive cards. The surface is far heavier than an agent can navigate reliably.

Completeness4/5

The domain is broadly covered: addresses, sender profiles, letters, documents, templates, approvals, wallet, exports, scheduling and analytics all have lifecycle operations. Minor gaps remain, such as no address delete/update and no document update/delete, but agents can work around these by recreating drafts.

Available Tools

72 tools
address_listAdressen auflistenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNo
reasoningNo
searchQueryNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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

The description uses the specific verb 'Listet' (lists) 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.

Usage Guidelines3/5

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 suchenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
queryYes
countryNo
reasoningNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
zipNo
cityYes
nameYes
poboxNo
streetYes
companyNo
countryNoISO-3166-alpha-2, default DE. EN: ISO 3166-1 alpha-2, defaults to DE.
addressIdNo
isDefaultNo
addressTypeNo
houseNumberNo
mandantennummerNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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üfenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
zipNo
cityYes
nameYes
poboxNo
streetYes
companyNo
countryNoISO-3166-alpha-2, default DE. EN: ISO 3166-1 alpha-2, defaults to DE.
isDefaultNo
reasoningNo
addressTypeNo
houseNumberNo
mandantennummerNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description states a specific verb and resource ('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.

Usage Guidelines5/5

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 abrufenA
Read-only
Inspect

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. Beträge 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.

NameRequiredDescriptionDefault
topNNoAnzahl Mandanten in cost_per_mandant, 1 bis 50, Standard 10. EN: Number of mandants in cost_per_mandant, 1 to 50, default 10.
sinceNoZeitraumbeginn für 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.
untilNoZeitraumende, Standard jetzt. EN: Range end, default now.
metricNoWelche Auswertung. overview (Standard) fasst die letzten drei Monate zusammen. EN: Which report. overview (default) summarises the last three months.
monthsNoTrendlänge für 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.
reasoningNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the semantic unit ('Beträge sind Netto-Kosten in Cent'), which prevents misreading the numbers, but says nothing about caching, freshness, or result size for a metrics endpoint.

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

Conciseness4/5

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

The bilingual DE/EN pairing is duplicated but that is inherent to the tool's convention, and each sentence front-loads the metric list followed by the unit caveat. No filler beyond the required translation.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return content, and it does so by naming every metric family plus the amount unit. It is nearly complete for a read-only reporting tool, missing only result shape/detail per metric.

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

Parameters3/5

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

Schema description coverage is high (83%), so the schema already documents topN, since, until, metric and months bounds and defaults. The description only mentions that cost_per_mandant and delivery_times are time-scoped, which the schema also states, so it adds little beyond the baseline.

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

Purpose5/5

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

States a specific verb+resource ('Liefert die aggregierten Kennzahlen des Partnerkontos') and enumerates the exact metric families returned. This clearly separates it from siblings like wallet_balance or pricing_tiers, which report different data.

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

Usage Guidelines3/5

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

The enumeration of metrics implies when the tool is relevant (reporting/rebilling overview), but it never states when to prefer it over alternatives or what prerequisite state is needed. Usage is inferred rather than directed.

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

approval_decideFreigabe entscheidenA
Destructive
Inspect

Gibt eine wartende Freigabe frei oder lehnt sie ab. 'approve' ist nur erlaubt, wenn dieser OAuth-Verbindung die zusätzliche Berechtigung approval:self_approve ausdrücklich erteilt wurde. Fehlt diese Berechtigung, öffnet der Mensch den zurückgegebenen approvalUrl und entscheidet im angemeldeten Portal. approval:decide bleibt ebenfalls erforderlich. Bei Freigabe durch den Agenten geht der Brief nach 10 Minuten raus und kann bis dahin mit order_cancel gestoppt werden. EN: Approves or rejects a pending approval. 'approve' is allowed only when this OAuth connection was explicitly granted the additional approval:self_approve scope. When that scope is absent, the human opens the returned approvalUrl and decides in the signed-in portal. approval:decide is also required. An agent approval dispatches after 10 minutes and can be stopped with order_cancel until then.

NameRequiredDescriptionDefault
commentNo
decisionYes
reasoningNo
approvalIdYes
clientOrderIdNo

TDQS

A4/5.0
Behavior5/5

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

Annotations only flag destructiveHint/readOnlyHint; the description adds substantial behavioral context beyond that: dual OAuth scope requirements, a human-in-the-loop fallback path via approvalUrl, a 10-minute dispatch delay after agent approval, and the cancellability window via order_cancel. These are exactly the operational traits an agent needs before committing a destructive action.

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

Conciseness3/5

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

Content is front-loaded and dense, but the entire text is duplicated in German and English, roughly doubling length for the same information. The scope rule, the human fallback, and the cancellation window are all useful, but the bilingual mirroring is pure redundancy.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the essentials: permission prerequisites, the human fallback, post-approval timing, and reversibility. Minor gaps remain around the undocumented comment/reasoning params and no contrast with the _app sibling.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It clarifies the decision enum semantics ('approve' vs 'reject') and references the returned approvalUrl, but says nothing about comment, reasoning, approvalId, or clientOrderId, leaving three of five parameters undocumented anywhere.

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

Purpose4/5

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

States a clear verb-resource pair ('Gibt eine wartende Freigabe frei oder lehnt sie ab' / approves or rejects a pending approval) with the decision alternatives spelled out. However, it never differentiates itself from the sibling approval_decide_app, which appears to be a near-namesake, leaving an agent to infer the distinction.

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

Usage Guidelines4/5

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

Gives explicit conditional guidance: 'approve' is only permitted when the OAuth connection carries approval:self_approve, otherwise the human must open the returned approvalUrl, and approval:decide is also required. It also names order_cancel as the follow-up escape hatch within 10 minutes. It stops short of stating when to prefer this tool over approval_decide_app.

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

approval_decide_appFreigabe mit AgentenberechtigungAInspect

App-internes Entscheidungs-Tool. Ein Aufruf darf freigeben, wenn die verifizierte OAuth-Verbindung approval:self_approve ausdrücklich trägt. Kartenansicht und cardNonce dienen nur als Vorschau-Beleg. Bei fehlender Berechtigung führt die Freigabe-Karte zum angemeldeten Browser. EN: Internal app decision tool. A call may approve when the verified OAuth connection explicitly carries approval:self_approve. The card view and cardNonce serve only as preview evidence. When permission is absent, the approval card leads to the signed-in browser.

NameRequiredDescriptionDefault
decisionYes
cardNonceNo
reasoningNo
approvalIdYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the description carries extra burden. It adds crucial behavioral context beyond annotations: the permission requirement (approval:self_approve), that card view and cardNonce are only preview evidence, and that missing permission routes to the browser. It still omits what happens to the approval record on approve vs reject and whether the effect is reversible.

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

Conciseness2/5

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

The description is duplicated in German and English, roughly doubling its length with no added information. Most sentences earn their place, but the bilingual repetition wastes tokens and is not front-loaded; the key permission condition is buried after the generic opening.

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

Completeness3/5

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

For a mutation tool with no output schema and 0% schema coverage, the description covers the critical gating condition and fallback, but leaves the semantics of decision, reasoning, and approvalId unexplained, and does not describe the return behavior of a successful call. It is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains cardNonce only as 'preview evidence', which is useful, but adds no meaning for approvalId, decision, or reasoning beyond what the schema types/enums already imply. Baseline is 3 for low coverage; the cardNonce hint is a small addition but the other three parameters remain undescribed.

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

Purpose4/5

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

The description states a specific verb and resource: 'App-internes Entscheidungs-Tool' / 'Internal app decision tool' that approves or rejects based on an OAuth permission. This is clearly distinguished from siblings like approval_decide and template_decide_app by the 'app-internal' scope and the OAuth requirement. However, it never explicitly names the artifact being decided on (approval) or the possible decisions, relying on the schema for that.

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

Usage Guidelines4/5

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

It gives a clear condition for when a call 'may approve': when the verified OAuth connection carries approval:self_approve. It also explains fallback behavior when permission is absent (the card leads to the signed-in browser). It does not explicitly contrast this with approval_decide or template_decide_app, but the app-internal framing and permission gating imply the separation.

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

approval_listFreigaben auflistenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoStandard 20, maximal 100. EN: Default 20, maximum 100.
sinceNoNur Freigaben, die seit diesem Zeitpunkt eingereicht wurden (ISO 8601). EN: Only approvals submitted since this time (ISO 8601).
offsetNoVersatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0.
statusNoStandard pending. EN: Default pending.
reasoningNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines4/5

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 erneuernA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
approvalIdYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 für die Karte lesenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
approvalIdYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the caller-side rationale (rendering end state and countdown on a stale card) but no auth, rate-limit, or idempotency details beyond that.

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

Conciseness4/5

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

Short and front-loaded with the scoping restriction before the explanation. The bilingual DE/EN duplication is mildly redundant but does not obscure the message.

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

Completeness4/5

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

For a single-parameter read tool with annotations covering safety and no output schema, the description is sufficient to call it correctly. It could note the expected return shape, but the absence of an output schema lowers that obligation.

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

Parameters2/5

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

Schema description coverage is 0% and the description never mentions approvalId or its UUID form. With only one required parameter and no compensating text, the description adds no meaning beyond the schema's type declaration.

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

Purpose4/5

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

States a specific verb and resource (reads the current state of an approval) and scopes it ('for the interactive approval card only'). This implicitly separates it from approval_list and approval_decide, though no sibling is named explicitly.

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

Usage Guidelines4/5

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

The phrase 'For the interactive approval card only' gives a clear when-to-use constraint and warns against general use, which is strong context. It does not, however, name alternatives such as approval_list or approval_decide for other workflows.

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: 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. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Mit approval:self_approve zeigt die Karte Freigeben und Ablehnen. In allen anderen Fällen führt sie ins angemeldete Portal. Mit dryRun bleiben Guthaben und Warteschlange unberührt. EN: Submits a letter for human approval: checks mandatory details, recipient, data processing agreement and limits, creates the final PDF, calculates the price, reserves the cost and adds an approval to the queue. The embedded card is the preview and approval. Once it appears, a short chat confirmation is enough; PDF links and letter text belong in text-only views. With approval:self_approve, the card shows Approve and Reject. In every other case it opens the signed-in portal. With dryRun, the balance and queue remain untouched.

NameRequiredDescriptionDefault
colorNoOhne Angabe wird die Farbe automatisch erkannt. EN: If omitted, colour is detected automatically.
dryRunNo
reasonNoKurzer Grund für die Freigabe, den die prüfende Person auf der Karte liest. EN: Short reason for the approval, shown to the reviewer on the card.
contentNo
expressNo
subjectNo
auditTagNo
letterIdNoBestehender Entwurf. Alternativ den Brief inline angeben. EN: Existing draft. Alternatively provide the letter inline.
reasoningNo
presetNameNo
templateIdNo
scheduledAtNo
signatureIdNo
approvalModeNo
deliveryTypeNoStandard standard. EN: Defaults to standard.
maxCostEurosNoMaximalbetrag in Euro. Liegt der Preis darüber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted.
recipientZipNo
clientOrderIdNoIdempotenzschlüssel. Ein erneuter Aufruf mit demselben Wert liefert dieselbe Freigabe, statt ein zweites Mal einzureichen. Der Präfix '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.
recipientCityNo
recipientNameNo
mandantennummerNo
recipientStreetNo
senderAddressIdNo
senderProfileIdNo
includeSignatureNo
recipientCompanyNo
recipientCountryNoISO-3166-alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE.
requesterContextNoZusatzkontext zur einreichenden Person oder zum Anlass. EN: Additional context about the submitter or the occasion.
recipientHouseNumberNo

TDQS

A4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds substantial behavioral context beyond them: it validates mandatory details, creates a final PDF, calculates price, reserves cost, inserts into the approval queue, and explains that dryRun leaves balance and queue untouched. It also clarifies card/portal behavior after submission.

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

Conciseness3/5

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

The purpose is front-loaded and the workflow is logically ordered, but the full German and English duplication doubles the length without adding new information. The description is not bloated for a complex tool, yet it could be tighter by avoiding duplicate text and grouping related parameter behavior.

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

Completeness3/5

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

For a 29-parameter tool with low schema description coverage and no output schema, the description covers the workflow and side effects well but leaves significant gaps around parameter roles and return/result expectations. It is minimum viable but not fully complete for an agent to invoke confidently with all optional parameters.

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

Parameters2/5

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

With 29 parameters and only 28% schema description coverage, the description must compensate but does not. It mentions high-level concepts like Pflichtangaben, Empfänger, AVV, Limits, and dryRun, but leaves most parameters (content, recipient fields, templateId, scheduledAt, etc.) unexplained. It also references approval:self_approve, which is not present in the approvalMode enum, adding ambiguity.

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

Purpose5/5

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

States a specific verb and resource ('submits a letter') and the exact workflow goal ('for human approval'), then enumerates validation, PDF creation, pricing, cost reservation, and queue insertion. This clearly distinguishes it from approval_decide, approval_list, and letter_create_draft by making it the submission step.

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

Usage Guidelines4/5

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

The description gives clear context for use: submitting a letter for human approval, with conditional behavior for approval:self_approve and dryRun. It does not explicitly name alternatives like approval_decide or letter_create_draft, so exclusions are absent, but the intended invocation context is clear.

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

archive_exportArchiv exportierenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
sinceYes
untilYes
formatYes
targetNo
reasoningNo
notifyEmailNo
senderProfileFilterNo
mandantennummerFilterNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 abrufenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
jobIdYes
reasoningNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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

The description opens with a specific verb ('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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
titleNo
imageUrlNoÖffentliche URL des Bildes (Alternative zu imageBase64). EN: Public URL of the image (alternative to imageBase64).
letterIdYes
positionNo
rotationNoZusä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.
reasoningNo
imageBase64NoBild als Base64 (Alternative zu imageUrl). EN: Image as Base64 (alternative to imageUrl).

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description opens with a specific verb ('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.

Usage Guidelines4/5

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

NameRequiredDescriptionDefault
titleNo
pdfUrlNoÖffentliche URL des PDF (Alternative zu pdfBase64). EN: Public URL of the PDF (alternative to pdfBase64).
letterIdYes
positionNo
pdfBase64NoPDF als Base64 (Alternative zu pdfUrl). EN: PDF as Base64 (alternative to pdfUrl).
reasoningNo

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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

The description states a specific verb and resource: '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.

Usage Guidelines4/5

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 übernehmenAInspect

Liest eine öffentliche Firmenwebsite aus und schlägt 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; übernommen wird die Marke erst durch einen anschließenden 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.

NameRequiredDescriptionDefault
reasoningNoKurze Begründung für das Audit-Protokoll. EN: Short rationale for the audit log.
websiteUrlYesÖffentliche Adresse der Firmenwebsite, zum Beispiel https://beispiel.de. EN: Public company website address.
maxLogoCandidatesNoWie viele Logo-Kandidaten heruntergeladen und gespeichert werden. Standard 3. EN: How many logo candidates get downloaded and stored. Default 3.

TDQS

A4.1/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing the write side effect that found logos are persisted as design assets in the account, and by clarifying that no brand is actually adopted until a separate brand_kit_save call with brandingOwnershipConfirmed. This explains the non-read-only annotation and sets expectations that the result is a reviewable proposal rather than a committed change. It does not quantify cost, rate limits, or what happens to existing brand data.

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

Conciseness3/5

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

The content is front-loaded and the proposal-then-save sequence is stated early. However, the entire description is duplicated verbatim in German and English, roughly doubling the length without adding information, which conflicts with the requirement that every sentence earn its place.

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

Completeness5/5

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

There is no output schema, so the description must carry the return-value burden, and it does: it enumerates exactly what the proposal contains (colours, typeface mapping, logo candidates, imprint data) and where the logos are stored. A three-parameter tool with full schema coverage is adequately covered by this.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents websiteUrl, reasoning, and maxLogoCandidates with constraints. The description adds no per-parameter semantics (e.g. how the logo count affects cost or quality), so the baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Liest eine öffentliche Firmenwebsite aus und schlägt daraus ein Briefkopf-Design vor') and enumerates the concrete outputs (brand colours, mapped typeface, logo candidates, imprint data). It is clearly distinguishable from siblings like brand_kit_get and brand_kit_save, which it explicitly names as the adoption step.

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

Usage Guidelines4/5

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

Explicitly frames the workflow: this tool only produces a proposal ('Das Ergebnis ist ein Vorschlag zur Abstimmung mit der Kundin oder dem Kunden'), and adoption requires a follow-up brand_kit_save carrying brandingOwnershipConfirmed. It routes the agent well, but does not state when not to use it (e.g. when a brand kit already exists and brand_kit_get should be used instead).

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 abrufenB
Read-only
Inspect

Liest die gespeicherten Markenwerte für das nutzerseitige Ergebnis Briefkopf & Marke. Liefert Logo-Referenzen, Farben und Schrift für 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.

NameRequiredDescriptionDefault
reasoningNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the return payload (logo references, colours, font), which is genuinely useful, but says nothing about permissions, absence behaviour when no kit exists, or format specifics.

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

Conciseness2/5

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

The text is essentially duplicated across German and English, doubling length without adding information, and it contains a filler keyword-hack sentence ('Suche technisch nach brand_kit_get') that carries no meaning for an agent. The useful content (read brand values, returns logo/colours/font, feeds design tools) could be stated in one sentence.

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

Completeness3/5

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

For a read-only getter with annotations and no output schema, the description does cover the expected return content, which is the main thing an agent needs. It is nonetheless thin on scoping (whose brand kit, per user/workspace) and on the purpose of its one parameter.

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

Parameters3/5

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

Schema description coverage is 0% and the single 'reasoning' parameter is undocumented in both the schema and the description, so the description fails to compensate for the gap. With only one optional parameter and no enums the cost is limited, but the 'reasoning' field is left entirely unexplained.

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

Purpose4/5

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

The description states a specific verb and resource ('Liest die gespeicherten Markenwerte' / reads the saved brand values) and enumerates what comes back (logo references, colours, font). It is distinguishable from brand_kit_save and brand_import_from_website by being the read side, though it does not explicitly name them as the write/import counterparts.

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

Usage Guidelines3/5

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

It points the agent downstream ('für die weitere Gestaltung mit letter_design_preview und letter_design_save'), which implies when this tool belongs in a workflow. However it gives no when-not guidance and does not contrast with the obvious alternatives (brand_kit_save, letterhead_list, sender_profile_get), leaving the choice largely to inference.

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 speichernAInspect

Speichert Logo-Referenzen, Farben und Schrift für das nutzerseitige Ergebnis Briefkopf & Marke. brandingOwnershipConfirmed muss true sein und bestätigt die Nutzungsrechte an den angegebenen Marken-Assets. Die Antwort enthält den gespeicherten Stand und den Prüflink. 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.

NameRequiredDescriptionDefault
brandKitYes
reasoningNo
brandingOwnershipConfirmedYesBestätigt die Nutzungsrechte an Logo und eigener Schrift. Muss true sein. EN: Confirms usage rights for the logo and custom font. Must be true.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the write/safety profile is covered. The description adds genuinely new context: the ownership-confirmation gate for usage rights and the fact that the response returns saved state plus a review link.

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

Conciseness3/5

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

The action is front-loaded and the ownership prerequisite is well placed, but the full German text is duplicated verbatim in English, doubling length for no added information, and the meta-instruction "Suche technisch nach brand_kit_save" consumes space without helping invocation.

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

Completeness4/5

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

With no output schema, the description correctly states what the response contains (saved state and review link), and it covers the key prerequisite and the nested brandKit fields. Reasonably complete for a save tool, with only the reasoning parameter left unaddressed.

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

Parameters3/5

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

Schema description coverage is only 33%, with just brandingOwnershipConfirmed documented in the schema. The description partially compensates by explaining that parameter's semantics and by naming the brandKit contents (logo, colours, font), but it never mentions the "reasoning" parameter, leaving a gap for a low-coverage schema.

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

Purpose4/5

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

The description leads with a specific verb ("Speichert"/"Saves") and enumerates the resource (logo references, colours, font) plus its scope (the user-facing letterhead & brand result). It is clearly distinguishable from brand_kit_get and brand_import_from_website, though it does not explicitly name those siblings.

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

Usage Guidelines3/5

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

Implied usage only – the agent can infer this is the write counterpart to brand_kit_get, but no when-to-use vs. when-not or alternative is stated. It does disclose one real prerequisite (brandingOwnershipConfirmed must be true), which is the most useful usage signal present.

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.

NameRequiredDescriptionDefault
subjectNoBetreff 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.
designIdNo
documentYesDie Belegdaten. Alle Beträge 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.
languageNoStandard de. EN: defaults to de.
reasoningNo
referenceNo
signatureIdNo
sequenceScopeNo
clientLetterIdNoIdempotenzschlüssel für den Briefentwurf. EN: idempotency key for the letter draft.
mandantennummerNoMandant, dem das Dokument zugeordnet wird. Nur Zuordnung für Liste und Auswertung. EN: client this document is filed under. Filing only.
senderAddressIdNo
senderProfileIdNoAbsenderprofil, 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.
includeSignatureNo
recipientAddressIdNoEmpfänger aus deinem Adressbuch (address_list / mandant_search liefern die id). Entweder das oder recipientAddressInline. EN: recipient from your address book. Either this or recipientAddressInline.
recipientAddressInlineNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare write/non-destructive/closed-world. The description adds real behavior beyond them: FrankKi re-computes and rejects mismatching sums, the draft carries no cost until sent, the layout is DIN 5008 with the user's letter design, and mandatory § 14 UStG details are validated. It still says nothing about permissions or quota/rate limits on document creation.

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

Conciseness3/5

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

The core sentence is front-loaded and efficient, but the entire description is duplicated in German and English, including the identical JSON example twice, which roughly doubles length without adding information. The bilingual duplication costs more than the marginal accessibility benefit at this length.

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

Completeness4/5

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

With no output schema, the description compensates by naming the returned letterId and the three tools that consume it, and by explaining the document payload semantics and the recompute-and-reject rule. Given 15 parameters and deep nesting, more could be said about the unillustrated top-level fields, but an agent has enough to call it correctly in the common case.

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

Parameters3/5

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

Schema coverage is 47%, below the bar where the schema alone suffices. The embedded worked example meaningfully illustrates the nested 'document' payload (documentType, documentNumber, leistungszeitraum, zahlungszielTage, lineItems, totals) plus recipientAddressId, but roughly half the top-level parameters (designId, signatureId, senderProfileId, reference, sequenceScope, clientLetterId, mandantennummer, language) get no mention at all.

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

Purpose5/5

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

The description names a specific verb and resource ('Erzeugt aus strukturierten Belegdaten ein fertiges Dokument und legt es als Briefentwurf an') and enumerates the distinctive pipeline: recompute line items/net/VAT/gross, § 14 UStG mandatory-detail check, optional number draw, DIN 5008 typesetting with the letter design. That makes it separable from the plain-letter sibling letter_create_draft without opening either schema.

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

Usage Guidelines3/5

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

It gives clear downstream routing — order_send sends, approval_submit routes to a human, letter_schedule defers — and notes the draft is free until sent, which is useful context. But it never states when to choose this tool over letter_create_draft or what prerequisites (e.g. sender profile, address book entry) must exist first. Usage is implied rather than explicit.

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

document_getBeleg abrufenA
Read-only
Inspect

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 heißt später erneut versuchen (Versand oder Freischaltung stehen noch aus), DOCUMENT_EXPORT_NOT_SUPPORTED heißt 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.

NameRequiredDescriptionDefault
reasoningNo
documentIdYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly, non-destructive, closed-world), so the description adds substantial behavioral context: signed export links (ZUGFeRD PDF/A-3, XRechnung XML), that transmission to a portal is the caller's job, and the meaning of DOCUMENT_EXPORT_NOT_READY (retry) vs DOCUMENT_EXPORT_NOT_SUPPORTED (permanent, with the workaround).

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

Conciseness3/5

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

Content is front-loaded and every section is informative, but the entire text is duplicated verbatim in German and English, roughly doubling length without adding meaning. For a single-ID fetch tool this is heavier than necessary.

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

Completeness4/5

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

With no output schema, the description does the work of explaining the return shape, export URLs, error semantics, and follow-up tools, which is thorough. The remaining gap is that neither input parameter is described anywhere.

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

Parameters2/5

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

Schema description coverage is 0% and the description says nothing about documentId (format, source, how to obtain it) or the reasoning field. It explains return payload fields, which are not parameters, so it fails to compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource ('Liefert ein Dokument mit allen Belegdaten') and enumerates exactly what is returned: Positionen, Summen, USt-Sätze, Bezug, letterId, orderId. An agent can immediately distinguish this single-document fetch from the sibling document_list.

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

Usage Guidelines4/5

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

Gives concrete downstream routing: paste referencePrefill unchanged into document_create for Mahnung/Zahlungserinnerung/Gutschrift, and points to order_status for tracking the send. It never explicitly contrasts document_get with document_list, but the usage context is clear.

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

document_listBelege auflistenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoStandard 20, maximal 100. EN: default 20, maximum 100.
sinceNo
offsetNoVersatz für die Seitennavigation. Standard 0. EN: offset for pagination. Default 0.
reasoningNo
documentTypeNo
recipientQueryNoFreitext über Name, Firma oder Ort des Empfängers. EN: free text over the recipient name, company or city.
mandantennummerNo
referencesNumberNo
referencesDocumentIdNoNur 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 (Fließtext) ODER blocks (strukturiert: Tabellen, Überschriften, 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. Die eingebettete Karte ist die Vorschau für den Menschen. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. 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. Bei einer Mahnung, Kündigung, Mieterhöhung oder einem anderen Brief mit Frist frag, ob der Mensch ein Einschreiben möchte, und nenne dessen Preis aus shipping_quote. Rechtliche Fragen beantwortet eine Anwältin oder ein Anwalt; du nennst Versandarten und Preise. 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. The embedded card is the human preview. Once it appears, a short chat confirmation is enough; PDF links and letter text belong in text-only views. 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. For a Mahnung, Kündigung, Mieterhöhung or other deadline letter, ask whether the person wants Einschreiben and state its price from shipping_quote. Leave legal advice to a lawyer; you name the delivery options and prices. 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.

NameRequiredDescriptionDefault
blocksNoStrukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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.
contentNoBrieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both.
subjectYes
designIdNoEin gespeichertes Briefdesign für diesen Brief verwenden. Es wird bereits in der Vorschau-PDF gerendert und am Entwurf gespeichert, sodass ein späterer Versand über die letterId es übernimmt (außer 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.
languageNoStandard de. EN: Defaults to de.
reasoningNo
referenceNoWerte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode.
styleDefsNoBenannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide.
presetNameNo
signatureIdNoEine bestimmte gespeicherte Unterschrift verwenden statt der zuerst hinterlegten. EN: Use a specific stored signature instead of the first one on file.
clientLetterIdNoIdempotenzschlüssel. Ein erneuter Aufruf mit demselben Wert UND derselben Nutzlast liefert denselben Entwurf, statt einen zweiten anzulegen. Für einen anderen Brief brauchst du einen neuen Schlüssel: derselbe Schlüssel mit anderem Inhalt wird mit IDEMPOTENCY_CONFLICT abgelehnt, damit du keinen Brief für angelegt hältst, 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.
senderAddressIdNo
senderProfileIdNoAbsenderprofil, mit dem später versendet wird. Für die Vorschau zählt 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.
includeSignatureNoHinterlegte 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.
recipientAddressInlineNo

TDQS

A4.7/5.0
Behavior5/5

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

Despite annotations marking this non-destructive, the description adds real operational context: the draft is free until sent, preview link expires in 24h, defects can be re-drafted only while draft (printed = final), first pages return as images to inspect (subject, address window, line breaks), findings appear in warnings, and idempotency behavior is detailed. This far exceeds what the annotations convey.

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

Conciseness3/5

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

Front-loaded with purpose and outputs, which is good, but the description is long and the German/EN duplication nearly doubles its length. The blocks example is useful but the overall size is bloated for an already-rich schema.

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

Completeness5/5

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

For a 15-param mutation tool with no output schema, the description covers outputs (page count, preview link, cost estimate, warnings), workflow, exclusivity of body inputs, and escalation rules. An agent has enough to call this correctly and handle the result.

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

Parameters4/5

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

Schema coverage is 67%, so the description must compensate for undocumented params. It fills the key gap: the content-vs-blocks mutual exclusivity with a worked blocks example and a pointer to the frankki://blocks-guide resource for styleDefs and limits. It doesn't cover senderAddressId, presetName, or reasoning, leaving some gaps.

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

Purpose5/5

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

The description names a specific verb and resource (creates a letter draft) and enumerates its concrete effects: produces a preview PDF in the stored design, stores the draft, and returns page count, a 24h preview link, and a cost estimate. It is clearly distinguished from siblings like letter_preview, order_send, and letter_schedule.

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

Usage Guidelines5/5

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

Explicit guidance: use content XOR blocks, never both; next steps with letterId route to letter_preview, order_send, or letter_schedule; for deadline letters ask about Einschreiben and cite shipping_quote pricing; leave legal questions to a lawyer. Alternatives and conditions are named, not implied.

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öschenB
Destructive
Inspect

Archiviert (löscht) ein gespeichertes Briefpapier (Briefdesign). Neue Sendungen laufen danach über die verbleibenden Briefpapiere, egal ob Kündigung, Rechnung, Mahnung, Angebot, Vertrag oder Behördenpost; 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.

NameRequiredDescriptionDefault
designIdYesDas zu löschende Briefdesign. EN: The letter design to delete.
reasoningNo

TDQS

B3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnly=false, so the safety profile is known; the description adds genuinely new context: it is an archive-style removal, new sends fall back to remaining letterheads, and already-sent letters retain their original for auditability. It does not mention permissions or error behavior, but the reversibility/audit semantics are a real addition 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.

Conciseness2/5

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

The description is padded with an irrelevant enumeration of letter types (Kündigung, Rechnung, Mahnung, Angebot, Vertrag, Behördenpost) and duplicates the entire content in German and English. The core behavior — archive/delete with fallback to remaining letterheads — is buried rather than front-loaded.

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

Completeness3/5

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

With no output schema, the description must carry the full load, and it does explain the post-deletion state and auditability well. However, it omits prerequisites, whether/how the design can be restored, and any mention of the second parameter, leaving meaningful gaps for a destructive tool.

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

Parameters2/5

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

Schema coverage is only 50%: designId is well described (DE+EN) in the schema, but the second parameter, 'reasoning', has no description anywhere and the tool description never mentions it. For a destructive operation where a reasoning/audit field likely matters, the description fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb and resource — archives/deletes a saved letterhead (Briefdesign) — which is clearly distinguishable from siblings like letter_design_save and letter_design_list. The parenthetical 'archiviert (löscht)' introduces mild ambiguity about whether this is a hard or soft delete, but overall the operation is identifiable.

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not guidance, and no alternatives are named. The agent can infer that this removes a letterhead, but nothing directs it to letter_design_list/letter_design_preview first or explains prerequisites for deletion.

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

letter_design_listBriefdesigns auflistenA
Read-only
Inspect

Listet die gespeicherten Briefpapiere (Briefdesigns) des Partners samt vollständigem Design-JSON. Ein Design wird per Name oder ID beim Versand referenziert und trägt jede Post: Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost. 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.

NameRequiredDescriptionDefault
reasoningNo
includeArchivedNoAuch archivierte (gelöschte) Designs einschließen. Standard false. EN: Include archived (deleted) designs too. Defaults to false.

TDQS

A3.7/5.0
Behavior3/5

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 covered. The description adds that full design JSON is returned and that designs can be archived, but it does not state pagination, response size, or how 'partner' scoping works, leaving a few behavioral gaps.

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

Conciseness4/5

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

Two concise sentences (DE then EN mirror) are front-loaded with the core action and add the key context that a design is referenced by name or id when sending. The bilingual duplication adds length but not obscurity; still slightly more verbose than strictly necessary.

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

Completeness4/5

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

With annotations covering safety, no output schema needed, and only two params (one documented in schema), the description provides enough context for an agent to call the tool: it describes the returned payload (full design JSON) and the business role of the resource. Missing only explicit guidance on the reasoning parameter and archived exclusion default, which is partially in schema.

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

Parameters3/5

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

Schema coverage is 50%; includeArchived is fully documented in the schema, but the 'reasoning' parameter is undocumented anywhere. The description does not compensate by explaining includeArchived semantics beyond what the schema says, nor does it explain what 'reasoning' should contain. Baseline 3 for partial coverage.

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

Purpose5/5

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

States a clear verb (lists), resource (letterheads/Briefdesigns), and scope (partner's saved designs with full JSON), and distinguishes it from siblings like letter_design_list_presets and letterhead_list by naming the concrete artifact a design is. The bilingual DE/EN phrasing is specific and unambiguous.

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

Usage Guidelines3/5

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

The description explains what a design is used for (referenced by name or id when sending; carries every kind of mail), which implies the tool's context but does not explicitly say when to use this versus letter_design_list_presets, letterhead_list, or letter_design_preview. Usage is left to inference from the resource definitions.

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 auflistenA
Read-only
Inspect

Liefert die vom Inhaber freigegebenen native-v2 Briefpapiere als sichere Ausgangspunkte für Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost. Sie wächst mit jeder abgenommenen Vorlage. Die normale Liste bleibt reiner Text und damit günstig; 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.

NameRequiredDescriptionDefault
pagesNo
presetIdNoOptional: genau eine Vorlage samt gerenderter Vorschau laden. Ohne presetId bleibt die Liste bildfrei und günstig. EN: Optional: load one preset with its rendered preview. Without presetId the list stays image-free and cheap.
reasoningNo
resolutionNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare a safe read-only, closed-world, non-destructive operation, yet the description adds meaningful behavior: the catalogue grows with each curated/passed-review design, and the cost profile changes sharply depending on whether presetId triggers PNG rendering. The cost tradeoff is genuinely useful context annotations cannot express, though rate limits or result-size bounds are unmentioned.

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

Conciseness3/5

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

Content is front-loaded and well ordered, but the German and English versions are full duplicates, doubling the length without adding information. Every sentence is useful once, but the payload is roughly twice the necessary size.

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

Completeness3/5

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 no output schema, the description adequately covers modes, cost and content, but leaves the preview mechanics vague: what 'pages' controls (limit 2), what resolution thumb vs full means, and whether reasoning is required for audit are all unexplained.

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

Parameters3/5

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

Schema description coverage is only 25%, and the description covers only presetId (whose semantics are already in the schema description). The 'pages' cap (max 2), the 'resolution' thumb/full enum, and 'reasoning' are left undocumented in both places, so the low-coverage gap is only partially compensated.

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

Purpose5/5

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

States a specific verb and resource: returns owner-approved native-v2 letterheads as safe starting points, and enumerates the document classes they suit. This is clearly distinguishable from siblings like letter_design_list (user designs) and letterhead_list without opening either schema.

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

Usage Guidelines4/5

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

The description explicitly explains the two operating modes: omit presetId for a cheap text-only list, supply presetId to render exactly one composer preview with an inline PNG. It gives clear context for choosing between the modes but never names an alternative sibling tool or states when this list should be preferred over letter_design_list.

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

letter_design_previewBriefdesign ansehenA
Read-only
Inspect

Rendert ein gespeichertes oder inline übergebenes Briefdesign mit schemaVersion 1 oder 2 durch dieselbe Auflösung und denselben Composer wie ein echter Versand. Nutzt echte Partner-Absenderdaten und einen erfundenen Empfänger sowie Beispieltext. Liefert standardmäßig eine Inline-PNG-Seite; Seite 2 nur für continuationHeader. Mit sampleVariant empty siehst du das Briefpapier allein: Kopf und Fuß stehen echt, die Textfläche bleibt frei, und genau dieses Bild zeigt auch das Dashboard. So siehst du vorab, wie Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost 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.

NameRequiredDescriptionDefault
pagesNoStandard ist nur Seite 1. Seite 2 wird ausschließlich bei continuationHeader geliefert. EN: The default is page 1 only. Page 2 is returned only for continuationHeader.
designNo
designIdNo
reasoningNo
referenceNo
resolutionNo
sampleContentNo
sampleSubjectNo
sampleVariantNotypical zeigt eine vollständige Beispielseite, an der du Lesbarkeit und Rhythmus beurteilst. empty zeigt das Briefpapier allein: Kopf und Fuß stehen echt, die Textfläche 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

A3.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/destructiveHint/openWorldHint, but the description adds substantial context beyond them: the renderer reuses the production resolution and composer, real partner sender data is combined with a fictional recipient and sample body, output is an inline PNG, page 2 appears only for continuationHeader, no cost is incurred and no draft is mutated. This is exactly the kind of behavioral disclosure the annotations cannot carry.

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

Conciseness3/5

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

The core behavior is front-loaded in the first two sentences, which is good. But the entire text is duplicated verbatim in German and English, roughly doubling length for no added information, and the enumeration of document types is padding rather than specification.

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

Completeness4/5

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

There is no output schema, so the description carries the return-value burden and does so reasonably: inline PNG, one page by default, a second only for continuationHeader, and what the empty variant shows. Gaps remain around the resolution/thoroughness parameter and the reference object, but the picture an agent needs to call and interpret this preview tool is largely present.

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

Parameters3/5

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

Schema description coverage is only 22% across 9 parameters, so the description must compensate and only partly does: it explains sampleVariant empty vs typical (and that sampleContent overrides both) and the pages behavior (page 2 for continuationHeader), plus the saved-vs-inline distinction between designId and design. It says nothing about resolution (thumb/full), reference, sampleSubject or reasoning, leaving several parameters undocumented in both places.

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

Purpose4/5

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

The first sentence names a specific verb and resource: it renders a saved or inline letter design (schemaVersion 1 or 2) through the same resolution/composer as a real send. The scope (design preview rather than letter send) is clear enough to separate it from letter_preview, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is implied via concrete scenarios ('So siehst du vorab, wie Kündigung, Rechnung, Mahnung ... aussehen') plus the reassurance that the run is free and the letter stays a draft, which encourages safe exploratory use. However, it never states when to use this instead of letter_preview or letter_get, and gives no exclusions.

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

letter_design_saveBriefdesign speichernCInspect

Speichert ein wiederverwendbares Briefpapier (Briefdesign) mit schemaVersion 1 oder 2 im Partnerprofil und gibt designId sowie den Hash der gespeicherten Quelldaten zurück. Dasselbe Briefpapier trägt danach jede Post: Kündigung, Rechnung, Mahnung, Angebot, Vertrag und Behördenpost. Falls das Tool clientseitig entfernt wurde, suche exakt nach letter_design_save. Das Design wird vor dem Speichern vollständig validiert und gegen die Zustellzonen geprüft. 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.

NameRequiredDescriptionDefault
nameYesEindeutiger Name des Briefdesigns. EN: Unique name of the letter design.
designYes
designIdNo
reasoningNo
brandingOwnershipConfirmedNoBei einer Neuanlage oder geänderten Branding-Asset-Referenz zwingend true. Unveränderte Folgespeicherungen brauchen keine erneute Bestätigung. EN: Required as true when creating or changing a branding asset reference. Unchanged iterative saves need no renewed confirmation.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already establish this is a non-destructive, closed-world mutation, and the description usefully adds that the design is fully validated and checked against postal clear zones before storage, plus what is returned. However, it is silent on key mutation behavior: whether saving overwrites an existing design with the same name, what errors the validation can raise, and any permission requirements.

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

Conciseness3/5

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

The core action is front-loaded, but the text is fully duplicated in German and English and padded with uninformative sentences (the mail-type enumeration, the client-unload search hint). Roughly half the content does not help the agent decide or call the tool.

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

Completeness3/5

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

With no output schema, the description correctly explains the return values and the pre-storage validation, which is meaningful for a mutation. Against a very large nested design schema it is still incomplete: the input designId semantics, overwrite behavior, and failure modes are absent.

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

Parameters2/5

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

Schema description coverage is only 40% (name and brandingOwnershipConfirmed documented, designId and reasoning not), so the description is expected to compensate and does not. It never explains the designId input — which presumably drives update-versus-create semantics — nor the purpose of reasoning, and only mentions 'schemaVersion 1 or 2' in passing without linking it to the design payload.

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

Purpose4/5

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

States a specific verb and resource ('Speichert ein wiederverwendbares Briefpapier (Briefdesign) ... im Partnerprofil'), the supported schema versions, and the return values (designId plus stored-source hash). An agent can distinguish it from letter_design_list/preview/delete from the name and description alone, though it never names a sibling explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this versus letter_design_preview, letterhead_upload or template_save, and no prerequisites aside from the branding confirmation buried in the schema. The 'if the client unloaded the tool, search for letter_design_save' line is a discovery workaround, not usage guidance, and the mail-type sentence adds no selection criteria.

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

letter_getBrief abrufenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
orderIdNo
letterIdNo
reasoningNo

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

The description implies the tool is for 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 auflistenA
Read-only
Inspect

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

NameRequiredDescriptionDefault
reasoningNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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

For a simple read-only 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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
fileUrlNoÖ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.
widthMmNoBreite in mm (optional). EN: Width in mm (optional).
heightMmNoHöhe in mm (optional). EN: Height in mm (optional).
placementNoPlatzierung auf der Seite. EN: Placement on the page.
reasoningNo
fileBase64NoDer Briefkopf als PNG oder PDF (Base64), Alternative zu fileUrl. EN: The letterhead as PNG or PDF (Base64), alternative to fileUrl.
displayNameNoAnzeigename des Briefkopfs (optional). EN: Display name of the letterhead (optional).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 auflistenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNo
sinceNo
offsetNo
reasoningNo
statusFilterNo
subjectContainsNo
recipientNameContainsNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 erneuernA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
letterIdYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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üfenA
Read-only
Inspect

Brief und Entwurf als Bild prüfen, Formularvorschau rendern: komponiert wie einen echten Versand und liefert Inline-PNGs, PDF-Link, Seitenzahl, Preis und designRender mit dem tatsächlichen documentMode, den gezeichneten Brief-Elementen und bodyStartMm. Die Vorschau bleibt kostenfrei und der Brief bleibt liegen. Der Brief kommt über letterId oder inline mit content ODER blocks. Bei letterId ist die eingebettete Karte die Vorschau für den Menschen. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Ein ungespeichertes design kann direkt mitgegeben werden und gilt nur für diese eine Vorschau. WICHTIG Für FORMULARE: Selbstauskunft, Fragebogen, Zertifikat und andere eigenständige Formulare immer zuerst mit design: { "schemaVersion": 1, "documentMode": "form" } prüfen; genau dann entfallen Empfängerblock, 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 für 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. With letterId, the embedded card is the human preview. Once it appears, a short chat confirmation is enough; PDF links and letter text belong in text-only views. 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.

NameRequiredDescriptionDefault
pagesNoWie viele Seiten als Bild zurückkommen. Standard 3, Maximum 8. Der PDF-Link enthält immer alle Seiten. EN: How many pages come back as images. Default 3, maximum 8. The PDF link always contains every page.
blocksNoStrukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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.
designNoUngespeichertes Briefdesign nur für diese Vorschau. Hat Vorrang vor designId und erzeugt keinen Eintrag im Konto. Für eigenständige 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.
contentNoBrieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both.
subjectNoBetreff. Ohne letterId erforderlich. EN: Subject. Required without a letterId.
designIdNoEin gespeichertes Briefdesign für diese Vorschau verwenden. EN: Use a saved letter design for this preview.
languageNo
letterIdNoEinen gespeicherten Entwurf in der Vorschau anzeigen. Alternativ den Brief inline angeben. EN: Preview a stored draft. Alternatively provide the letter inline.
reasoningNo
referenceNoWerte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen 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.
styleDefsNoBenannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide.
resolutionNothumb (96 dpi, Standard, schnell und klein) oder full (150 dpi, zum Prüfen von Details). EN: thumb (96 dpi, default, fast and small) or full (150 dpi, for checking details).
senderProfileIdNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/destructiveHint=false, so the safety profile is covered; the description adds real behavioral context on top: the preview is free of charge, the stored letter is not modified, an unsaved design creates no account entry and applies only to this preview, and it enumerates what comes back (PNGs, PDF link, page count, cost, designRender with documentMode/chrome/bodyStartMm). 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.

Conciseness3/5

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

The content is largely duplicated verbatim in German and English, roughly doubling length. The most critical instruction (forms need documentMode 'form') is buried mid-paragraph rather than front-loaded, and workflow advice about template_save/template_release is appended after the parameter guidance.

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

Completeness4/5

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

No output schema exists, and the description compensates by naming the return artifacts and the designRender fields. It also covers the rebuild/verify loop and the form special case, which are important given 13 parameters and nested objects. A few parameter behaviors remain undocumented, but the description is largely complete.

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

Parameters3/5

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

Schema description coverage is 77%, so the schema already documents most parameters (pages, resolution, reference, styleDefs, etc.). The description adds the mutual-exclusion rule (content OR blocks, never both), the letterId-vs-inline choice, and the form-mode design usage. It does not clarify several remaining parameters, so it is adequate rather than rich.

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

Purpose4/5

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

States a specific verb and resource: render a letter/draft (and form preview) as images, returning inline PNGs, PDF link, page count, cost and designRender. An agent can tell what it does. However, it never explicitly distinguishes itself from the close siblings letter_design_preview and template_preview, so sibling differentiation is missing.

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

Usage Guidelines4/5

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

Gives clear usage context: supply letterId or inline content OR blocks, and for standalone forms always preview first with documentMode 'form'. It also names the follow-up tools (template_save, template_release) once the layout matches. No explicit when-not or comparison to the sibling preview tools, so it falls 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 planenBInspect

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. Eine echte OAuth-Verbindung legt zuerst eine Freigabe an. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Eine OAuth-Verbindung mit approval:self_approve darf über die Karte entscheiden. Nach der Freigabe entsteht die Planung, der eigentliche Versand läuft zum geplanten Zeitpunkt durch dieselbe Versandpipeline. EN: Schedules 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. A real OAuth connection creates an approval first. The embedded card is the preview and approval. Once it appears, a short chat confirmation is enough; PDF links and letter text belong in text-only views. An OAuth connection with approval:self_approve may decide through the card. Approval creates the schedule, and the actual send runs at the planned time through the same send pipeline.

NameRequiredDescriptionDefault
modeYesat = fester Zeitpunkt, in = relative Verzögerung, cron = wiederkehrend. EN: at = fixed time, in = relative delay, cron = recurring.
colorNo
delayNoVerzö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'.
dryRunNoPrü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.
sendAtNoZeitpunkt bei mode='at' (ISO 8601, Berlin-Zeit wenn ohne Offset). EN: Time for mode='at' (ISO 8601, Berlin time if no offset).
endDateNoEnddatum für eine cron-Serie. EN: End date for a cron series.
expressNo
auditTagNo
letterIdYesBestehender Entwurf, der geplant versendet wird. EN: Existing draft to be sent on schedule.
reasoningNo
presetNameNo
templateIdNo
signatureIdNo
deliveryTypeNo
maxCostEurosNoMaximalbetrag in Euro. Liegt der Preis darüber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted.
cronExpressionNo5-Felder cron bei mode='cron': 'min std tag monat wochentag'. EN: 5-field cron for mode='cron': 'min hour day month weekday'.
sendBeforeHourNoVersand-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.
mandantennummerNo
senderAddressIdNo
senderProfileIdNo
businessDaysOnlyNoNur 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.
includeSignatureNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations only declare a non-destructive write, so the description carries most of the burden and delivers: checks and pricing run immediately, cost is reserved, a real OAuth connection creates an approval first, approval is what actually creates the schedule, and the send later flows through the same send pipeline. This is real behavioral context, though reversibility of the reservation is not addressed.

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

Conciseness2/5

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

The first sentence is well front-loaded, but the content is then duplicated wholesale in German and English, and several sentences address the UI/chat presentation flow ('kurze Bestätigung', 'PDF-Link und Brieftext gehören in reine Textansichten') rather than how to invoke the tool. Much of the text does not earn its place.

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

Completeness3/5

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

For a 22-parameter mutation tool with no output schema, the description gives a solid operational narrative (pricing, reservation, approval gating) but leaves the majority of parameters undocumented and never explains the returned cost/approval artifacts. Adequate at the workflow level, incomplete at the call-construction level.

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

Parameters2/5

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

Schema description coverage is only 45%, so the description should compensate — but it only restates the mode enum values (fixed/relative/cron) that the schema already documents. Roughly a dozen parameters (color, express, auditTag, reasoning, presetName, templateId, signatureId, deliveryType, mandantennummer, senderAddressId, senderProfileId, includeSignature) are explained in neither the schema nor the description.

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

Purpose4/5

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

The opening sentence states a specific verb and resource ('Schedules an existing draft for a later time') plus the three timing modes, which clearly contrasts with an immediate-send tool. It stops short of naming any sibling (e.g. order_send, schedule_list_or_cancel), so differentiation must be inferred from the verb alone.

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

Usage Guidelines3/5

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

The description walks through the scheduling/approval workflow, which implies when this tool is appropriate, but it never states when NOT to use it or which alternative to reach for (immediate send vs. listing/cancelling). Usage is inferable rather than explicit.

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

mandant_getMandant abrufenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
mandantIdNo
reasoningNo
mandantennummerNo

TDQS

B3/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 auflistenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoStandard 20, maximal 100. EN: Default 20, maximum 100.
sinceNoNur Mandanten, die seit diesem Zeitpunkt angelegt wurden (ISO 8601). EN: Only clients created since this time (ISO 8601).
offsetNoVersatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0.
reasoningNo
tagFilterNo
searchQueryNo
kategorieFilterNo

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

mcp_healthVerbindung prüfenA
Read-only
Inspect

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, Briefpapier) und was der nächste Schritt ist. Jeder Schritt trägt humanSummary (de, en): ein Satz in Alltagssprache für den Menschen. Sprich mit dem Menschen in diesen Worten; Tool-Namen, nextTool, fixUrl und messageDe/messageEn sind für dich. 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, letterhead) and what the next step is. Every step carries humanSummary (de, en): one sentence in everyday language for the person. Talk to the person in those words; tool names, nextTool, fixUrl and messageDe/messageEn are for you. 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.

NameRequiredDescriptionDefault
reasoningNo
checkRenderNoPrüft zusätzlich den Render-Pfad (Composer + Rasterizer). Default false. EN: Additionally probes the render path (composer + rasterizer). Defaults to false.

TDQS

A3.8/5.0
Behavior4/5

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

Beyond the readOnly/openWorld/destructive annotations, the description discloses what the tool actually inspects (partner token, end-to-end chain), the setup categories it reports (sender profile, AVV, balance, sandbox, approval, letterhead), and that checkRender additionally probes composer + rasterizer. That is substantive behavioral context, not annotation restatement.

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

Conciseness3/5

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

The German/English duplication roughly doubles the length without adding distinct information for the agent, and the humanSummary guidance is repeated twice. The core facts are front-loaded, but the bilingual mirror does not earn its place as concision.

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

Completeness4/5

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

With no output schema, the description usefully characterizes the return shape: per-step humanSummary (de, en), nextTool, fixUrl, messageDe/messageEn, and a setup section listing unmet prerequisites. That is unusually complete for a health-check tool, though the exact shape of a failing probe response (e.g. bad token) is not sketched.

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

Parameters3/5

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

Schema description coverage is 50%; checkRender is already documented in the schema and the description largely repeats it ('additionally checks whether rendering works'), while it adds the practical trigger for setting it true. The other parameter (reasoning) is undocumented in both schema and description, so the description does not fully compensate for the coverage gap.

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

Purpose4/5

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

It states a specific verb+resource: verifies the partner token and the whole processing chain, and reports which send prerequisites are met. It is clearly distinguishable from siblings like wallet_balance or sender_profile_validate, though it never names a sibling explicitly. The 'call it before building a template' framing helps an agent place it, but there is no direct routing statement against setup_status_app.

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

Usage Guidelines4/5

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

Explicit invocation timing is given: 'Call it before building a template you will need to look at,' plus the checkRender:true trigger condition for probing the render path. It gives clear when-to-use context but no when-not / alternative-tool guidance (e.g. versus setup_status_app or setup_fix_link).

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

order_cancelAuftrag stornierenA
Destructive
Inspect

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 überhaupt 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').

NameRequiredDescriptionDefault
reasonNoOptionaler Stornogrund. EN: Optional cancellation reason.
orderIdNoDie zu stornierende Bestellung. EN: The order to cancel.
reasoningNo
approvalIdNoStatt 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

A4.5/5.0
Behavior5/5

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

With destructiveHint=true and readOnlyHint=false already declared, the description still adds substantial value: it discloses the side effect (refund to wallet rather than card), the closed-loop nature, the rejection behavior when printing, and the 10-minute grace window. These are behavioral traits beyond what annotations convey.

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

Conciseness4/5

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

Front-loads the core effect (cancellation plus wallet credit) before drilling into the two modes, which is good structure. The bilingual duplication inflates length, but the German/English mirroring is functionally justified and each sentence carries information.

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

Completeness4/5

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

For a destructive mutation tool with no output schema, the description covers the essential behavioral consequences, the two invocation modes, and the failure case, so an agent has enough to invoke it correctly. Minor gaps remain: no auth/permission note and no mention of the undocumented 'reasoning' field.

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

Parameters4/5

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

Schema coverage is 75%, just under the high-coverage baseline, and the description supplements it by clarifying that orderId and approvalId are alternative triggers with different semantics and windows. It does not mention the 'reasoning' parameter nor add format detail beyond the schema, keeping it short of 5.

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

Purpose5/5

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

States a specific verb and resource (cancels a letter/order) and immediately discloses the financial outcome (amount credited to the wallet, closed loop). It also cleanly separates the two operational modes (orderId vs approvalId), so an agent can tell this apart from siblings like order_status or order_send without opening a schema.

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

Usage Guidelines4/5

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

Gives clear conditions for each path: orderId cancels an existing order within the cancellation window, approvalId stops a chat-approved send inside its 10-minute grace window. It also states a when-not case (already printing is cleanly rejected). It lacks explicit routing to alternative sibling tools, so it stops short of a full 5.

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

order_einlieferungsbelegEinlieferungsbeleg abrufenA
Read-only
Inspect

Liefert den Einlieferungsbeleg (Einlieferungsnachweis) zu einem versendeten Auftrag, sobald der Brief eingeliefert ist und der Versanddienstleister einen Beleg ausstellt: 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. Der Beleg zeigt die Einlieferung bei der Post. Sendungsnummer und Zustellstatus eines Einschreibens liefert order_status. EN: Returns the proof of posting (Einlieferungsbeleg) for a sent order, once the letter is handed in and the mail provider issues one: a download URL for the receipt PDF valid for 90 days, the postmark, the mail provider and the verified record from the GoBD archive. The receipt shows the hand-in at the post. The tracking number and delivery status of registered mail come from order_status.

NameRequiredDescriptionDefault
orderIdYes
reasoningNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint/closed-world/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the returned evidence set, the 90-day validity window of the URL, the GoBD archive provenance, and the condition under which no receipt exists yet. It does not describe failure behavior when the letter has not yet been handed in.

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

Conciseness4/5

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

Front-loaded with the outcome and the returned fields, and the bilingual duplication is justified given the German tool name and title. It is somewhat verbose with the German and English saying the same thing, but no sentence is purely padding.

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

Completeness4/5

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

With no output schema, the description usefully enumerates what is returned (PDF download URL, postmark, provider, GoBD record) and the 90-day validity. It is close to complete for a read-only retrieval tool; the only meaningful gap is the unexplained reasoning parameter.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description must compensate. "zu einem versendeten Auftrag" only weakly implies that orderId identifies a shipped order, and the second parameter (reasoning) is never mentioned at all. The undocumented parameters are left entirely to guesswork.

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

Purpose5/5

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

States a specific verb (retrieve) and a specific resource (Einlieferungsbeleg / proof of posting), and explicitly distinguishes it from the sibling order_status by naming which sibling covers tracking number and delivery status. An agent can tell it apart from order_status without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit precondition ("sobald der Brief eingeliefert ist und der Versanddienstleister einen Beleg ausstellt") and routes the adjacent need elsewhere ("Sendungsnummer und Zustellstatus ... liefert order_status"). This is explicit when-it-applies plus a named alternative.

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 sendenA
Destructive
Inspect

Korrigiert die Empfängeradresse eines Briefs im Status awaiting_partner_fix und reicht ihn erneut ein. Das ist nur erlaubt, wenn die OAuth-Verbindung approval:self_approve ausdrücklich trägt. Andernfalls muss der Mensch den zurückgegebenen Link öffnen und im angemeldeten Portal entscheiden. Der Preis bleibt unverändert. EN: Corrects the recipient address of a letter in awaiting_partner_fix and resubmits it. This is allowed only when the OAuth connection explicitly carries approval:self_approve. Otherwise, the human must open the returned link and decide in the signed-in portal. The price stays unchanged.

NameRequiredDescriptionDefault
orderIdYes
reasoningNo
recipientYesDie korrigierte Empfängeradresse 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.
clientOrderIdNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation profile is covered. The description adds high-value context beyond that: the required OAuth scope, the human-in-the-loop fallback, and the invariant that price stays unchanged. It could go further on failure behavior, but it meaningfully enriches the annotation picture.

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

Conciseness4/5

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

The action and its precondition are front-loaded and each German sentence mirrors its English counterpart, so there is no filler within a language. The full bilingual duplication doubles the length, which is defensible for i18n but not maximally concise.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the essential operational facts: precondition, fallback flow (including the returned link), and the price invariant. Minor gaps remain on per-parameter meaning and error outcomes, but the agent has enough to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is only 25%, so the description should compensate for undocumented parameters, yet it never explains orderId, reasoning, or clientOrderId. Only 'recipient' carries a schema description (inline fields vs { addressId }), which the description merely echoes. The gap remains unaddressed.

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

Purpose5/5

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

States a specific verb+resource ('Korrigiert die Empfängeradresse eines Briefs') scoped to a precise state ('im Status awaiting_partner_fix') and the follow-on action ('reicht ihn erneut ein'). This cleanly distinguishes it from siblings like order_send (new send) and address_upsert.

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

Usage Guidelines5/5

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

Gives an explicit precondition for use ('nur erlaubt, wenn die OAuth-Verbindung approval:self_approve trägt') and an explicit fallback path for when it is not ('muss der Mensch den zurückgegebenen Link öffnen und im angemeldeten Portal entscheiden'). The agent knows both when to call it and what to do instead.

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

order_sendBrief versendenA
Destructive
Inspect

Versendet einen Brief physisch per Post: prüft die Pflichtangaben des Absenders, die Empfängeradresse, den AVV und die Limits, erstellt die finale PDF und berechnet den Preis. 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 über letterId (ein bereits erstellter Entwurf) oder inline: dann ist der Text entweder content (Fließtext) ODER blocks (strukturiert: Tabellen, Überschriften, 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. Eine echte OAuth-Verbindung landet immer in der Freigabewarteschlange. Die eingebettete Karte ist Vorschau und Freigabe. Nach ihrer Anzeige reicht im Chat eine kurze Bestätigung; PDF-Link und Brieftext gehören in reine Textansichten. Eine OAuth-Verbindung mit der ausdrücklich erteilten Berechtigung approval:self_approve darf über die Karte entscheiden. Danach fragst du den Fortschritt mit order_status ab. order_cancel storniert einen Brief vor dem Druck. order_fix_resubmit korrigiert einen vom Dienstleister abgelehnten Brief; auch dafür ist die ausdrückliche Selbstfreigabe nötig. Bei einer Mahnung, Kündigung, Mieterhöhung oder einem anderen Brief mit Frist frag, ob der Mensch ein Einschreiben möchte, und nenne dessen Preis aus shipping_quote. Rechtliche Fragen beantwortet eine Anwältin oder ein Anwalt; du nennst Versandarten und Preise. 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 and calculates the price. 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. A real OAuth connection always enters the approval queue. The embedded card is the preview and approval. Once it appears, a short chat confirmation is enough; PDF links and letter text belong in text-only views. An OAuth connection explicitly granted approval:self_approve may decide through the card. After that, poll progress with order_status. order_cancel cancels a letter before it goes to print. order_fix_resubmit corrects a letter rejected by the provider; it also requires explicit self-approval. For a Mahnung, Kündigung, Mieterhöhung or other deadline letter, ask whether the person wants Einschreiben and state its price from shipping_quote. Leave legal advice to a lawyer; you name the delivery options and prices. 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.

NameRequiredDescriptionDefault
colorNoOhne Angabe wird die Farbe automatisch erkannt. EN: If omitted, colour is detected automatically.
blocksNoStrukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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.
designNoExakter Briefdesign-Snapshot aus template_apply_with_merge_fields.composition.design. Hat Vorrang vor designId und verhindert, dass eine spätere Designänderung die freigegebene Vorlagenkomposition verändert. 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.
dryRunNo
contentNoBrieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both.
expressNo
subjectNo
auditTagNo
designIdNoEin gespeichertes Briefdesign für diesen Versand verwenden. Ohne Angabe gilt in dieser Reihenfolge: das am Entwurf gespeicherte Design (beim Versand über 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.
letterIdNoBestehender Entwurf. Alternativ den Brief inline angeben. EN: Existing draft. Alternatively provide the letter inline.
reasoningNo
referenceNoWerte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode.
styleDefsNoBenannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide.
presetNameNo
templateIdNo
scheduledAtNo
signatureIdNo
approvalModeNoWie der Versand freigegeben wird. 'draft' und 'review' stellen ihn in die Freigabe-Warteschlange, statt sofort zu versenden. 'auto' wird derzeit genauso behandelt wie 'review': der Brief wartet auf die Freigabe durch einen Menschen. Mit einem Test-Token läuft jeder Modus als Probe. Wichtig: auch diese beiden reservieren den Betrag beim Einreichen im Wallet, damit ein freigegebener Brief später nicht am Guthaben scheitert. Ohne Deckung kommt INSUFFICIENT_FUNDS zurück 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. 'auto' is currently treated exactly like 'review': the letter waits for a person to approve it. With a test token every mode runs as a rehearsal. 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.
deliveryTypeNoStandard standard. EN: Defaults to standard.
letterheadIdNoBestimmter Briefkopf für diesen Versand. Ohne Angabe wird der Standard-Briefkopf verwendet. EN: A specific letterhead for this send. If omitted, the default letterhead is used.
maxCostEurosNoMaximalbetrag in Euro. Liegt der Preis darüber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted.
priceVersionNoOptional: 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.
recipientZipNo
clientOrderIdNoIdempotenzschlüssel: eine beliebige Zeichenkette (1-200 Zeichen, z. B. 'mahnung-kunde42-2026-07-20'; kein UUID-Format nötig). 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.
recipientCityNo
recipientNameNo
coverTemplateIdNoAnschreiben für eine eigenständige Formularvorlage. EN: Cover letter for a standalone form template.
mandantennummerNo
recipientStreetNo
senderAddressIdNo
senderProfileIdNo
includeSignatureNo
recipientCompanyNo
recipientCountryNoISO-3166-alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE.
letterheadEnabledNoAuf false setzen, um den Briefkopf für diesen einen Versand zu unterdrücken. EN: Set to false to suppress the letterhead for this one send.
templateVersionIdNoExakte 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.
templateMergeValuesNoMerge-Werte für die exakte Vorlagenversion. EN: Merge values for the exact template version.
quotedUnitPriceCentsNoOptional: der Stückpreis 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.
recipientHouseNumberNo
coverTemplateVersionIdNoExakte freigegebene Version des Anschreibens. EN: Exact released version of the cover letter.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and openWorld=false, but the description adds much more: real OAuth sends enter the approval queue, wallets reserve funds at submit (INSUFFICIENT_FUNDS if uncovered), PRICE_CHANGED abort behavior, the six-gate pipeline, and the critical caveat that a dryRun's returned letterId is a rehearsal handle that yields NOT_FOUND in letter_get/letter_preview.

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

Conciseness3/5

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

The core purpose is front-loaded, but the text is very long and the entire German block is duplicated verbatim in English, including the full blocks JSON example. Much of the routing guidance earns its place, but the doubling and repetition push it well past what is needed even for a 40-param tool.

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

Completeness4/5

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

For a destructive, 40-parameter tool with no output schema, the description covers approval/queue flow, cost reservation, error codes, idempotency, and which sibling to call at each stage. It stops short of explaining what a successful response returns beyond pointing to order_status, which is the main remaining gap.

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

Parameters3/5

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

With 40 parameters and only 53% schema description coverage, the description must compensate, and it does add real meaning for the content/blocks exclusivity, letterId, and dryRun semantics, plus it points to frankki://blocks-guide. However many parameters (express, subject, scheduledAt, reasoning, senderAddressId, presetName, etc.) are left undocumented in both places.

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

Purpose5/5

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

States a specific verb and resource ('Versendet einen Brief physisch per Post') plus the internal pipeline it runs (Pflichtangaben, Empfängeradresse, AVV, Limits, finale PDF, Preisberechnung). It is clearly distinguishable from order_send_batch, letter_create_draft, and letter_preview, which it names directly.

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

Usage Guidelines5/5

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

Explicitly routes between alternatives: use letterId or inline content/blocks, preview via letter_create_draft/letter_preview first, poll with order_status, cancel with order_cancel, fix with order_fix_resubmit, price a planned letter with shipping_quote, and use dryRun for a free rehearsal. It also states when self-approval is required and when to ask the human about Einschreiben.

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 versendenA
Destructive
Inspect

Reicht mehrere Briefe als einen Stapel ein. Jeder Eintrag wird einzeln geprüft und bepreist. Der Stapel landet als eine Freigabe für alle Empfänger in der Warteschlange. Gib dem Menschen immer den zurückgegebenen approvalUrl, damit er Empfängerliste, Anzahl und Gesamtkosten im angemeldeten Portal prüfen und dort entscheiden kann. Nur eine OAuth-Verbindung mit der ausdrücklich erteilten Berechtigung approval:self_approve darf selbst freigeben. Bei Ablehnung wird die gesamte Reservierung zurückgebucht. Mit dryRun bleibt es bei einer kostenfreien Probe. EN: Submits several letters as one batch. Each item is checked and priced separately. The batch enters the approval queue as one approval covering every recipient. Always give the human the returned approvalUrl so they can review the recipient list, count and total cost in the signed-in portal and decide there. Only an OAuth connection explicitly granted approval:self_approve may approve on its own. Rejection refunds the entire reservation. With dryRun, it remains a free rehearsal.

NameRequiredDescriptionDefault
itemsYesListe der Briefe im Stapel. Jeder Eintrag trägt 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.
dryRunNoSimuliert den ganzen Stapel: prüft jeden Eintrag, berechnet aber nichts und versendet nichts. EN: Simulates the whole batch: validates each entry but charges nothing and sends nothing.
presetNameNoOptionales Preset für den ganzen Stapel; pro Eintrag überschreibbar ist nicht vorgesehen. EN: Optional preset for the whole batch; per-entry override is not supported.
stopOnErrorNoBricht den Stapel beim ersten Fehler ab. Standard false. EN: Aborts the batch on the first error. Default false.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, and the description richly confirms and extends this: the batch becomes one queued approval, rejection refunds the entire reservation, and autocompletion requires the explicit approval:self_approve grant. This discloses consequences (charges, refunds, approval gating) well beyond what the annotations convey.

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

Conciseness4/5

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

Front-loads the core action before the approval guidance, and each sentence carries operational meaning. However, the German and English text are verbatim duplicates, which roughly doubles length without adding information.

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

Completeness4/5

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

For a batch mutation with no output schema, the description supplies the key return artifact (approvalUrl), the approval lifecycle, refund behavior, and the authorization requirement. Minor gaps remain around per-item failure reporting and the exact shape of counted/costed results, but the essentials are covered.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters like clientOrderId, dryRun, stopOnError, designId and priceVersion are already fully documented in the schema. The description adds no per-parameter syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource with scope: submitting multiple letters as one batch, each item checked and priced separately. The batch framing clearly differentiates it from the sibling order_send (single-letter) without needing to name it.

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

Usage Guidelines4/5

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

Gives concrete operational context: always hand the human the approvalUrl, only an OAuth connection with approval:self_approve may self-approve, and dryRun is a free rehearsal. It does not explicitly route between this tool and order_send or approval_submit, so a sibling-selection rule is 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_statusAuftragsstatus abrufenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
orderIdYes
reasoningNo

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
nameYesEindeutiger Name der Voreinstellung (pro Partner). EN: Unique name of the preset (per partner).
presetYesDas Konfigurations-Bundle (Absender/Unterschrift/Briefkopf, Versand, Kennzeichnung, Freigabe, Planung, Limits, auditTagPrefix). EN: The configuration bundle (sender/signature/letterhead, shipping, labelling, approval, scheduling, limits, auditTagPrefix).
reasoningNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb and resource: '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.

Usage Guidelines3/5

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 abrufenA
Read-only
Inspect

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

NameRequiredDescriptionDefault
reasoningNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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

For a simple read-only 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 abrufenA
Read-only
Inspect

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

NameRequiredDescriptionDefault
reasoningNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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

The description opens with a specific verb and resource ('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.

Usage Guidelines3/5

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

The description implies the tool is for 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 verwaltenA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
actionNolist = Planungen auflisten, cancel = eine Planung abbrechen. EN: list = list schedules, cancel = cancel a schedule.
dryRunNoBei 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.
reasoningNo
scheduleIdNoErforderlich bei action='cancel'. EN: Required for action='cancel'.
statusFilterNoOptionaler Statusfilter für action='list'. EN: Optional status filter for action='list'.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 abrufenA
Read-only
Inspect

Liefert ein einzelnes Absenderprofil mit allen Pflichtangaben, Bankverbindung und Disclaimer. EN: Returns a single sender profile with all mandatory details, bank account and disclaimer.

NameRequiredDescriptionDefault
profileIdYes
reasoningNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 auflistenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
reasoningNo

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 unvollständiges Profil wird gespeichert und meldet die fehlenden Felder zurück, sodass du es schrittweise ergänzen kannst. Versenden ist mit vollständigen Pflichtangaben möglich. 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.

NameRequiredDescriptionDefault
idNoID eines bestehenden Profils zum Bearbeiten. Weglassen legt ein neues an. EN: Id of an existing profile to edit. Omitting creates a new one.
isDefaultNotrue 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.
reasoningNo
disclaimerNoOptionaler Haftungsausschluss oder Fußzeilentext, unabhängig von der Vollständigkeit. EN: Optional disclaimer or footer, independent of completeness.
rechtsformYesRechtsform 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.
displayNameNoOptionaler Anzeigename in Listen. EN: Optional display name in lists.
bankverbindungNoOptionale Bankverbindung, unabhängig von der Vollständigkeit. EN: Optional bank details, independent of completeness.
pflichtangabenYesPflichtangaben 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.
defaultDesignIdNoBriefpapier für Briefe, die selbst keines nennen. Weglassen behält den Wert, null löscht ihn. EN: Letterhead for letters naming none. Omitting keeps the value, null clears it.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds genuinely useful behavior beyond that: partial profiles are persisted rather than rejected, the response reports the missing fields, and outbound sending is gated on completeness. It does not cover auth/permissions or what happens to unspecified existing fields on edit.

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

Conciseness3/5

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

Purpose and behavior are front-loaded, and each semantic sentence (partial save, missing-field report, sending gate) earns its place. But the entire text is duplicated German/English verbatim, roughly doubling length without adding information for an agent.

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

Completeness4/5

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

For a 9-parameter upsert with nested objects and no output schema, the description covers the important non-obvious behavior (partial-save + missing-field feedback loop, send gating) that an agent could not infer from annotations. The remaining parameter semantics are well covered by the 89% schema descriptions, so only minor gaps remain.

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

Parameters3/5

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

Schema coverage is 89%, so the schema already documents nearly every parameter (id, isDefault, disclaimer, rechtsform, etc.). The description only re-summarizes which fields are involved and adds no format or interaction detail beyond the schema; parameters such as id, isDefault and reasoning are not addressed in the description at all. Baseline 3 applies when the schema carries the load.

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

Purpose4/5

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

States a specific verb+resource pair ('Legt ein Absenderprofil an oder bearbeitet es') and enumerates the covered fields (Rechtsform, Pflichtangaben, Bankverbindung, Haftungsausschluss, Briefpapier), so an agent immediately knows this is the write-side of the sender-profile family. It does not explicitly name the sibling tools it is not (get/list/validate), so it stops short of full differentiation.

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

Usage Guidelines3/5

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

It gives real usage context — an incomplete profile is still saved and can be completed incrementally, and sending only works once mandatory details are complete — which tells the agent it may call this repeatedly with partial data. However it never names alternatives or exclusions (e.g. calling sender_profile_validate first to learn the required fields), so routing is 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.

sender_profile_validateAbsenderprofil prüfenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_status_appEinrichtungsstand für die Karte lesenA
Read-only
Inspect

App-only, für die FrankKi-Übergabe-Karte im Chat: die Karte pollt hier den aktuellen Einrichtungsstand und merkt so selbst, wenn der Mensch aus dem Browser zurück ist. Für Agenten liefert mcp_health denselben Stand unter setup. EN: App-only, for the FrankKi handover card in the chat: the card polls the current setup state here and so notices by itself when the human is back from the browser. Agents get the same state from mcp_health under setup.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that: it is an app-only, polled endpoint consumed by a UI card, not intended for agent calls. It does not describe the shape of the returned setup state, but the read-only nature is clear.

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

Conciseness4/5

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

Front-loaded and deliberate, but the entire content is duplicated in German and English, which roughly doubles the length for readers of a single language. The added cost is modest and plausibly intentional for a bilingual deployment, so it remains well-structured overall.

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

Completeness4/5

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

For a zero-parameter, read-only status poll with full annotation coverage, the description supplies what an agent needs: the app-only constraint and the correct alternative (mcp_health.setup). There is no output schema, so more detail on the returned setup structure would help, but the routing information is complete enough.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. There is nothing further for the description to clarify, and it correctly indicates there is no filtering — the card simply reads the current state.

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

Purpose5/5

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

States a specific resource and scope — polls the current setup state for the FrankKi handover card in chat — and explicitly distinguishes itself from the sibling that serves the same data (mcp_health under setup). An agent understands what it does and who it is for without opening the schema.

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

Usage Guidelines5/5

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

Explicitly says when to use it (app-only, driven by the chat card polling) and when not to (agents should read mcp_health.setup instead). Both the audience and the alternative are named, leaving nothing to inference.

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

shipping_quoteVersandpreis ermittelnA
Read-only
Inspect

Registered-mail availability follows the destination's current catalog. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair gives a verdict for that pair alone. A catalog snapshot gives a verdict for that snapshot alone. Tracked mail and registered mail are distinct products. Get the user's agreement before switching a requested registered method to standard or tracked delivery. Promise a carrier-issued proof-of-posting PDF only after confirming one is available. Reply in the user's conversation language, regardless of recipient country, letter language, German tool titles or bilingual tool results. Translate shipping methods, letter formats, delivery estimates and explanations for the user. In English: Standardbrief = standard letter; Kompaktbrief = compact letter; Großbrief = large letter; Maxibrief = maxi letter; Einschreiben = registered mail; Einwurf-Einschreiben = registered mail with recorded mailbox delivery; Übergabe-Einschreiben = registered mail with signature on delivery; Einlieferungsbeleg = proof of posting. Use localized money and number formatting. Keep tool names, parameter names, deliveryType values and error codes unchanged in tool calls; show codes to users only when needed for troubleshooting. Preserve the letter's contents in its original language. 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.

NameRequiredDescriptionDefault
colorYesFarbannahme für eine allgemeine Schätzung. 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.
countryNoISO 3166-1 alpha-2, Standard DE. EN: ISO 3166-1 alpha-2, defaults to DE.
expressNo
letterIdNoOptional: die letterId eines bestehenden Entwurfs. Dann kommen Seitenzahl und Farbe aus der gespeicherten Vorschau; für den endgültigen Preis inklusive Anhängen 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.
pageCountYesSeitenzahl für eine allgemeine Schätzung. 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.
reasoningNo
deliveryTypeYesRegistered-mail availability follows the destination's current catalog. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair gives a verdict for that pair alone. A catalog snapshot gives a verdict for that snapshot alone. Tracked mail and registered mail are distinct products. Get the user's agreement before switching a requested registered method to standard or tracked delivery. Promise a carrier-issued proof-of-posting PDF only after confirming one is available.

TDQS

A4/5.0
Behavior4/5

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 genuinely useful behavioral context beyond that: verdicts are scoped to a single country/method pair and to a single catalog snapshot, tracked and registered mail are distinct, user agreement is required before downgrading a registered method, and proof-of-posting PDFs must not be promised unless confirmed.

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

Conciseness2/5

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

The description is heavily padded with a German-to-English glossary (Standardbrief/Kompaktbrief/Einschreiben etc.) and language/localization instructions that are generic agent policy rather than shipping_quote semantics. Much of the deliveryType text is also duplicated into the input schema, and the actual purpose does not appear until the tail of the field.

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

Completeness4/5

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

For a read-only quote tool with no output schema, the description covers what it returns (price, letter format, shipping method, estimated delivery time), the per-letter and tier-inclusive pricing semantics, and the precision caveat versus order_send dryRun. Adequate and complete enough to call correctly, though the scoping limits of the quote could be a bit tighter.

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

Parameters4/5

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

Schema coverage is 71% and most fields are described, but the description/enum text adds real meaning for deliveryType: the country-specific code conventions (einschreiben_* for DE, ch_einschreiben for CH), and the rule to discover valid codes via availableDeliveryTypes. It also explains that the returned price is per letter and includes the partner's volume tier (field tierId), which is not in the schema.

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

Purpose4/5

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

The German sentence 'Ermittelt den Preis, das Briefformat, die Versandart und die voraussichtliche Laufzeit für einen geplanten Brief' names a specific verb and resource, and it explicitly distinguishes itself from order_send (actual send) and pricing_tiers. The only deduction is structural: this purpose statement sits at the end of a long preamble of localization and deliveryType rules, so it is not front-loaded.

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

Usage Guidelines5/5

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

Usage conditions and alternatives are explicit: call this when the letter is only planned (page count, country, delivery type), use order_send with dryRun:true once the letter exists for a more precise price, and use pricing_tiers for the tier tables themselves. It also states that standard shipping_quote results feed the availableDeliveryTypes used to pick codes for other destinations.

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

signature_listUnterschriften auflistenA
Read-only
Inspect

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

NameRequiredDescriptionDefault
reasoningNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
widthMmNoGewünschte Breite in mm (optional). EN: Desired width in mm (optional).
pngBase64YesDie Unterschrift als PNG (Base64). EN: The signature as PNG (Base64).
reasoningNo
displayNameNoAnzeigename der Unterschrift (optional). EN: Display name of the signature (optional).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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üllenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
languageNoSprache für die Formatierung von Betrag und Datum. Standard de. EN: Language for money and date formatting. Defaults to de.
reasoningNo
templateIdYesId der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get.
mergeValuesNoZuordnung 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 Spaltenschlüsseln 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.
coverTemplateIdNoOptionales 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.
mandantennummerNoOptionaler Mandantenbezug (nur Kontext). EN: Optional client reference (context only).
templateVersionIdNoExakte 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.
coverTemplateVersionIdNoOptional: exakte freigegebene Version des gewählten Anschreibens. EN: Optional exact released version of the selected cover letter.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the safe read-only profile (readOnlyHint=true, destructive=false, openWorld=false), so the bar is lower, yet the description still adds substantive behavior: the content-vs-blocks return shape, the separate letterhead/brand selection step, and the MERGE_FIELDS_MISSING error that lists missing/invalid fields. It stops short of disclosing permissions or pagination/size limits, so 4 rather than 5.

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

Conciseness3/5

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

Purpose is front-loaded and every clause is actionable, but the entire description is duplicated verbatim in German and English, roughly doubling length without adding information. The bilingual repetition is the main drag on structure.

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

Completeness4/5

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

There is no output schema, so the description carries the return-value burden and does so: it explains content vs blocks, the package structure, and the specific error code with its payload. Combined with the pass-through instructions to order_send, an agent has enough to call and handle the result correctly; only edge behaviors like partial failures are unaddressed.

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

Parameters4/5

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

Schema description coverage is already 88%, so the baseline is 3, but the description adds a cross-parameter relationship the schema does not encode: a standalone form template with sendable:false/releaseBlocker:null requires coverTemplateId from a directly addressable letter template. Minor confusion arises because the description calls this input 'templateMergeValues' while the schema names it 'mergeValues'.

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

Purpose5/5

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

States a specific verb and resource: it fills the placeholders of a saved template with supplied values and returns subject/content or a complete cover-form package. It goes further by distinguishing the block-template case (returns finished blocks instead of content) and the standalone form case, which an agent can use to tell it apart from template_preview and template_get 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.

Usage Guidelines4/5

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

Gives real workflow context: it names the downstream call (order_send) and specifies which values must be passed through unchanged, and it explains the coverTemplateId requirement for standalone form templates. It does not explicitly contrast with sibling tools such as template_preview or state when not to apply, which keeps it below a 5.

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

template_archiveVorlage archivierenA
Destructive
Inspect

Archiviert eine Vorlage. Sie verschwindet aus den Listen und aus dem Versand, bleibt aber erhalten. Der Inhalt bleibt vollständig erhalten, und ein erneuter Aufruf ist unschädlich. 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.

NameRequiredDescriptionDefault
reasoningNo
templateIdYes

TDQS

A3.6/5.0
Behavior3/5

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

Adds real behavioral context: content preserved, removed from lists and sending, idempotent on re-invocation. But the destructiveHint=true annotation is not reconciled – the description emphasizes that nothing is lost, which an agent might read as non-destructive. No mention of permissions or required state.

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

Conciseness4/5

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

Duplicated DE/EN is slightly redundant but front-loads the core action and effect; each clause carries meaning about state and behavior.

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

Completeness3/5

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

No output schema, and while lifecycle behavior is covered, parameter meanings (especially reasoning) and the 'reason' field's purpose or the permission requirements are absent, leaving gaps against a mutation tool with 0% schema coverage.

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

Parameters3/5

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

Schema coverage is 0%, so the description should compensate, yet neither templateId nor the optional reasoning parameter is mentioned. The 'unschädlich/erneut aufrufen' sentence implies idempotency tied to templateId but gives no format or semantic detail.

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

Purpose5/5

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

Specific verb+resource ('Archiviert eine Vorlage' / 'Archives a template') and clearly distinguishes it from siblings like template_draft_discard by describing the effect (disappears from lists/sending but kept).

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

Usage Guidelines3/5

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

States the effect and that repeated calls are harmless, but never says when to archive versus discard or delete (e.g. template_draft_discard). Usage is only implied.

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.

NameRequiredDescriptionDefault
decisionYes
versionIdYes
templateIdYes

TDQS

B3.4/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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üfenA
Read-only
Inspect

Vergleicht deinen finalen Brief mit der Vorlage und zeigt dir, wo du abgewichen bist. Bei einer Blockvorlage übergibst 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.

NameRequiredDescriptionDefault
reasoningNo
versionIdNoOptional: bestimmte Version, sonst die freigegebene. EN: Optional: a specific version, otherwise the released one.
templateIdYesId der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get.
finalBlocksNoDeine finalen Blöcke, 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.
mergeFieldsNoZuordnung der Platzhalter-Namen zu Werten, z. B. { "provider": "Telekom" }. EN: Mapping of placeholder names to values, e.g. { "provider": "Telekom" }.
finalContentNoDein finaler Brieftext. Bei einem Blockbrief stattdessen finalBlocks. EN: Your final letter text. For a block letter use finalBlocks instead.
finalSubjectYesDein finaler Betreff. EN: Your final subject line.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this ('rein lesend' / read-only) while adding non-annotation value: the operation is free, texts are compared in reading order, and it is purely a comparison (no mutation). It stops short of noting pagination or output shape.

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

Conciseness4/5

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

Front-loads the core action ('Vergleicht deinen finalen Brief mit der Vorlage') and keeps each sentence purposeful within DE and EN. The bilingual duplication doubles length, but neither language version wastes words.

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

Completeness4/5

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

With no output schema and a moderate 7-param tool, the description covers the essential behavior: what is compared, the block-vs-content input mode, and that it is read-only/free. Return-format detail ('shows where you deviated') is thin but sufficient for a diff tool.

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

Parameters3/5

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

Schema coverage is high (86%), so the schema documents most parameters itself. The description clarifies the finalBlocks-vs-finalContent choice and the reading-order comparison semantics, but that overlap largely restates schema text, so it adds only marginal meaning. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb (compares) and resource (final letter vs. template) with a clear outcome (shows where you deviated). An agent can distinguish this from preview/apply siblings, though no sibling is named for contrast.

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

Usage Guidelines3/5

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

Gives a conditional routing rule ('Bei einer Blockvorlage übergibst du finalBlocks statt finalContent'), which is useful for choosing between input modes. However, it offers no when-to-use vs. alternatives (e.g. template_preview, template_apply_with_merge_fields) guidance, so selection context is only implied.

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

template_draft_discardVorlagenentwurf verwerfenA
Destructive
Inspect

Verwirft eine Entwurfsversion, solange sie noch auf ihre Freigabe wartet. Freigegebene und ersetzte Versionen bleiben unantastbar und vollständig erhalten. Ein erneuter Aufruf ist unschädlich. 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.

NameRequiredDescriptionDefault
reasoningNo
versionIdYesDie zu verwerfende Entwurfsversion. EN: The draft version to discard.
templateIdNoOptional. Bindet die Version zusätzlich an diese Vorlage. EN: Optional. Additionally pins the version to this template.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, and the description adds the crucial boundary that destruction is limited to unreleased drafts, leaving released/superseded intact. It also discloses idempotency, which the annotations do not. This is exactly the extra context the annotations can't carry.

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

Conciseness5/5

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

Bilingual but tightly structured: scope, preservation guarantee, idempotency, each earning its sentence. No padding.

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

Completeness5/5

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

For a single-required-param destructive mutation with no output schema, the description covers precondition, preservation of other states, and idempotency—everything needed to invoke safely.

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

Parameters3/5

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

Schema coverage is 67%; the required versionId is documented in the schema and description maps to 'the draft version to discard'. The optional templateId pinning semantics are only in the schema. Description adds little beyond the schema baseline, so a 3 is appropriate.

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

Purpose5/5

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

States a specific verb (discard/verwerfen) and resource (draft version) with the precise precondition 'while it is still waiting for its release'. This distinguishes it from template_archive, template_release, and template_save in the sibling list.

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

Usage Guidelines5/5

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

Explicitly scopes when the tool applies (only pending drafts) and when it does not (released and superseded versions stay untouchable). The 'harmless to call again' note tells the agent retry/idempotency behavior without further inference.

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

template_getVorlage abrufenA
Read-only
Inspect

Liefert eine einzelne Vorlage mit Betreff- und Inhaltsvorlage, den Merge-Feldern und der empfohlenen Freigabe-Voreinstellung. Eine Blockvorlage liefert zusätzlich blocksTemplate und styleDefs, sodass du sie kopieren, anpassen und mit template_save als eigenen Entwurf speichern kannst. Genau so fängt 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 prüfen 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.

NameRequiredDescriptionDefault
reasoningNo
versionIdNoOptional: eine bestimmte Version lesen, auch einen Entwurf. Braucht zusätzlich 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.
templateIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely useful context beyond them: reading a specific draft version additionally requires the template:write scope, and without versionId the released version is read. It also discloses the shape of the returned payload, though it omits any error or not-found behavior.

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

Conciseness4/5

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

Within each language the text is front-loaded and dense, with the return contents stated first and the workflow second. The main cost is that the entire content is duplicated in German and English, effectively doubling length, which trades conciseness for multilingual reach.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden well by enumerating the fields returned for standard vs. block templates and describing the conditional versionId read. An agent has enough to call the tool correctly and to know what comes back.

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

Parameters3/5

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

Schema coverage is only 33%: only versionId is documented in the schema, and the description largely restates its versionId/template:write semantics rather than expanding them. templateId and reasoning are undocumented in both places, though the description does frame templateId via curated templates from template_list. With low coverage, the description does not fully compensate for the un-described parameters.

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

Purpose5/5

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

The description gives a specific verb (returns/reads a single template) and enumerates exactly what is returned: subject and content template, merge fields, the recommended approval default, plus blocksTemplate and styleDefs for block templates. It is clearly distinguishable from template_list (curated discovery) and template_apply_with_merge_fields (filling placeholders).

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

Usage Guidelines5/5

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

It lays out the full crafting loop with named alternatives and their order: template_get on a curated template, edit blocksTemplate, letter_preview, template_save, template_preview, template_release. It also names the explicit next step, template_apply_with_merge_fields, and explains the versionId variant. When-to-use is fully specified rather than inferred.

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

template_listVorlagen auflistenA
Read-only
Inspect

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 trägt statt Fließtext. Nächster Schritt: template_get liefert eine Vorlage vollständig (bei einer Blockvorlage inklusive blocksTemplate und styleDefs zum Kopieren und Anpassen), template_apply_with_merge_fields füllt 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.

NameRequiredDescriptionDefault
limitNoStandard 20, maximal 100. EN: Default 20, maximum 100.
offsetNoVersatz für die Seitennavigation. Standard 0. EN: Offset for pagination. Default 0.
reasoningNo
statusFilterNoreleased (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
kategorieFilterNo

TDQS

A4/5.0
Behavior4/5

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 genuinely useful behavior beyond that: the default released-only filter, the scope requirement for drafts, and the meaning of the curated and hasBlocks flags in each entry. It does not cover pagination behavior or result volume, keeping it below 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.

Conciseness3/5

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

Front-loaded and informative, but the full German text is duplicated verbatim in English, roughly doubling the length for no added meaning. The 'search for template_list if your client defers tools' aside is defensive noise. The content earns its place individually, but the redundant duplication costs it.

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

Completeness4/5

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

There is no output schema, and the description usefully explains what each returned entry contains (curated, hasBlocks, category, version, placeholders), which compensates well. Scope requirements and next steps are covered. Minor gaps remain around pagination and result limits, so it is not fully complete.

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

Parameters3/5

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

Schema coverage is 60%, with limit, offset and statusFilter already well documented in the schema, including the template:write scope note that the description largely repeats. kategorieFilter and reasoning have no schema description and the prose does not compensate for them either. Baseline 3 is appropriate when the schema carries most of the load.

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

Purpose5/5

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

States a specific verb and resource ('Listet die verfügbaren Brief-Vorlagen') and enumerates the occasions covered (Kündigung, Rechnung, Mahnung, Angebot, Vertrag, Behördenpost). It also names the sibling tools it feeds into (template_get, template_apply_with_merge_fields), so an agent can place it precisely in the template workflow without opening a schema.

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

Usage Guidelines4/5

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

Explains the default behavior (only released templates) and the condition that widens it (statusFilter plus the template:write scope for drafts), and points to the logical next steps. It gives clear context for use but does not frame explicit when-not-to-use cases (e.g. versus a search tool), so it falls 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.

template_page_urls_appBildlinks der Vorlagen-Karte erneuernA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
versionIdNo
templateIdYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 ansehenA
Read-only
Inspect

Rendert eine GESPEICHERTE Vorlage mit Beispielwerten und liefert Inline-PNGs, PDF-Link und designRender. designId oder ein ungespeichertes design bestimmen das Briefpapier; für eigenständige Formulare documentMode: "form" setzen. Die Vorschau bleibt kostenfrei und rein zum Ansehen. Für 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.

NameRequiredDescriptionDefault
pagesNoWie viele Seiten als Bild zurückkommen. Standard 1, Maximum 3. EN: How many pages come back as images. Default 1, maximum 3.
designNoUngespeichertes Briefdesign nur für diese Vorschau. Für Formulare documentMode: "form" setzen. EN: Unsaved letter design for this preview only. Set documentMode: "form" for forms.
designIdNoGespeichertes Briefdesign für diese Vorlagenvorschau. EN: Saved letter design for this template preview.
reasoningNo
versionIdNoExakte Vorlagenversion, die geprüft 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.
templateIdYesId der Vorlage aus template_list / template_get. EN: The template ID from template_list / template_get.
designVersionIdNoExakte unveränderliche Briefkopf-Version für diese Vorschau. EN: Exact immutable letterhead version for this preview.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive=false/openWorld=false, but the description adds real behavioral context: the preview is free of charge, is purely for viewing, and what it returns (inline PNGs, PDF link, designRender). It still omits auth prerequisites or rate limits, so it is not fully exhaustive.

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

Conciseness3/5

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

Content is front-loaded and well ordered, but the entire description is duplicated in German and English, roughly doubling the length. The trailing sentence about searching for the technical name template_save is confusing noise that costs space without helping selection.

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

Completeness4/5

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

For a 7-parameter, nested-schema tool with no output schema, the description covers purpose, alternatives, and the key parameter interactions, and it names the return artifacts. Remaining omissions are minor given that the structured schema carries most parameter detail.

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

Parameters4/5

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

Schema coverage is 86%, so the baseline is 3, but the description adds genuine meaning: how designId versus an unsaved design selects the stationery and that documentMode must be "form" for standalone forms. These relationships go beyond the field-level text.

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

Purpose5/5

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

States a specific verb+resource+scope: renders a STORED template with sample values. It also enumerates the outputs (inline PNGs, PDF link, designRender) and explicitly contrasts with letter_preview and template_save, so an agent can distinguish it from siblings without opening any schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use letter_preview for a blocks layout still in progress, call template_save to persist a finished version, and set documentMode: "form" for standalone forms. It names both alternatives and the condition that selects each.

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, gehört die Freigabe dem Menschen. Rufe template_release dann nur auf, wenn die Person dich ausdrücklich darum bittet, und sage in jedem Fall klar dazu, dass du selbst freigegeben hast. Das geht über 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 enthält den Link dorthin. Danach: template_apply_with_merge_fields füllt 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.

NameRequiredDescriptionDefault
reasoningNo
versionIdYesDie freizugebende Entwurfsversion. EN: The draft version to release.
templateIdYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only reveal this is a non-read-only, non-destructive, closed-world mutation. The description adds far more: the single-active-user requirement for MCP release, the four-eyes principle for multi-user accounts, the human-approval-card gate, the obligation to disclose that the agent released it itself, and the fact that the multi-user response carries a dashboard link. This is exactly the behavioral context annotations cannot convey.

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

Conciseness3/5

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

Purpose and the critical human-in-loop warning are front-loaded, and the sequencing sentences all earn their place. However, the entire passage is duplicated verbatim in German and English, roughly doubling length with no added information for a reader who understands either language.

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

Completeness5/5

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

For a state-changing approval tool with no output schema, the description covers prerequisites (single active user), the human-in-the-loop gate, the fallback path (dashboard link in the response), required disclosure behavior, and the logical next steps — enough for an agent to call it correctly and safely.

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

Parameters2/5

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

Schema coverage is only 33% (only versionId is documented), yet the description adds no parameter-level meaning. templateId is never explained (implied only by 'Vorlage'), and reasoning is left entirely undocumented despite being a likely audit/justification field for a release action. With low coverage the description should compensate but does not.

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

Purpose5/5

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

States a specific verb+resource ('Gibt eine Entwurfsversion frei, sodass sie versendet werden kann') and explicitly positions it as the last step of the crafting chain, listing the sibling tools (template_get, template_save, template_preview, etc.) around it. An agent can distinguish it from template_preview, template_save, and template_apply_with_merge_fields without opening any schema.

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

Usage Guidelines5/5

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

Explicit when/when-not: call only when the person explicitly asks, only when the approval card is not open (it belongs to the human then), and note that with multiple users release happens in the dashboard. It also names the alternative mechanism (approval card / dashboard) and the downstream tools to use afterward.

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 aufgelöst und bleiben außerhalb der Vorlage. designId bleibt nur als veralteter Hinweis zur Ableitung der Dokumentart kompatibel; explizites documentKind gewinnt. Ein Formular darf eigenständig gespeichert werden. coverTemplateId kann eine Anschreibenversion für ein Paket pinnen. Lässt du templateId weg, entsteht eine neue Vorlage; mit templateId eine neue Entwurfsversion. Der Entwurf ist erst nach der Freigabe nutzbar; die Antwort enthält den Prüflink. Falls das Tool fehlt, suche exakt nach dem technischen Namen template_save. Der Vorlageninhalt ist entweder contentTemplate (Fließtext) ODER blocksTemplate (strukturiert: Tabellen, Überschriften, Summenzeilen), genau eines von beiden. Merge-Felder sind typisiert (text, date, number, currency, rows); ein Tabellenblock bindet eine rows-Liste über rowsFrom. Kopiere am schnellsten eine Standardvorlage mit template_get und passe sie an. Vor dem Speichern: mit letter_preview rendern und Seite für Seite vergleichen. Speichere erst, wenn Seitenzahl und wesentliche Geometrie beim Nachbau zum Original passen. Eigenständige Formulare zuerst mit einem design im documentMode "form" prüfen. 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.

NameRequiredDescriptionDefault
nameYesName der Vorlage. EN: Name of the template.
designIdNoVeralteter 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.
kategorieNoFachliche Kategorie, z.B. kuendigung (der Wert ist ein Schlüssel und bleibt so geschrieben). EN: Subject category, e.g. kuendigung (termination).
reasoningNo
styleDefsNoBenannte Stile der Blockvorlage. Nur zusammen mit blocksTemplate. EN: Named styles of the block template. Only together with blocksTemplate. Benannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide.
templateIdNoBestehende 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.
clearDesignNoVeralteter kompatibler Autor-Hinweis. Es gibt keine Design-Bindung an neuen Vorlagenversionen. EN: Deprecated compatibility authoring hint. New template versions have no design binding.
mergeFieldsNoDie Platzhalter der Vorlage. EN: The placeholders of the template.
documentKindNoUnverä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.
blocksTemplateNoStrukturierte Inhaltsvorlage (Tabellen, Überschriften, Summenzeilen). Textfelder dürfen {{platzhalter}} enthalten; ein Tabellenblock kann mit rowsFrom: "<schlüssel>" 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 Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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.
contentTemplateNoInhaltsvorlage als Fließtext, darf {{platzhalter}} enthalten. Entweder contentTemplate ODER blocksTemplate. EN: Content template as plain text, may contain {{placeholders}}. Either contentTemplate OR blocksTemplate.
coverTemplateIdNoDeckvorlage für ein Formular ohne Empfängerblock. 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.
subjectTemplateYesBetreffvorlage, darf {{platzhalter}} enthalten. EN: Subject template, may contain {{placeholders}}.
clearCoverTemplateNoEntfernt 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.
approvalModeRecommendedNoEmpfohlener Freigabemodus für Briefe aus dieser Vorlage. EN: Recommended approval mode for letters from this template.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare the generic safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds non-obvious behaviour the agent could not infer: the draft must be released before use, the response carries a review link, letterhead/brand stay external until preview/send, designId is a deprecated hint that documentKind overrides, and content must be exactly one of contentTemplate/blocksTemplate.

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

Conciseness3/5

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

Purpose and constraints are front-loaded, but the text is roughly doubled by full German/English duplication and an opening synonym list ('Vorlage speichern, Vorlagenversion speichern, Vorlagenentwurf anlegen, Template sichern'). Many of the later sentences (merge-field typing, block limits) repeat what the schema properties already state, so a meaningful share of the length does not earn its place.

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

Completeness5/5

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

With 15 parameters, nested objects, two enums and no output schema, this is a high-complexity tool and the description covers the essentials: draft lifecycle, the required contentTemplate/blocksTemplate choice, merge-field typing and rowsFrom binding, version semantics, and a pre-save validation workflow via letter_preview.

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

Parameters4/5

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

Schema coverage is 93%, so the baseline is 3, but the description adds real semantics the schema does not enforce: the mutual exclusion of contentTemplate vs blocksTemplate ('genau eines von beiden'), the inheritance rule for coverTemplateId/clearCoverTemplate, and the templateId-absent-vs-present behaviour for creating a new template versus a new draft version. It slightly restates a few schema fields, so not a full 5.

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

Purpose5/5

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

States a specific verb and resource — 'Verfasst eine Vorlage als ENTWURF' / 'writes a template as a DRAFT' — and immediately scopes it to the draft state, distinguishing it from siblings like template_release, template_preview and template_apply_with_merge_fields. It also names the technical name template_save explicitly, so an agent can confirm identity without opening the schema.

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

Usage Guidelines5/5

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

Gives concrete when/when-not and alternatives: copy a standard template via template_get first, render with letter_preview and compare page by page before saving, and preview standalone forms with a design in documentMode 'form'. It also states that a draft is only usable after release, effectively routing the agent to template_release.

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

template_status_appVorlagenstand für die Karte lesenB
Read-only
Inspect

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.

NameRequiredDescriptionDefault
versionIdNo
templateIdYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the rationale (an old card needs to render the correct end state), which gives genuine context for why this read exists separately from template_get, but no auth, rate-limit, or freshness/staleness behavior is disclosed.

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

Conciseness3/5

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

The substantive content is one sentence, front-loaded with the scope restriction, which is good. But the bilingual German/English duplication doubles the length without adding information, which is wasteful for a description this short.

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

Completeness2/5

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

With no output schema and 0% parameter coverage, the description needed to carry the burden of explaining the two identifiers and what state is returned. It explains neither, leaving the agent unsure what versionId does or what 'state' means in the response.

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

Parameters2/5

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

Schema description coverage is 0% and neither of the two UUID parameters is explained anywhere. The phrase 'state of a template version' hints that versionId selects the version, but the required/optional split (templateId required, versionId optional) and the interaction between them are never disambiguated.

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

Purpose4/5

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

States a specific verb and resource: reads the current state of a template version. The scope qualifier ('for the interactive template card only') distinguishes it from the many other template_* siblings such as template_get and template_preview, though it doesn't explicitly name a sibling tool.

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

Usage Guidelines3/5

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

The 'nur fuer die interaktive Vorlagen-Karte' restriction implies when this is and is not appropriate, which is useful routing. However no alternative is named, so an agent must infer that template_get/template_list cover non-card use cases.

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

wallet_balanceWallet-Guthaben abrufenA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
reasoningNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

The description opens with a specific verb ('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.

Usage Guidelines5/5

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 25 tool updates
    • Changedanalytics_summary2 fields changed
      • changedInput schema / properties / months / description
        Previous value: -"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."New value: +"Trendlänge für 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."
      • changedInput schema / properties / since / description
        Previous value: -"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."New value: +"Zeitraumbeginn für 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."
    • Changedapproval_submit3 fields changed
      • changedInput schema / properties / clientOrderId / description
        Previous value: -"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."New value: +"Idempotenzschlüssel. Ein erneuter Aufruf mit demselben Wert liefert dieselbe Freigabe, statt ein zweites Mal einzureichen. Der Präfix '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."
      • changedInput schema / properties / maxCostEuros / description
        Previous value: -"Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted."New value: +"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."
      • changedInput schema / properties / reason / description
        Previous value: -"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."New value: +"Kurzer Grund für die Freigabe, den die prüfende Person auf der Karte liest. EN: Short reason for the approval, shown to the reviewer on the card."
    • Changedbrand_import_from_website2 fields changed
      • changedInput schema / properties / reasoning / description
        Previous value: -"Kurze Begruendung fuer das Audit-Protokoll. EN: Short rationale for the audit log."New value: +"Kurze Begründung für das Audit-Protokoll. EN: Short rationale for the audit log."
      • changedInput schema / properties / websiteUrl / description
        Previous value: -"Oeffentliche Adresse der Firmenwebsite, zum Beispiel https://beispiel.de. EN: Public company website address."New value: +"Öffentliche Adresse der Firmenwebsite, zum Beispiel https://beispiel.de. EN: Public company website address."
    • Changedbrand_kit_save1 field changed
      • changedInput schema / properties / brandingOwnershipConfirmed / description
        Previous value: -"Bestaetigt die Nutzungsrechte an Logo und eigener Schrift. Muss true sein. EN: Confirms usage rights for the logo and custom font. Must be true."New value: +"Bestätigt die Nutzungsrechte an Logo und eigener Schrift. Muss true sein. EN: Confirms usage rights for the logo and custom font. Must be true."
    • Changeddocument_create10 fields changed
      • changedInput schema / properties / clientLetterId / description
        Previous value: -"Idempotenzschluessel fuer den Briefentwurf. EN: idempotency key for the letter draft."New value: +"Idempotenzschlüssel für den Briefentwurf. EN: idempotency key for the letter draft."
      • changedInput schema / properties / document / description
        Previous value: -"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."New value: +"Die Belegdaten. Alle Beträge 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."
      • changedInput schema / properties / document / properties / kleinunternehmerParagraph19 / description
        Previous value: -"§19 UStG Kleinunternehmer: keine USt-Zeile, Brutto gleich Netto, Pflichthinweis wird ergaenzt. EN: German small-business rule: no VAT line, gross equals net, the mandatory note is added."New value: +"§19 UStG Kleinunternehmer: keine USt-Zeile, Brutto gleich Netto, Pflichthinweis wird ergänzt. EN: German small-business rule: no VAT line, gross equals net, the mandatory note is added."
      • changedInput schema / properties / document / properties / lineItems / items / properties / quantity / description
        Previous value: -"Menge, hoechstens 3 Nachkommastellen. EN: quantity, at most 3 decimals."New value: +"Menge, höchstens 3 Nachkommastellen. EN: quantity, at most 3 decimals."
      • changedInput schema / properties / document / properties / numberFromSequence / description
        Previous value: -"true = FrankKi zieht die naechste Nummer aus deinem Nummernkreis. Dann documentNumber weglassen. EN: true = FrankKi draws the next number from your sequence; omit documentNumber then."New value: +"true = FrankKi zieht die nächste Nummer aus deinem Nummernkreis. Dann documentNumber weglassen. EN: true = FrankKi draws the next number from your sequence; omit documentNumber then."
      • changedInput schema / properties / document / properties / references / description
        Previous value: -"Bezug auf ein frueheres Dokument. documentId fuer ein Dokument aus FrankKi, documentNumber fuer einen Fremdbeleg. EN: reference to a prior document."New value: +"Bezug auf ein früheres Dokument. documentId für ein Dokument aus FrankKi, documentNumber für einen Fremdbeleg. EN: reference to a prior document."
      • changedInput schema / properties / document / properties / references / properties / zahlungszielDatum / description
        Previous value: -"Zahlungsziel des Bezugsbelegs, also seit wann die Forderung offen ist. Wird auf Mahnung und Zahlungserinnerung als \"Zahlungsziel ueberschritten seit\" gedruckt. EN: due date of the referenced document, printed on a dunning letter or reminder as the date since when the claim is overdue."New value: +"Zahlungsziel des Bezugsbelegs, also seit wann die Forderung offen ist. Wird auf Mahnung und Zahlungserinnerung als \"Zahlungsziel überschritten seit\" gedruckt. EN: due date of the referenced document, printed on a dunning letter or reminder as the date since when the claim is overdue."
      • changedInput schema / properties / document / properties / totals / properties / extraLines / description
        Previous value: -"Freie Zeilen unter dem Bruttobetrag. Geprueft wird nur die Rechnung, die die Zeile selbst behauptet. EN: free-form lines below the gross total, checked only for the arithmetic the line itself claims."New value: +"Freie Zeilen unter dem Bruttobetrag. Geprüft wird nur die Rechnung, die die Zeile selbst behauptet. EN: free-form lines below the gross total, checked only for the arithmetic the line itself claims."
      • changedInput schema / properties / mandantennummer / description
        Previous value: -"Mandant, dem das Dokument zugeordnet wird. Nur Zuordnung fuer Liste und Auswertung. EN: client this document is filed under. Filing only."New value: +"Mandant, dem das Dokument zugeordnet wird. Nur Zuordnung für Liste und Auswertung. EN: client this document is filed under. Filing only."
      • changedInput schema / properties / recipientAddressId / description
        Previous value: -"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."New value: +"Empfänger aus deinem Adressbuch (address_list / mandant_search liefern die id). Entweder das oder recipientAddressInline. EN: recipient from your address book. Either this or recipientAddressInline."
    • Changedletter_create_draft7 fields changed
      • changedInput schema / properties / blocks / description
        Previous value: -"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."New value: +"Strukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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."
      • changedInput schema / properties / clientLetterId / description
        Previous value: -"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."New value: +"Idempotenzschlüssel. Ein erneuter Aufruf mit demselben Wert UND derselben Nutzlast liefert denselben Entwurf, statt einen zweiten anzulegen. Für einen anderen Brief brauchst du einen neuen Schlüssel: derselbe Schlüssel mit anderem Inhalt wird mit IDEMPOTENCY_CONFLICT abgelehnt, damit du keinen Brief für angelegt hältst, 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."
      • changedInput schema / properties / content / description
        Previous value: -"Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."New value: +"Brieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."
      • changedInput schema / properties / designId / description
        Previous value: -"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."New value: +"Ein gespeichertes Briefdesign für diesen Brief verwenden. Es wird bereits in der Vorschau-PDF gerendert und am Entwurf gespeichert, sodass ein späterer Versand über die letterId es übernimmt (außer 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."
      • changedInput schema / properties / reference / description
        Previous value: -"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."New value: +"Werte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode."
      • changedInput schema / properties / senderProfileId / description
        Previous value: -"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."New value: +"Absenderprofil, mit dem später versendet wird. Für die Vorschau zählt 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."
      • changedInput schema / properties / styleDefs / description
        Previous value: -"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."New value: +"Benannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide."
    • Changedletter_design_delete1 field changed
      • changedInput schema / properties / designId / description
        Previous value: -"Das zu loeschende Briefdesign. EN: The letter design to delete."New value: +"Das zu löschende Briefdesign. EN: The letter design to delete."
    • Changedletter_design_list1 field changed
      • changedInput schema / properties / includeArchived / description
        Previous value: -"Auch archivierte (geloeschte) Designs einschliessen. Standard false. EN: Include archived (deleted) designs too. Defaults to false."New value: +"Auch archivierte (gelöschte) Designs einschließen. Standard false. EN: Include archived (deleted) designs too. Defaults to false."
    • Changedletter_design_list_presets1 field changed
      • changedInput schema / properties / presetId / description
        Previous value: -"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."New value: +"Optional: genau eine Vorlage samt gerenderter Vorschau laden. Ohne presetId bleibt die Liste bildfrei und günstig. EN: Optional: load one preset with its rendered preview. Without presetId the list stays image-free and cheap."
    • Changedletter_design_preview2 fields changed
      • changedInput schema / properties / pages / description
        Previous value: -"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."New value: +"Standard ist nur Seite 1. Seite 2 wird ausschließlich bei continuationHeader geliefert. EN: The default is page 1 only. Page 2 is returned only for continuationHeader."
      • changedInput schema / properties / sampleVariant / description
        Previous value: -"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."New value: +"typical zeigt eine vollständige Beispielseite, an der du Lesbarkeit und Rhythmus beurteilst. empty zeigt das Briefpapier allein: Kopf und Fuß stehen echt, die Textfläche 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."
    • Changedletter_design_save1 field changed
      • changedInput schema / properties / brandingOwnershipConfirmed / description
        Previous value: -"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."New value: +"Bei einer Neuanlage oder geänderten Branding-Asset-Referenz zwingend true. Unveränderte Folgespeicherungen brauchen keine erneute Bestätigung. EN: Required as true when creating or changing a branding asset reference. Unchanged iterative saves need no renewed confirmation."
    • Changedletter_preview8 fields changed
      • changedInput schema / properties / blocks / description
        Previous value: -"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."New value: +"Strukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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."
      • changedInput schema / properties / content / description
        Previous value: -"Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."New value: +"Brieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."
      • changedInput schema / properties / design / description
        Previous value: -"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."New value: +"Ungespeichertes Briefdesign nur für diese Vorschau. Hat Vorrang vor designId und erzeugt keinen Eintrag im Konto. Für eigenständige 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."
      • changedInput schema / properties / designId / description
        Previous value: -"Ein gespeichertes Briefdesign fuer diese Vorschau verwenden. EN: Use a saved letter design for this preview."New value: +"Ein gespeichertes Briefdesign für diese Vorschau verwenden. EN: Use a saved letter design for this preview."
      • changedInput schema / properties / pages / description
        Previous value: -"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."New value: +"Wie viele Seiten als Bild zurückkommen. Standard 3, Maximum 8. Der PDF-Link enthält immer alle Seiten. EN: How many pages come back as images. Default 3, maximum 8. The PDF link always contains every page."
      • changedInput schema / properties / reference / description
        Previous value: -"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."New value: +"Werte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen 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."
      • changedInput schema / properties / resolution / description
        Previous value: -"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)."New value: +"thumb (96 dpi, Standard, schnell und klein) oder full (150 dpi, zum Prüfen von Details). EN: thumb (96 dpi, default, fast and small) or full (150 dpi, for checking details)."
      • changedInput schema / properties / styleDefs / description
        Previous value: -"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."New value: +"Benannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide."
    • Changedorder_fix_resubmit1 field changed
      • changedInput schema / properties / recipient / description
        Previous value: -"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."New value: +"Die korrigierte Empfängeradresse 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."
    • Changedorder_send13 fields changed
      • changedInput schema / properties / approvalMode / description
        Previous value: -"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."New value: +"Wie der Versand freigegeben wird. 'draft' und 'review' stellen ihn in die Freigabe-Warteschlange, statt sofort zu versenden. 'auto' wird derzeit genauso behandelt wie 'review': der Brief wartet auf die Freigabe durch einen Menschen. Mit einem Test-Token läuft jeder Modus als Probe. Wichtig: auch diese beiden reservieren den Betrag beim Einreichen im Wallet, damit ein freigegebener Brief später nicht am Guthaben scheitert. Ohne Deckung kommt INSUFFICIENT_FUNDS zurück 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. 'auto' is currently treated exactly like 'review': the letter waits for a person to approve it. With a test token every mode runs as a rehearsal. 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."
      • changedInput schema / properties / blocks / description
        Previous value: -"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."New value: +"Strukturierter Briefinhalt als typisierte Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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."
      • changedInput schema / properties / clientOrderId / description
        Previous value: -"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."New value: +"Idempotenzschlüssel: eine beliebige Zeichenkette (1-200 Zeichen, z. B. 'mahnung-kunde42-2026-07-20'; kein UUID-Format nötig). 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."
      • changedInput schema / properties / content / description
        Previous value: -"Brieftext als Fliesstext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."New value: +"Brieftext als Fließtext. Entweder content ODER blocks, nie beides. EN: letter body as plain text. Either content OR blocks, never both."
      • changedInput schema / properties / design / description
        Previous value: -"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."New value: +"Exakter Briefdesign-Snapshot aus template_apply_with_merge_fields.composition.design. Hat Vorrang vor designId und verhindert, dass eine spätere Designänderung die freigegebene Vorlagenkomposition verändert. 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."
      • changedInput schema / properties / designId / description
        Previous value: -"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."New value: +"Ein gespeichertes Briefdesign für diesen Versand verwenden. Ohne Angabe gilt in dieser Reihenfolge: das am Entwurf gespeicherte Design (beim Versand über 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."
      • changedInput schema / properties / letterheadEnabled / description
        Previous value: -"Auf false setzen, um den Briefkopf fuer diesen einen Versand zu unterdruecken. EN: Set to false to suppress the letterhead for this one send."New value: +"Auf false setzen, um den Briefkopf für diesen einen Versand zu unterdrücken. EN: Set to false to suppress the letterhead for this one send."
      • changedInput schema / properties / letterheadId / description
        Previous value: -"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."New value: +"Bestimmter Briefkopf für diesen Versand. Ohne Angabe wird der Standard-Briefkopf verwendet. EN: A specific letterhead for this send. If omitted, the default letterhead is used."
      • changedInput schema / properties / maxCostEuros / description
        Previous value: -"Maximalbetrag in Euro. Liegt der Preis darueber, wird abgebrochen. EN: Maximum amount in euros. If the price is above it, the call is aborted."New value: +"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."
      • changedInput schema / properties / quotedUnitPriceCents / description
        Previous value: -"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."New value: +"Optional: der Stückpreis 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."
      • changedInput schema / properties / reference / description
        Previous value: -"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."New value: +"Werte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode."
      • changedInput schema / properties / styleDefs / description
        Previous value: -"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."New value: +"Benannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide."
      • changedInput schema / properties / templateMergeValues / description
        Previous value: -"Merge-Werte fuer die exakte Vorlagenversion. EN: Merge values for the exact template version."New value: +"Merge-Werte für die exakte Vorlagenversion. EN: Merge values for the exact template version."
    • Changedorder_send_batch9 fields changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"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."New value: +"Simuliert den ganzen Stapel: prüft jeden Eintrag, berechnet aber nichts und versendet nichts. EN: Simulates the whole batch: validates each entry but charges nothing and sends nothing."
      • changedInput schema / properties / items / description
        Previous value: -"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."New value: +"Liste der Briefe im Stapel. Jeder Eintrag trägt 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."
      • changedInput schema / properties / items / items / properties / clientOrderId / description
        Previous value: -"Idempotenzschluessel pro Eintrag: eine beliebige Zeichenkette (1-200 Zeichen; 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 per entry: any string (1-200 characters; 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."New value: +"Idempotenzschlüssel pro Eintrag: eine beliebige Zeichenkette (1-200 Zeichen; kein UUID-Format nötig). Ein erneuter Aufruf mit demselben Wert liefert dieselbe Bestellung, statt ein zweites Mal zu versenden. Der Namensraum 'approval:' ist reserviert. EN: Idempotency key per entry: any string (1-200 characters; 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."
      • changedInput schema / properties / items / items / properties / designId / description
        Previous value: -"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."New value: +"Ein gespeichertes Briefdesign für diesen Versand verwenden. Ohne Angabe gilt in dieser Reihenfolge: das am Entwurf gespeicherte Design (beim Versand über 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."
      • changedInput schema / properties / items / items / properties / priceVersion / description
        Previous value: -"Optional: die priceVersion aus einem vorherigen shipping_quote fuer diesen Eintrag. EN: Optional: the priceVersion from an earlier shipping_quote for this entry."New value: +"Optional: die priceVersion aus einem vorherigen shipping_quote für diesen Eintrag. EN: Optional: the priceVersion from an earlier shipping_quote for this entry."
      • changedInput schema / properties / items / items / properties / quotedUnitPriceCents / description
        Previous value: -"Optional: der Stueckpreis in Cent aus einem vorherigen shipping_quote (unitPriceCents) fuer diesen Eintrag. Entscheidet den PRICE_CHANGED-Abgleich. EN: Optional: the unit price in cents from an earlier shipping_quote (unitPriceCents) for this entry. It decides the PRICE_CHANGED comparison."New value: +"Optional: der Stückpreis in Cent aus einem vorherigen shipping_quote (unitPriceCents) für diesen Eintrag. Entscheidet den PRICE_CHANGED-Abgleich. EN: Optional: the unit price in cents from an earlier shipping_quote (unitPriceCents) for this entry. It decides the PRICE_CHANGED comparison."
      • changedInput schema / properties / items / items / properties / reference / description
        Previous value: -"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."New value: +"Werte für diesen Brief (Vorgangsnummer, Ihr Zeichen, Kundennummer, QR-Parameter ...). Sie füllen den Infoblock und den Barcode. EN: Per-letter values (Vorgangsnummer, your reference, customer number, QR parameters ...). They fill the info block and the barcode."
      • changedInput schema / properties / items / items / properties / templateMergeFields / description
        Previous value: -"Merge-Felder fuer ein Template. EN: Merge fields for a template."New value: +"Merge-Felder für ein Template. EN: Merge fields for a template."
      • changedInput schema / properties / presetName / description
        Previous value: -"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."New value: +"Optionales Preset für den ganzen Stapel; pro Eintrag überschreibbar ist nicht vorgesehen. EN: Optional preset for the whole batch; per-entry override is not supported."
    • Changedsender_profile_upsert3 fields changed
      • changedInput schema / properties / bankverbindung / description
        Previous value: -"Optionale Bankverbindung, unabhaengig von der Vollstaendigkeit. EN: Optional bank details, independent of completeness."New value: +"Optionale Bankverbindung, unabhängig von der Vollständigkeit. EN: Optional bank details, independent of completeness."
      • changedInput schema / properties / defaultDesignId / description
        Previous value: -"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."New value: +"Briefpapier für Briefe, die selbst keines nennen. Weglassen behält den Wert, null löscht ihn. EN: Letterhead for letters naming none. Omitting keeps the value, null clears it."
      • changedInput schema / properties / disclaimer / description
        Previous value: -"Optionaler Haftungsausschluss oder Fusszeilentext, unabhaengig von der Vollstaendigkeit. EN: Optional disclaimer or footer, independent of completeness."New value: +"Optionaler Haftungsausschluss oder Fußzeilentext, unabhängig von der Vollständigkeit. EN: Optional disclaimer or footer, independent of completeness."
    • Changedsetup_fix_link1 field changed
      • changedInput schema / properties / gap / description
        Previous value: -"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)."New value: +"Welcher Punkt übergeben wird: wallet (Guthaben), avv (Auftragsverarbeitungsvertrag) oder senderProfile (Absender-Profil). EN: Which item is handed over: wallet (balance), avv (data processing agreement) or senderProfile (sender profile)."
    • Changedshipping_quote3 fields changed
      • changedInput schema / properties / color / description
        Previous value: -"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."New value: +"Farbannahme für eine allgemeine Schätzung. 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."
      • changedInput schema / properties / letterId / description
        Previous value: -"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."New value: +"Optional: die letterId eines bestehenden Entwurfs. Dann kommen Seitenzahl und Farbe aus der gespeicherten Vorschau; für den endgültigen Preis inklusive Anhängen 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."
      • changedInput schema / properties / pageCount / description
        Previous value: -"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."New value: +"Seitenzahl für eine allgemeine Schätzung. 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."
    • Changedtemplate_apply_with_merge_fields2 fields changed
      • changedInput schema / properties / language / description
        Previous value: -"Sprache fuer die Formatierung von Betrag und Datum. Standard de. EN: Language for money and date formatting. Defaults to de."New value: +"Sprache für die Formatierung von Betrag und Datum. Standard de. EN: Language for money and date formatting. Defaults to de."
      • changedInput schema / properties / mergeValues / description
        Previous value: -"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."New value: +"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 Spaltenschlüsseln 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."
    • Changedtemplate_diff_check1 field changed
      • changedInput schema / properties / finalBlocks / description
        Previous value: -"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."New value: +"Deine finalen Blöcke, 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."
    • Changedtemplate_draft_discard1 field changed
      • changedInput schema / properties / templateId / description
        Previous value: -"Optional. Bindet die Version zusaetzlich an diese Vorlage. EN: Optional. Additionally pins the version to this template."New value: +"Optional. Bindet die Version zusätzlich an diese Vorlage. EN: Optional. Additionally pins the version to this template."
    • Changedtemplate_get1 field changed
      • changedInput schema / properties / versionId / description
        Previous value: -"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."New value: +"Optional: eine bestimmte Version lesen, auch einen Entwurf. Braucht zusätzlich 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."
    • Changedtemplate_preview4 fields changed
      • changedInput schema / properties / design / description
        Previous value: -"Ungespeichertes Briefdesign nur fuer diese Vorschau. Fuer Formulare documentMode: \"form\" setzen. EN: Unsaved letter design for this preview only. Set documentMode: \"form\" for forms."New value: +"Ungespeichertes Briefdesign nur für diese Vorschau. Für Formulare documentMode: \"form\" setzen. EN: Unsaved letter design for this preview only. Set documentMode: \"form\" for forms."
      • changedInput schema / properties / designId / description
        Previous value: -"Gespeichertes Briefdesign fuer diese Vorlagenvorschau. EN: Saved letter design for this template preview."New value: +"Gespeichertes Briefdesign für diese Vorlagenvorschau. EN: Saved letter design for this template preview."
      • changedInput schema / properties / pages / description
        Previous value: -"Wie viele Seiten als Bild zurueckkommen. Standard 1, Maximum 3. EN: How many pages come back as images. Default 1, maximum 3."New value: +"Wie viele Seiten als Bild zurückkommen. Standard 1, Maximum 3. EN: How many pages come back as images. Default 1, maximum 3."
      • changedInput schema / properties / versionId / description
        Previous value: -"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."New value: +"Exakte Vorlagenversion, die geprüft 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."
    • Changedtemplate_save8 fields changed
      • changedInput schema / properties / approvalModeRecommended / description
        Previous value: -"Empfohlener Freigabemodus fuer Briefe aus dieser Vorlage. EN: Recommended approval mode for letters from this template."New value: +"Empfohlener Freigabemodus für Briefe aus dieser Vorlage. EN: Recommended approval mode for letters from this template."
      • changedInput schema / properties / blocksTemplate / description
        Previous value: -"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."New value: +"Strukturierte Inhaltsvorlage (Tabellen, Überschriften, Summenzeilen). Textfelder dürfen {{platzhalter}} enthalten; ein Tabellenblock kann mit rowsFrom: \"<schlüssel>\" 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 Blöcke (Alternative zu content, nie beides). Limits: 200 Blöcke, 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."
      • changedInput schema / properties / contentTemplate / description
        Previous value: -"Inhaltsvorlage als Fliesstext, darf {{platzhalter}} enthalten. Entweder contentTemplate ODER blocksTemplate. EN: Content template as plain text, may contain {{placeholders}}. Either contentTemplate OR blocksTemplate."New value: +"Inhaltsvorlage als Fließtext, darf {{platzhalter}} enthalten. Entweder contentTemplate ODER blocksTemplate. EN: Content template as plain text, may contain {{placeholders}}. Either contentTemplate OR blocksTemplate."
      • changedInput schema / properties / coverTemplateId / description
        Previous value: -"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."New value: +"Deckvorlage für ein Formular ohne Empfängerblock. 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."
      • changedInput schema / properties / kategorie / description
        Previous value: -"Fachliche Kategorie, z.B. kuendigung. EN: Subject category, e.g. kuendigung (termination)."New value: +"Fachliche Kategorie, z.B. kuendigung (der Wert ist ein Schlüssel und bleibt so geschrieben). EN: Subject category, e.g. kuendigung (termination)."
      • changedInput schema / properties / mergeFields / items / properties / key / description
        Previous value: -"Der {{token}}-Schluessel, nur Buchstaben, Ziffern und Unterstrich. EN: The {{token}} key, letters, digits and underscore only."New value: +"Der {{token}}-Schlüssel, nur Buchstaben, Ziffern und Unterstrich. EN: The {{token}} key, letters, digits and underscore only."
      • changedInput schema / properties / mergeFields / items / properties / type / description
        Previous value: -"text (Standard), date (ISO JJJJ-MM-TT), number, currency (ganzzahlige Cent) oder rows (Zeilenliste fuer einen Tabellenblock mit rowsFrom). Der Typ wird beim Anwenden geprueft und sprachrichtig formatiert. EN: text (default), date (ISO YYYY-MM-DD), number, currency (integer cents) or rows (row list for a table block with rowsFrom). The type is validated on apply and formatted per language."New value: +"text (Standard), date (ISO JJJJ-MM-TT), number, currency (ganzzahlige Cent) oder rows (Zeilenliste für einen Tabellenblock mit rowsFrom). Der Typ wird beim Anwenden geprüft und sprachrichtig formatiert. EN: text (default), date (ISO YYYY-MM-DD), number, currency (integer cents) or rows (row list for a table block with rowsFrom). The type is validated on apply and formatted per language."
      • changedInput schema / properties / styleDefs / description
        Previous value: -"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."New value: +"Benannte Stile der Blockvorlage. Nur zusammen mit blocksTemplate. EN: Named styles of the block template. Only together with blocksTemplate. Benannte Stile für das ganze Dokument (max. 24). Blöcke referenzieren sie über style. EN: named document styles (max 24); blocks reference them via style. Vollstaendige Stilfelder: frankki://blocks-guide. EN: complete style fields: frankki://blocks-guide."
    • Changedwallet_topup_link1 field changed
      • changedInput schema / properties / requestNonce / description
        Previous value: -"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."New value: +"Optionaler stabiler Wiederholungs-Schlüssel. 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."
  2. 1 tool update
    • Changedshipping_quote1 field changed
      • changedInput schema / properties / deliveryType / description
        Previous value: -"Registered-mail availability depends on the destination and its current catalog, not a Germany-only rule. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use only methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair does not establish availability in other countries. A catalog snapshot with no registered method does not prove that the postal service never offers one. Tracked mail is not registered mail. Never substitute standard or tracked delivery when registered mail was requested without the user's agreement. A carrier-issued proof-of-posting PDF is not promised."New value: +"Registered-mail availability follows the destination's current catalog. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair gives a verdict for that pair alone. A catalog snapshot gives a verdict for that snapshot alone. Tracked mail and registered mail are distinct products. Get the user's agreement before switching a requested registered method to standard or tracked delivery. Promise a carrier-issued proof-of-posting PDF only after confirming one is available."
  3. 4 tool updates
    • Changedapproval_submit1 field changed
      • changedInput schema / properties / deliveryType / enum
        Previous value: -[
        -  "standard",
        -  "einschreiben_einwurf",
        -  "einschreiben_uebergabe"
        -]New value: +[
        +  "standard",
        +  "einschreiben_einwurf",
        +  "einschreiben_uebergabe",
        +  "ch_b_post",
        +  "ch_a_post",
        +  "ch_einschreiben",
        +  "at_eco",
        +  "at_prio",
        +  "intl_standard",
        +  "intl_priority",
        +  "intl_express",
        +  "intl_tracked",
        +  "intl_registered"
        +]
    • Changedletter_schedule1 field changed
      • changedInput schema / properties / deliveryType / enum
        Previous value: -[
        -  "standard",
        -  "einschreiben_einwurf",
        -  "einschreiben_uebergabe"
        -]New value: +[
        +  "standard",
        +  "einschreiben_einwurf",
        +  "einschreiben_uebergabe",
        +  "ch_b_post",
        +  "ch_a_post",
        +  "ch_einschreiben",
        +  "at_eco",
        +  "at_prio",
        +  "intl_standard",
        +  "intl_priority",
        +  "intl_express",
        +  "intl_tracked",
        +  "intl_registered"
        +]
    • Changedorder_send1 field changed
      • changedInput schema / properties / deliveryType / enum
        Previous value: -[
        -  "standard",
        -  "einschreiben_einwurf",
        -  "einschreiben_uebergabe"
        -]New value: +[
        +  "standard",
        +  "einschreiben_einwurf",
        +  "einschreiben_uebergabe",
        +  "ch_b_post",
        +  "ch_a_post",
        +  "ch_einschreiben",
        +  "at_eco",
        +  "at_prio",
        +  "intl_standard",
        +  "intl_priority",
        +  "intl_express",
        +  "intl_tracked",
        +  "intl_registered"
        +]
    • Changedshipping_quote2 fields changed
      • addedInput schema / properties / deliveryType / description
        Added value: +"Registered-mail availability depends on the destination and its current catalog, not a Germany-only rule. The codes einschreiben_einwurf and einschreiben_uebergabe are German products; Switzerland uses ch_einschreiben. For other destinations, use only methods returned in availableDeliveryTypes by a standard shipping_quote for that country, then quote the chosen code. A rejected country/method pair does not establish availability in other countries. A catalog snapshot with no registered method does not prove that the postal service never offers one. Tracked mail is not registered mail. Never substitute standard or tracked delivery when registered mail was requested without the user's agreement. A carrier-issued proof-of-posting PDF is not promised."
      • changedInput schema / properties / deliveryType / enum
        Previous value: -[
        -  "standard",
        -  "einschreiben_einwurf",
        -  "einschreiben_uebergabe"
        -]New value: +[
        +  "standard",
        +  "einschreiben_einwurf",
        +  "einschreiben_uebergabe",
        +  "ch_b_post",
        +  "ch_a_post",
        +  "ch_einschreiben",
        +  "at_eco",
        +  "at_prio",
        +  "intl_standard",
        +  "intl_priority",
        +  "intl_express",
        +  "intl_tracked",
        +  "intl_registered"
        +]
  4. 1 tool update
    • Changedapproval_decide1 field changed
      • removedInput schema / properties / user_saw_preview
        Removed value: -{
        -  "description": "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.",
        -  "type": "boolean"
        -}
  5. 72 tool updates
    • First observedaddress_list
    • First observedaddress_search_company
    • First observedaddress_upsert
    • First observedaddress_validate
    • First observedanalytics_summary
    • First observedapproval_decide
    • First observedapproval_decide_app
    • First observedapproval_list
    • First observedapproval_page_urls_app
    • First observedapproval_status_app
    • First observedapproval_submit
    • First observedarchive_export
    • First observedarchive_export_status
    • First observedattachment_upload_image
    • First observedattachment_upload_pdf
    • First observedbrand_import_from_website
    • First observedbrand_kit_get
    • First observedbrand_kit_save
    • First observeddocument_create
    • First observeddocument_get
    • First observeddocument_list
    • First observedletter_create_draft
    • First observedletter_design_delete
    • First observedletter_design_list
    • First observedletter_design_list_presets
    • First observedletter_design_preview
    • First observedletter_design_save
    • First observedletter_get
    • First observedletter_list
    • First observedletter_page_urls_app
    • First observedletter_preview
    • First observedletter_schedule
    • First observedletter_search
    • First observedletterhead_list
    • First observedletterhead_upload
    • First observedmandant_get
    • First observedmandant_list
    • First observedmandant_search
    • First observedmcp_health
    • First observedorder_cancel
    • First observedorder_einlieferungsbeleg
    • First observedorder_fix_resubmit
    • First observedorder_send
    • First observedorder_send_batch
    • First observedorder_status
    • First observedpreset_save
    • First observedpricing_tiers
    • First observedprofile_get
    • First observedschedule_list_or_cancel
    • First observedsender_profile_get
    • First observedsender_profile_list
    • First observedsender_profile_upsert
    • First observedsender_profile_validate
    • First observedsetup_fix_link
    • First observedsetup_status_app
    • First observedshipping_quote
    • First observedsignature_list
    • First observedsignature_upload
    • First observedtemplate_apply_with_merge_fields
    • First observedtemplate_archive
    • First observedtemplate_decide_app
    • First observedtemplate_diff_check
    • First observedtemplate_draft_discard
    • First observedtemplate_get
    • First observedtemplate_list
    • First observedtemplate_page_urls_app
    • First observedtemplate_preview
    • First observedtemplate_release
    • First observedtemplate_save
    • First observedtemplate_status_app
    • First observedwallet_balance
    • First observedwallet_topup_link

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    AgentBureau 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
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    4
    142 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agents to create and pay for physical postcards and letters, returning print previews and Stripe checkout links, with human review before USPS First-Class mailing to US addresses.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.