Skip to main content
Glama

record_print_dna

Record a print outcome with model fingerprint, slicer settings, and quality result to enable cross-user matching and learning from successes or failures.

Instructions

Record a print outcome with full model DNA.

        Saves the model fingerprint alongside print settings and outcome
        for cross-user learning.  Use ``fingerprint_model`` first to
        compute the fingerprint fields.

        Args:
            file_hash: SHA-256 hash of the model file.
            geometric_signature: Geometric signature from fingerprinting.
            triangle_count: Number of triangles in the model.
            surface_area_mm2: Total surface area in mm^2.
            volume_mm3: Model volume in mm^3.
            overhang_ratio: Ratio of overhanging triangles (0.0-1.0).
            complexity_score: Model complexity (0.0-1.0).
            printer_model: Printer model name.
            material: Material used (e.g. ``"PLA"``).
            settings: The slicer settings the print used, as a flat
                name→value dict (e.g. ``{"layer_height_mm": 0.2,
                "infill_percent": 20, "nozzle_temp_c": 215}``).  Stored
                as given and hashed for matching; no key is required.
            outcome: ``"success"``, ``"failed"``, or ``"partial"``.
            quality_grade: One of ``"A"``, ``"B"``, ``"C"``, ``"D"``,
                ``"F"`` (default ``"B"``).
            failure_mode: Optional failure description.
            print_time_seconds: Print duration in seconds.
            geometric_signature_v2: ``fingerprint_model``'s
                ``geometric_signature_v2``.  Pass it: it is what lets
                this print be told apart from a different design that
                happens to share the older signature.  Omitted, the row
                is stored with the older key only and can never be
                separated from that design later.
        

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": {
      "file_hash": "<file_hash>",
      "geometric_signature": "<geometric_signature>",
      "triangle_count": "<triangle_count>",
      "surface_area_mm2": "<surface_area_mm2>",
      "volume_mm3": "<volume_mm3>",
      "overhang_ratio": "<overhang_ratio>",
      "complexity_score": "<complexity_score>",
      "printer_model": "<printer_model>",
      "material": "<material>",
      "settings": "<settings>",
      "outcome": "<outcome>"
    },
    "name": "record_print_dna"
  }
}

Input Schema

