Skip to main content
Glama

Order a 3D print

submit_print_job

Create an order ONLY AFTER preview_print_order, image display and buyer confirmation.

First present every preview image (or the viewer fallback), dimensions, material/color,
quantity and quote. Obtain explicit buyer confirmation for that preview version.
Then send preview_id, preview_version, buyer_confirmed=true, job_name and shipping
details ONLY; omit model/options fields. Any relevant change needs a new preview.
Legacy model inputs without a preview return a preview and NEVER create an order.

Set geometry, material, color, quantities and operator notes in preview_print_order.
OpenSCAD is preferred for designs made in conversation; uploaded STL and cached
model IDs are also supported there. One preview covers the whole multi-part order.
Confirm the shipping address with the buyer. ship_to requires their full name and
US address; contact_email is used for updates. This returns a job ID and total,
plus a payment link when payment is required. The buyer pays in their own browser.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
colorNoFilament color, e.g. black or white.
notesNoOptional notes for the operator, e.g. which face should look best.
partsNoThe WHOLE order, one entry per part. Use a model_id from earlier validation, an STL, or OpenSCAD. Each entry has its own name, material, color and quantity. Each part's quantity is capped by its own print time, not a flat count. Shipping and handling are charged once; never add independent quote totals.
ship_toNoRequired. Recipient's full name and US street address, including city, state and ZIP. We ship within the United States only.
job_nameYesA short name for the item, shown on the order and the receipt, e.g. "Desk cable clip".
materialNoPrint material: pla or petg.
quantityNoHow many identical copies. Capped by print time, not a flat number; the totals cover all of them.
preview_idNoThe id returned by preview_print_order for the images shown to the buyer.
stl_base64NoThe model as a base64-encoded STL file, in millimeters. Give this or openscad_source, not both.
contact_emailNoThe buyer's email, for the receipt and order updates.
buyer_confirmedNoTrue ONLY after showing every preview image/options/price and receiving explicit buyer confirmation. Not proof of human viewing.
openscad_sourceNoOpenSCAD source for the model, in millimeters; rendered on our server. Preferred for models designed in the conversation. Give this or stl_base64, not both.
preview_versionNoThe exact preview version the buyer confirmed; changes require a new preview.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed18 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "OrderPart": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "default": "black",
      +        "description": "Filament color for this part.",
      +        "maxLength": 40,
      +        "title": "Color",
      +        "type": "string"
      +      },
      +      "material": {
      +        "default": "pla",
      +        "description": "PLA or PETG only.",
      +        "maxLength": 20,
      +        "title": "Material",
      +        "type": "string"
      +      },
      +      "model_id": {
      +        "default": "",
      +        "description": "Reusable id from validate_stl; valid for 24 hours.",
      +        "maxLength": 64,
      +        "title": "Model Id",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Short part name, shown on the card and receipt.",
      +        "maxLength": 120,
      +        "minLength": 1,
      +        "title": "Name",
      +        "type": "string"
      +      },
      +      "openscad_source": {
      +        "default": "",
      +        "description": "OpenSCAD in millimeters; give exactly one model source.",
      +        "maxLength": 50000,
      +        "title": "Openscad Source",
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "default": 1,
      +        "description": "Copies of THIS part. Capped by how long this part takes to print, not a flat number -- checked once its geometry is known; a rejected order reports the real cap for this part's size.",
      +        "maximum": 500,
      +        "minimum": 1,
      +        "title": "Quantity",
      +        "type": "integer"
      +      },
      +      "stl_base64": {
      +        "default": "",
      +        "description": "STL in millimeters; give exactly one model source.",
      +        "maxLength": 25000000,
      +        "title": "Stl Base64",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name"
      +    ],
      +    "title": "OrderPart",
      +    "type": "object"
      +  }
      +}
    • addedInput schema / properties / buyer_confirmed
      Added value: +{
      +  "default": false,
      +  "description": "True ONLY after showing every preview image/options/price and receiving explicit buyer confirmation. Not proof of human viewing.",
      +  "title": "Buyer Confirmed",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / color / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / color / default
      Previous value: -"black"New value: +null
    • removedInput schema / properties / color / type
      Removed value: -"string"
    • addedInput schema / properties / material / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / material / default
      Previous value: -"pla"New value: +null
    • removedInput schema / properties / material / type
      Removed value: -"string"
    • addedInput schema / properties / notes / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / notes / default
      Previous value: -""New value: +null
    • removedInput schema / properties / notes / type
      Removed value: -"string"
    • addedInput schema / properties / parts
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "$ref": "#/$defs/OrderPart"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The WHOLE order, one entry per part. Use a model_id from earlier validation, an STL, or OpenSCAD. Each entry has its own name, material, color and quantity. Each part's quantity is capped by its own print time, not a flat count. Shipping and handling are charged once; never add independent quote totals.",
      +  "title": "Parts"
      +}
    • addedInput schema / properties / preview_id
      Added value: +{
      +  "default": "",
      +  "description": "The id returned by preview_print_order for the images shown to the buyer.",
      +  "title": "Preview Id",
      +  "type": "string"
      +}
    • addedInput schema / properties / preview_version
      Added value: +{
      +  "default": "",
      +  "description": "The exact preview version the buyer confirmed; changes require a new preview.",
      +  "title": "Preview Version",
      +  "type": "string"
      +}
    • addedInput schema / properties / quantity / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / quantity / default
      Previous value: -1New value: +null
    • changedInput schema / properties / quantity / description
      Previous value: -"How many identical copies, 1 to 20. The totals cover all of them."New value: +"How many identical copies. Capped by print time, not a flat number; the totals cover all of them."
    • removedInput schema / properties / quantity / type
      Removed value: -"integer"
  2. Changed9 schema fields changed
    • addedInput schema / properties / color / description
      Added value: +"Filament color, e.g. black or white."
    • addedInput schema / properties / contact_email / description
      Added value: +"The buyer's email, for the receipt and order updates."
    • addedInput schema / properties / job_name / description
      Added value: +"A short name for the item, shown on the order and the receipt, e.g. \"Desk cable clip\"."
    • addedInput schema / properties / material / description
      Added value: +"Print material: pla or petg."
    • addedInput schema / properties / notes / description
      Added value: +"Optional notes for the operator, e.g. which face should look best."
    • addedInput schema / properties / openscad_source / description
      Added value: +"OpenSCAD source for the model, in millimeters; rendered on our server. Preferred for models designed in the conversation. Give this or stl_base64, not both."
    • addedInput schema / properties / quantity
      Added value: +{
      +  "default": 1,
      +  "description": "How many identical copies, 1 to 20. The totals cover all of them.",
      +  "title": "Quantity",
      +  "type": "integer"
      +}
    • addedInput schema / properties / ship_to / description
      Added value: +"Required. Recipient's full name and US street address, including city, state and ZIP. We ship within the United States only."
    • addedInput schema / properties / stl_base64 / description
      Added value: +"The model as a base64-encoded STL file, in millimeters. Give this or openscad_source, not both."
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare only the safety profile (not read-only, not idempotent, open-world); the description goes well beyond them by disclosing the payment flow ('returns a job ID and total, plus a payment link when payment is required... buyer pays in their own browser'), the preview-version invalidation rule, and the legacy-input failure mode. These are exactly the non-obvious behaviors an agent must know before invoking a mutating 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 critical gate (preview + confirmation) is front-loaded in the first two sentences, and every paragraph carries instruction. It is somewhat long and restates model-source and quantity-cap guidance already covered in the schema descriptions, which is mild redundancy rather than filler.

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 13-parameter mutating order tool with an output schema, the description covers prerequisites, gating conditions, what to send vs omit, shipping constraints, and the payment handoff. Nothing an agent needs to call it correctly is missing, and return-value details are appropriately left to the output schema.

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 100%, so the baseline is 3, but the description adds a cross-field rule the schema does not encode: submit preview_id, preview_version, buyer_confirmed=true, job_name and shipping details ONLY, omitting model/options fields. It also reinforces that ship_to needs a full name and US address and that contact_email drives updates. Useful additions, though individual field formats largely live in 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 opens with a specific verb+resource ('Create an order') and immediately scopes it against the sibling preview_print_order, stating the order may only be created after preview, image display and buyer confirmation. An agent can distinguish this from preview_print_order, reorder_print_job and check_job_status 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-to-use ('ONLY AFTER preview_print_order, image display and buyer confirmation'), what must be presented before calling, what to exclude ('omit model/options fields', 'never add independent quote totals'), and what happens on the legacy path (returns a preview, never creates an order). Alternatives and preconditions are named rather than implied.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources