Skip to main content
Glama

generate_assembly_manual

Generate a flat-pack-style PDF assembly manual for a multi-part 3D print, including step-by-step instructions, labeled parts, and optional multilingual sections.

Instructions

Generate a flat-pack-style assembly manual for a multi-part print (Business+).

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": {
      "assembly_json": "<assembly_json>"
    },
    "name": "generate_assembly_manual"
  }
}

Input Schema

NameRequiredDescriptionDefault
use_llmNoWhen true (the default), step copy is written by Kiln's language model with the deterministic template as fallback; false forces the template generator. Default: true.
brandingNo``"prominent"``, ``"subtle"``, ``"white_label"``, or omitted / ``"auto"`` to resolve from the caller's plan.
brief_idNoOptional saved-goal id from ``design_session``. When supplied and the brief resolves, the response's ``data`` block gains a ``design_goal`` block with the design's duty / environment / safety notes / operating story so the agent presenting the manual can say "This manual is for a [duty] design intended for [environment]" without re-reading the brief separately. Future enhancement: a "Designed for" line on the cover page. Default: "".
design_idNoDesign to record this manual under. The generated PDF always lands in its durable home — ``~/.kiln/manuals`` — and when a design identity exists (this parameter, or the assembly's own), the generation lands as a revision in the design's manual history (``list_manual_history`` / ``diff_assembly_manuals`` read it back; the response carries ``manual_id``). Omitted on an untracked assembly, the manual still generates — the response says how to track it. To keep a manual in the cloud, sign the release (``sign_design_release``) and push it (``cloud_push_release``) — the release embeds the manual's fingerprint, so ``verify_manual_authenticity`` can prove any copy against it from anywhere. Default: "".
languagesNoOrdered list of language codes (e.g. ``["en", "de"]``); each gets its own section in one PDF. Omitted, English only. Supported: en, de, fr, es, it, zh, ja; an unsupported code falls back to English.
output_dirNoDirectory to write the PDF + per-page PNGs into. Created if missing. Defaults to ``./assembly_manual``. Default: "./assembly_manual".
printer_idNoOptional printer id (e.g. ``"bambu_a1"``). When given and a screwed joint threads into a printed part, the parts list carries that printer's self-threading prep (hole sizes, engagement, torque ceiling, lead-in) where Kiln has a curated figure, or a labelled generic starting point; the response adds ``data.hardware_prep``. Omit it for generic hardware rows. Default: "".
version_idNoDesign version the manual documents (default: the PDF fingerprint prefix, the same fallback the auto-trigger path records). Default: "".
design_nameNoCover-page title; falls back to the assembly's own ``name``.
label_schemeNo``"alpha"`` (A, B, C, ... AA, AB), ``"numeric"`` (1, 2, 3), or omitted to pick by part count (alpha for small kits, numeric for large).
assembly_jsonYesJSON string of the assembly state, as returned by ``create_assembly`` / ``add_assembly_part`` / ``add_assembly_interface``.
co_brand_nameNoA maker name shown on the cover as "Made by <name>" in place of Kiln's wordmark. Omit it to keep Kiln's mark.
gate_intervalNoInsert a "you should now have this" verification gate after every N work steps (default 4). No gates inserted when total work steps <= interval. Default: 4.
cover_languageNoOverride the cover's language (defaults to ``languages[0]`` or English). Useful when the cover should match the customer's locale even if the body cycles through several.
step_overridesNoOptional dict mapping 1-indexed step numbers (string or int keys) to kit-maker copy overrides. Supported fields: ``action``, ``description``, ``orientation_note``, ``tools_needed``, and ``caution``. Use this when the kit includes a custom tool or a designer-known tactile cue the generic copy generator cannot know.
strict_certaintyNoWhen True (default), refuse to generate unless every step's joint metadata is complete — a shipped manual should never guess. Pass ``False`` for a DERIVED assembly (the ``derive_assembly_plan`` output): inferred steps render with honest DOUBLE-CHECK badges instead of refusing. This is the documented kit chain — derive_assembly_plan → generate_assembly_manual( strict_certainty=False). Default: true.
work_instructionNoOptional config that turns the consumer manual into a controlled factory work instruction. Omit it (default) and the manual is unchanged. Supply a dict to turn on: configurable part / item numbers on the BOM, per-step fastener torque with its honesty tier (a calibrated figure on a known printer+material, otherwise a "verify on a test joint" feel cue with no fabricated number), a per-step go/no-go inspection check, a build/inspect sign-off on the milestone gates, and a document- control / revision-ECO header (DRAFT-stamped when no change record is supplied). Recognised keys: ``numbering`` (``prefix``, ``pad_width``, ``separator``, ``start_number``, ``revision_style``, ``show_revision_in_part_number`` — defaults render a clean bare sequence "1","2","3"; an org sets ``{"prefix":"KLN","pad_width":5}`` to get ``KLN-00421``); ``control`` (``doc_number``, ``rev``, ``effective_date``, ``change_reference``, ``approved_by``, ``prepared_by``, ``applicability``); ``inspection`` (bool, default true); ``sign_off`` (bool, default true); ``quantity_overrides`` (``{part_id: int}``); ``prior_build_advisories`` (bool, default FALSE — opt-in: fold this design's recorded build history into the steps as inspect-with-care warnings. Off keeps the controlled document deterministic; when history exists the response carries ``data.build_history_available`` so you can ASK the user before turning it on). The response's ``data.work_instruction`` summarises what was applied.
design_name_translationsNoOptional dict mapping language code to a localized product name (e.g. ``{"de": "Gelenkleuchte"}``). Each section renders the matching translation as the cover title; sections without a translation fall back to ``design_name``. Brand names that should not be translated simply pass an empty/missing dict.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changedv1.5.1
    • addedInput schema / properties / assembly_json / description
      Added value: +"JSON string of the assembly state, as returned by ``create_assembly`` / ``add_assembly_part`` / ``add_assembly_interface``."
    • addedInput schema / properties / branding / description
      Added value: +"``\"prominent\"``, ``\"subtle\"``, ``\"white_label\"``, or omitted / ``\"auto\"`` to resolve from the caller's plan."
    • changedInput schema / properties / brief_id / description
      Previous value: -"Default: \"\"."New value: +"Optional saved-goal id from ``design_session``. When supplied and the brief resolves, the response's ``data`` block gains a ``design_goal`` block with the design's duty / environment / safety notes / operating story so the agent presenting the manual can say \"This manual is for a [duty] design intended for [environment]\" without re-reading the brief separately.  Future enhancement: a \"Designed for\" line on the cover page. Default: \"\"."
    • addedInput schema / properties / co_brand_name / description
      Added value: +"A maker name shown on the cover as \"Made by <name>\" in place of Kiln's wordmark.  Omit it to keep Kiln's mark."
    • addedInput schema / properties / cover_language / description
      Added value: +"Override the cover's language (defaults to ``languages[0]`` or English). Useful when the cover should match the customer's locale even if the body cycles through several."
    • changedInput schema / properties / design_id / description
      Previous value: -"Default: \"\"."New value: +"Design to record this manual under.  The generated PDF always lands in its durable home — ``~/.kiln/manuals`` — and when a design identity exists (this parameter, or the assembly's own), the generation lands as a revision in the design's manual history (``list_manual_history`` / ``diff_assembly_manuals`` read it back; the response carries ``manual_id``). Omitted on an untracked assembly, the manual still generates — the response says how to track it.  To keep a manual in the cloud, sign the release (``sign_design_release``) and push it (``cloud_push_release``) — the release embeds the manual's fingerprint, so ``verify_manual_authenticity`` can prove any copy against it from anywhere. Default: \"\"."
    • addedInput schema / properties / design_name / description
      Added value: +"Cover-page title; falls back to the assembly's own ``name``."
    • addedInput schema / properties / design_name_translations / description
      Added value: +"Optional dict mapping language code to a localized product name (e.g. ``{\"de\": \"Gelenkleuchte\"}``).  Each section renders the matching translation as the cover title; sections without a translation fall back to ``design_name``.  Brand names that should not be translated simply pass an empty/missing dict."
    • changedInput schema / properties / gate_interval / description
      Previous value: -"Default: 4."New value: +"Insert a \"you should now have this\" verification gate after every N work steps (default 4).  No gates inserted when total work steps <= interval. Default: 4."
    • addedInput schema / properties / label_scheme / description
      Added value: +"``\"alpha\"`` (A, B, C, ... AA, AB), ``\"numeric\"`` (1, 2, 3), or omitted to pick by part count (alpha for small kits, numeric for large)."
    • addedInput schema / properties / languages / description
      Added value: +"Ordered list of language codes (e.g. ``[\"en\", \"de\"]``); each gets its own section in one PDF.  Omitted, English only.  Supported: en, de, fr, es, it, zh, ja; an unsupported code falls back to English."
    • changedInput schema / properties / output_dir / description
      Previous value: -"Default: \"./assembly_manual\"."New value: +"Directory to write the PDF + per-page PNGs into.  Created if missing.  Defaults to ``./assembly_manual``. Default: \"./assembly_manual\"."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"Optional printer id (e.g. ``\"bambu_a1\"``). When given and a screwed joint threads into a printed part, the parts list carries that printer's self-threading prep (hole sizes, engagement, torque ceiling, lead-in) where Kiln has a curated figure, or a labelled generic starting point; the response adds ``data.hardware_prep``.  Omit it for generic hardware rows. Default: \"\"."
    • addedInput schema / properties / step_overrides / description
      Added value: +"Optional dict mapping 1-indexed step numbers (string or int keys) to kit-maker copy overrides. Supported fields: ``action``, ``description``, ``orientation_note``, ``tools_needed``, and ``caution``. Use this when the kit includes a custom tool or a designer-known tactile cue the generic copy generator cannot know."
    • changedInput schema / properties / strict_certainty / description
      Previous value: -"Default: true."New value: +"When True (default), refuse to generate unless every step's joint metadata is complete — a shipped manual should never guess. Pass ``False`` for a DERIVED assembly (the ``derive_assembly_plan`` output): inferred steps render with honest DOUBLE-CHECK badges instead of refusing.  This is the documented kit chain — derive_assembly_plan → generate_assembly_manual( strict_certainty=False). Default: true."
    • changedInput schema / properties / use_llm / description
      Previous value: -"Default: true."New value: +"When true (the default), step copy is written by Kiln's language model with the deterministic template as fallback; false forces the template generator. Default: true."
    • changedInput schema / properties / version_id / description
      Previous value: -"Default: \"\"."New value: +"Design version the manual documents (default: the PDF fingerprint prefix, the same fallback the auto-trigger path records). Default: \"\"."
    • addedInput schema / properties / work_instruction / description
      Added value: +"Optional config that turns the consumer manual into a controlled factory work instruction.  Omit it (default) and the manual is unchanged.  Supply a dict to turn on: configurable part / item numbers on the BOM, per-step fastener torque with its honesty tier (a calibrated figure on a known printer+material, otherwise a \"verify on a test joint\" feel cue with no fabricated number), a per-step go/no-go inspection check, a build/inspect sign-off on the milestone gates, and a document- control / revision-ECO header (DRAFT-stamped when no change record is supplied).  Recognised keys: ``numbering`` (``prefix``, ``pad_width``, ``separator``, ``start_number``, ``revision_style``, ``show_revision_in_part_number`` — defaults render a clean bare sequence \"1\",\"2\",\"3\"; an org sets ``{\"prefix\":\"KLN\",\"pad_width\":5}`` to get ``KLN-00421``); ``control`` (``doc_number``, ``rev``, ``effective_date``, ``change_reference``, ``approved_by``, ``prepared_by``, ``applicability``); ``inspection`` (bool, default true); ``sign_off`` (bool, default true); ``quantity_overrides`` (``{part_id: int}``); ``prior_build_advisories`` (bool, default FALSE — opt-in: fold this design's recorded build history into the steps as inspect-with-care warnings.  Off keeps the controlled document deterministic; when history exists the response carries ``data.build_history_available`` so you can ASK the user before turning it on).  The response's ``data.work_instruction`` summarises what was applied."
  2. Addedv1.5.0

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint=false, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds the Business+ entitlement constraint, which is useful context not in the annotations, but it does not mention that the call writes PDF and per-page PNG files to disk, that manuals are recorded into design history, or that strict certainty can cause a refusal.

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?

One front-loaded sentence with zero filler; the artifact type and the eligibility condition are both stated up front. Nothing in it is redundant with the title or schema.

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 18-parameter, write-side-effect tool with no output schema, a single sentence is thin on the description side: it omits the required assembly_json provenance (from create_assembly/add_assembly_part), where output lands, and the manual history/verification workflow. The extremely rich schema and annotations carry most of that burden, so the definition is workable but not complete at the description level.

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% and the parameter docs are unusually thorough (enum-like values, defaults, downstream effects like data.hardware_prep and manual_id). With the schema doing all the work, the description adds no parameter meaning of its own, so the baseline 3 applies.

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 names a specific verb and artifact — 'Generate a flat-pack-style assembly manual' — and scopes the input as 'a multi-part print', so the agent knows the resource and output format. It does not distinguish itself from close siblings such as auto_generate_manual_for_print or diff_assembly_manuals, leaving that differentiation to inference.

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: this tool is for multi-part prints and is gated behind the Business+ plan, which is a real prerequisite worth stating. There is no explicit when-to-use/when-not guidance, no mention of the alternative auto_generate_manual_for_print, and the documented derive_assembly_plan chain appears only in the strict_certainty parameter text rather than the description.

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

Deploy Server

Other Tools