NameRequiredDescriptionDefault
outcomeYes``"success"``, ``"failed"``, or ``"partial"``.
materialYesMaterial used (e.g. ``"PLA"``).
settingsYesThe slicer settings the print used, as a flat name→value dict (e.g. ``{"layer_height_mm": 0.2, "infill_percent": 20, "nozzle_temp_c": 215}``). Stored as given and hashed for matching; no key is required.
file_hashYesSHA-256 hash of the model file.
volume_mm3YesModel volume in mm^3.
failure_modeNoOptional failure description.
printer_modelYesPrinter model name.
quality_gradeNoOne of ``"A"``, ``"B"``, ``"C"``, ``"D"``, ``"F"`` (default ``"B"``). Default: "B".
overhang_ratioYesRatio of overhanging triangles (0.0-1.0).
triangle_countYesNumber of triangles in the model.
complexity_scoreYesModel complexity (0.0-1.0).
surface_area_mm2YesTotal surface area in mm^2.
print_time_secondsNoPrint duration in seconds. Default: 0.
geometric_signatureYesGeometric signature from fingerprinting.
geometric_signature_v2No``fingerprint_model``'s ``geometric_signature_v2``. Pass it: it is what lets this print be told apart from a different design that happens to share the older signature. Omitted, the row is stored with the older key only and can never be separated from that design later. Default: "".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changedv1.5.1
    • addedInput schema / properties / complexity_score / description
      Added value: +"Model complexity (0.0-1.0)."
    • addedInput schema / properties / failure_mode / description
      Added value: +"Optional failure description."
    • addedInput schema / properties / file_hash / description
      Added value: +"SHA-256 hash of the model file."
    • addedInput schema / properties / geometric_signature / description
      Added value: +"Geometric signature from fingerprinting."
    • changedInput schema / properties / geometric_signature_v2 / description
      Previous value: -"Default: \"\"."New value: +"``fingerprint_model``'s ``geometric_signature_v2``.  Pass it: it is what lets this print be told apart from a different design that happens to share the older signature.  Omitted, the row is stored with the older key only and can never be separated from that design later. Default: \"\"."
    • addedInput schema / properties / material / description
      Added value: +"Material used (e.g. ``\"PLA\"``)."
    • addedInput schema / properties / outcome / description
      Added value: +"``\"success\"``, ``\"failed\"``, or ``\"partial\"``."
    • addedInput schema / properties / overhang_ratio / description
      Added value: +"Ratio of overhanging triangles (0.0-1.0)."
    • changedInput schema / properties / print_time_seconds / description
      Previous value: -"Default: 0."New value: +"Print duration in seconds. Default: 0."
    • addedInput schema / properties / printer_model / description
      Added value: +"Printer model name."
    • changedInput schema / properties / quality_grade / description
      Previous value: -"Default: \"B\"."New value: +"One of ``\"A\"``, ``\"B\"``, ``\"C\"``, ``\"D\"``, ``\"F\"`` (default ``\"B\"``). Default: \"B\"."
    • addedInput schema / properties / settings / description
      Added value: +"The slicer settings the print used, as a flat name→value dict (e.g. ``{\"layer_height_mm\": 0.2, \"infill_percent\": 20, \"nozzle_temp_c\": 215}``).  Stored as given and hashed for matching; no key is required."
    • addedInput schema / properties / surface_area_mm2 / description
      Added value: +"Total surface area in mm^2."
    • addedInput schema / properties / triangle_count / description
      Added value: +"Number of triangles in the model."
    • addedInput schema / properties / volume_mm3 / description
      Added value: +"Model volume in mm^3."
  2. Changed7 schema fields changedv1.5.0
    • removedInput schema / properties / failure_mode / default
      Removed value: -null
    • removedInput schema / properties / geometric_signature_v2 / default
      Removed value: -""
    • addedInput schema / properties / geometric_signature_v2 / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / print_time_seconds / default
      Removed value: -0
    • addedInput schema / properties / print_time_seconds / description
      Added value: +"Default: 0."
    • removedInput schema / properties / quality_grade / default
      Removed value: -"B"
    • addedInput schema / properties / quality_grade / description
      Added value: +"Default: \"B\"."
  3. Changed1 schema field changedv1.3.1
    • addedInput schema / properties / geometric_signature_v2
      Added value: +{
      +  "default": "",
      +  "title": "Geometric Signature V2",
      +  "type": "string"
      +}
  4. First observedv0.1.0

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only cover safety flags (readOnlyHint=false, destructiveHint=false, openWorldHint=false); the description goes further by disclosing persistence semantics — settings are 'Stored as given and hashed for matching; no key is required' — and a permanent, unrecoverable cost to omitting geometric_signature_v2. That is genuine behavioral context beyond the annotations. It does not describe deduplication, conflict handling, or what gets returned.

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 and the signature_v2 warning are front-loaded and well argued, but the bulk is an Args section that reprints 15 parameter descriptions already present at 100% coverage in the schema. Roughly half the text is duplicated structured data, which is padding rather than 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?

For a 15-parameter, 11-required mutation tool with no output schema, the description covers every field, the prerequisite tool call, storage/hashing behavior, and the irreversibility trap on signature_v2. What it leaves open is whether repeat records merge or duplicate, and any sense of the write's result — minor gaps given the breadth otherwise 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 the baseline is 3, and the description's Args block largely restates those same property descriptions verbatim. The one place it adds real meaning is tying geometric_signature_v2 to fingerprint_model and explaining why the field exists, but that text is duplicated in the schema too, so the net gain over structured data is thin.

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 — record a print outcome — and scopes it with 'with full model DNA' plus 'Saves the model fingerprint alongside print settings and outcome for cross-user learning.' That differentiates it from the plainer record_print_outcome sibling in the list, but it never names that sibling or explicitly contrasts the two, so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives an explicit ordering prerequisite: 'Use fingerprint_model first to compute the fingerprint fields,' which tells the agent it cannot call this cold. It also states the consequence of omitting geometric_signature_v2. It does not say when to prefer this over record_print_outcome or find_similar_prints, so the when-not side is absent.

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