Skip to main content
Glama

submit_job

Destructive

Queue a G-code file for unattended 3D printing, assigning it to a printer or letting the scheduler choose, with priority control and idempotency keys that prevent duplicate prints.

Instructions

Submit a print job to the queue.

``version_id`` / ``design_id`` / ``branch_id`` name the kept design the
file came from, when there is one; the scheduler hands them to the
start so the print's record lands on that version's history.

A free account's queue holds a fixed number of pending jobs (the
refusal says how many); Pro has no queue cap.

Args:
    file_name: G-code file name (must already exist on the printer).
    printer_name: Target printer name.  Omit to let the scheduler
        choose: the printer the queue is already on (it stays on one
        machine unless a person moves it), or on the fleet plan any
        idle printer.
    priority: Higher values are scheduled first (default 0).
    idempotency_key: Optional opaque key (e.g. a UUID you generate)
        naming this one submission.  If your call fails in a way
        where you cannot tell whether the job was queued — a timeout,
        a dropped connection — retry with the SAME key: you will get
        the original job back (``submission: "replayed"``) instead of
        queuing a duplicate print.  Use a NEW key for each job you
        genuinely want printed; reusing a key with different
        parameters is refused.
    preview_token: Token from ``issue_preview_token`` after the user
        has seen the file.  Required: a queued job is a print the
        scheduler will start unattended, so the gate is here, at the
        door, and the sign-off rides the job.
    version_id: The kept design version this file came from, so the
        print's record lands on that version's history.  A file that is
        not a Kiln design passes none.
    design_id: The design that version belongs to; passed with
        ``version_id``.
    branch_id: The branch that version is on; passed with ``version_id``.

Jobs are executed in priority order, with FIFO tie-breaking.
Use ``job_status`` to check progress and ``queue_summary`` for an overview.

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_name": "<file_name>"
    },
    "name": "submit_job"
  }
}

Input Schema

NameRequiredDescriptionDefault
priorityNoHigher values are scheduled first (default 0). Default: 0.
branch_idNoThe branch that version is on; passed with ``version_id``.
design_idNoThe design that version belongs to; passed with ``version_id``.
file_nameYesG-code file name (must already exist on the printer).
version_idNoThe kept design version this file came from, so the print's record lands on that version's history. A file that is not a Kiln design passes none.
printer_nameNoTarget printer name. Omit to let the scheduler choose: the printer the queue is already on (it stays on one machine unless a person moves it), or on the fleet plan any idle printer.
preview_tokenNoToken from ``issue_preview_token`` after the user has seen the file. Required: a queued job is a print the scheduler will start unattended, so the gate is here, at the door, and the sign-off rides the job.
idempotency_keyNoOptional opaque key (e.g. a UUID you generate) naming this one submission. If your call fails in a way where you cannot tell whether the job was queued — a timeout, a dropped connection — retry with the SAME key: you will get the original job back (``submission: "replayed"``) instead of queuing a duplicate print. Use a NEW key for each job you genuinely want printed; reusing a key with different parameters is refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv1.5.1
    • addedInput schema / properties / branch_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The branch that version is on; passed with ``version_id``.",
      +  "title": "Branch Id"
      +}
    • addedInput schema / properties / design_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The design that version belongs to; passed with ``version_id``.",
      +  "title": "Design Id"
      +}
    • addedInput schema / properties / file_name / description
      Added value: +"G-code file name (must already exist on the printer)."
    • addedInput schema / properties / idempotency_key / description
      Added value: +"Optional opaque key (e.g. a UUID you generate) naming this one submission.  If your call fails in a way where you cannot tell whether the job was queued — a timeout, a dropped connection — retry with the SAME key: you will get the original job back (``submission: \"replayed\"``) instead of queuing a duplicate print.  Use a NEW key for each job you genuinely want printed; reusing a key with different parameters is refused."
    • addedInput schema / properties / preview_token / description
      Added value: +"Token from ``issue_preview_token`` after the user has seen the file.  Required: a queued job is a print the scheduler will start unattended, so the gate is here, at the door, and the sign-off rides the job."
    • addedInput schema / properties / printer_name / description
      Added value: +"Target printer name.  Omit to let the scheduler choose: the printer the queue is already on (it stays on one machine unless a person moves it), or on the fleet plan any idle printer."
    • changedInput schema / properties / priority / description
      Previous value: -"Default: 0."New value: +"Higher values are scheduled first (default 0). Default: 0."
    • addedInput schema / properties / version_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The kept design version this file came from, so the print's record lands on that version's history.  A file that is not a Kiln design passes none.",
      +  "title": "Version Id"
      +}
  2. Changed5 schema fields changedv1.5.0
    • removedInput schema / properties / idempotency_key / default
      Removed value: -null
    • addedInput schema / properties / preview_token
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Preview Token"
      +}
    • removedInput schema / properties / printer_name / default
      Removed value: -null
    • removedInput schema / properties / priority / default
      Removed value: -0
    • addedInput schema / properties / priority / description
      Added value: +"Default: 0."
  3. Changed1 schema field changedv1.3.1
    • addedInput schema / properties / idempotency_key
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Idempotency Key"
      +}
  4. First observedv0.1.0

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses the free-account queue cap (and that the refusal message states the number), that Pro has no cap, that priority ordering is high-to-low with FIFO tie-breaking, how the scheduler picks a printer and that jobs stay pinned to one machine, and exactly what replay returns (`submission: "replayed"`). The 'print the scheduler will start unattended' framing is consistent with destructiveHint=true rather than contradicting it.

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 action, then scoped sections for design linkage, quota, Args, and ordering — appropriate for an 8-parameter mutation. A few sentences restate schema descriptions, and the quota paragraph could be tightened, but nothing is filler at the level of the whole.

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 hints at return shape (queued job, `submission: "replayed"`) and points to job_status for progress, so an agent knows how to follow up. It never states what a successful submission returns (e.g., a job identifier to feed into job_status/cancel_queued_job), which is the main residual gap for a tool whose output has no 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, and the description earns above that by adding the coupling rule (design_id and branch_id are passed with version_id), the recurrence rule (a new key for each job, reusing a key with different parameters is refused), and the provenance of preview_token. Some of this text is mirrored verbatim in the schema descriptions, so the marginal value is real but partly duplicated.

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 with scope: 'Submit a print job to the queue.' The body clarifies this is a queued, scheduler-started (unattended) print, which inherently separates it from an immediate start. It falls short of a 5 because it never names the obvious submission siblings (start_print, fleet_submit_job, run_quick_print) to say which one an agent should pick.

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?

Guidance is strong on conditional cases: omit printer_name to let the scheduler choose, pass version_id/design_id/branch_id only when the file is a kept Kiln design, and retry with the SAME idempotency_key specifically after a timeout or dropped connection. It also routes to job_status and queue_summary for progress. It does not state when *not* to use this tool versus other submission paths.

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