Skip to main content
Glama

embed_zugferd_pdf

Read-onlyIdempotent

Converts a Base64 PDF and invoice JSON into an ISO 19005-3 PDF/A-3b ZUGFeRD 2.5 hybrid invoice with embedded factur-x.xml and GiroCode QR.

Instructions

Deterministically upgrade an existing visual PDF (Base64) + structured invoice JSON into an ISO 19005-3 PDF/A-3b ZUGFeRD 2.5 hybrid invoice with embedded factur-x.xml and GiroCode QR.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "pdfBase64": "<pdfBase64>",
      "invoice": "<invoice>"
    },
    "name": "embed_zugferd_pdf"
  }
}

Input Schema

NameRequiredDescriptionDefault
invoiceYes
profileNoEN16931
pdfBase64YesBase64-encoded source visual PDF
stampGiroCodeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.0

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive behavior, and the word 'Deterministically' is consistent with that. The description adds real value by disclosing the conformance target (PDF/A-3b), the embedded XML filename, and the GiroCode stamp, but it never says what is returned or what happens when the source PDF or invoice fails conformance checks.

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?

A single dense sentence that front-loads the verb and the input pair before the output specification; every clause carries specification detail. It is long, but nothing is redundant.

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 a deeply nested invoice object, a profile enum that changes mandatory fields, and no output schema, the description omits the return value, the profile choice consequences, and failure modes. An agent could call it with the wrong profile and only discover the problem at runtime.

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 must carry more weight than it does. It only characterises the two inputs generically ('visual PDF (Base64) + structured invoice JSON') and never explains the profile enum (EN16931 vs XRECHNUNG) or the stampGiroCode toggle, even though many nested fields are documented as XRECHNUNG-mandatory.

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 precise verb and outcome: upgrade a Base64 visual PDF plus invoice JSON into an ISO 19005-3 PDF/A-3b ZUGFeRD 2.5 hybrid with embedded factur-x.xml and GiroCode QR. The 'existing visual PDF' phrasing implicitly distinguishes it from a from-scratch generator, but it never names the sibling (e.g. generate_erechnung) it complements.

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?

There is no explicit when-to-use or when-not guidance and no routing to generate_erechnung, parse_erechnung, or validate_erechnung. The only prerequisite signal is the parenthetical 'existing visual PDF', which the agent must infer means the source document already exists.

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