Skip to main content
Glama

upload_file

Send a local file to a Bambu Lab printer under a chosen filename, with an option to start printing immediately after transfer.

Instructions

Upload a local file to the Bambu Lab printer

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_path": "<file_path>",
      "filename": "<filename>"
    },
    "name": "upload_file"
  }
}

Input Schema

NameRequiredDescriptionDefault
hostNoHostname or IP of the printer (default: value from env)
printNoStart printing after upload (default: false)
bed_typeNoBed plate type for the native X2D uploader (default: textured_plate).
filenameYesName for the file on the printer
file_pathYesLocal path to the file to upload
bambu_modelNoRequired for every printable .gcode or .3mf upload, including upload-only operations.
bambu_tokenNoAccess token (default: value from env)
plate_indexNoZero-based plate index passed to the native X2D uploader (default: 0).
preset_nameNoOptional printer preset name passed to the native X2D uploader.
bambu_serialNoSerial number (default: value from env)
project_nameNoOptional project name passed to the native X2D uploader; defaults to filename.
connection_modeNoUpload transport; bambu_native uses the installed Bambu networking plug-in for X2D or X1C and never starts printing.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.1.93
    • changedInput schema / properties / connection_mode / description
      Previous value: -"Upload transport; bambu_native uses the installed Bambu networking plug-in for X2D and never starts printing."New value: +"Upload transport; bambu_native uses the installed Bambu networking plug-in for X2D or X1C and never starts printing."
  2. Changed1 schema field changedv1.1.42
    • changedInput schema / properties / bambu_model / enum
      Previous value: -[
      -  "p1s",
      -  "p1p",
      -  "p2s",
      -  "x1c",
      -  "x1e",
      -  "a1",
      -  "a1mini",
      -  "h2d",
      -  "h2s",
      -  "h2c",
      -  "x2d"
      -]New value: +[
      +  "p1s",
      +  "p1p",
      +  "p2s",
      +  "x1c",
      +  "x1e",
      +  "a1",
      +  "a1mini",
      +  "h2d",
      +  "h2dpro",
      +  "h2s",
      +  "h2c",
      +  "x2d"
      +]
  3. Changed7 schema fields changedv1.1.14
    • changedInput schema / properties / bambu_model / description
      Previous value: -"Required when print is true. Bambu Lab printer model used as a safety confirmation before starting the uploaded file."New value: +"Required for every printable .gcode or .3mf upload, including upload-only operations."
    • changedInput schema / properties / bambu_model / enum
      Previous value: -[
      -  "p1s",
      -  "p1p",
      -  "p2s",
      -  "x1c",
      -  "x1e",
      -  "a1",
      -  "a1mini",
      -  "h2d",
      -  "h2s"
      -]New value: +[
      +  "p1s",
      +  "p1p",
      +  "p2s",
      +  "x1c",
      +  "x1e",
      +  "a1",
      +  "a1mini",
      +  "h2d",
      +  "h2s",
      +  "h2c",
      +  "x2d"
      +]
    • addedInput schema / properties / bed_type
      Added value: +{
      +  "description": "Bed plate type for the native X2D uploader (default: textured_plate).",
      +  "enum": [
      +    "textured_plate",
      +    "cool_plate",
      +    "engineering_plate",
      +    "hot_plate",
      +    "supertack_plate"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / connection_mode
      Added value: +{
      +  "description": "Upload transport; bambu_native uses the installed Bambu networking plug-in for X2D and never starts printing.",
      +  "enum": [
      +    "lan_mqtt_ftps",
      +    "bambu_native"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / plate_index
      Added value: +{
      +  "description": "Zero-based plate index passed to the native X2D uploader (default: 0).",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / preset_name
      Added value: +{
      +  "description": "Optional printer preset name passed to the native X2D uploader.",
      +  "type": "string"
      +}
    • addedInput schema / properties / project_name
      Added value: +{
      +  "description": "Optional project name passed to the native X2D uploader; defaults to filename.",
      +  "type": "string"
      +}
  4. First observedv1.1.1

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and idempotentHint=false, so the framing is not invisible. But the description adds nothing beyond that: it does not mention that setting print=true will start a physical print job, that bambu_native never starts printing, that bambu_model is required for printable uploads, or that credentials come from the environment. For a 12-parameter mutation tool, that is a substantial gap.

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?

It is a single front-loaded sentence with no wasted words, so it is structurally clean. However, that brevity is under-specification rather than efficiency: the one sentence leaves out the print-triggering behavior and the transport choice that dominate this tool's use.

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?

With 12 parameters, a required model argument for printable files, a destructive-adjacent print flag, and two transport modes, this definition is far too thin. There is no output schema, so the description should at minimum state what the upload returns and how print versus upload-only differs. An agent calling it correctly would have to rely entirely on the schema descriptions.

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 every parameter, including the host/token/serial defaults, the connection_mode enum semantics, and the X2D-specific plate and preset fields, is already documented in the schema. The description contributes no additional meaning about parameters. A baseline of 3 is appropriate when the schema carries that load.

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 states a clear verb and resource: 'Upload a local file to the Bambu Lab printer'. An agent can immediately tell this transfers a file rather than printing, inspecting, or deleting. It does nothing to distinguish the tool from siblings such as upload_gcode or bambu_connect_import_file, which is why it falls 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 Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance, and no alternative is named. The description does not explain how this differs from upload_gcode or bambu_connect_import_file, nor when the 'print' flag or 'connection_mode' should be chosen. The agent is left to infer selection entirely from the schema.

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