delete_file
ChatGPTDescription: Permanently deletes one file from the printer. Use a virtualPath returned by list_files. This cannot delete folders and cannot be undone through OctoEverywhere. Use only when the user explicitly asks to delete the specified printer file or with explicit user permission. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
download_file
ChatGPTDescription: Downloads the complete contents of one printer file. Use a virtualPath returned by list_files. By default the content is returned as UTF-8 text in content_text. Set return_content_as to Base64 to instead get content_base64, which preserves binary files such as 3MF exactly. Use For: - Read a G-code, configuration, or log file after locating it with list_files. - Save or inspect a printer file at the user's request. Note this downloads the whole file, and printer G-code files are often very large. Check sizeBytes from list_files first. Prefer get_octoeverywhere_plugin_logs for the OctoEverywhere plugin's own log because it supports returning only the latest lines. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
extrude_filament
ChatGPTDescription: Moves filament through one printer extruder by a signed distance in millimeters. A positive distance extrudes and a negative distance retracts. The hotend normally must already be at a safe extrusion temperature; the printer/plugin error will explain when it is too cold or in another invalid state. Leave extruder unset to use the printer's currently active tool, which is almost always what you want. Setting it explicitly selects that tool first, and on a tool-changing printer that starts a physical tool change, which can take a long time and may make this call time out. If the hotend is still heating, wait for it with wait_for_printer_state using a heater of Tool and heater_at_or_above_celsius, then extrude once it's at temperature. Use only at the user's request or with explicit user permission and validation. This command can move printer hardware and is not supported by every platform. THIS COMMAND CAN CAUSE DAMAGE TO THE PRINTER IF THE HOTEND IS NOT HEATED OR AT TEMPERATURE. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
get_connection_info
ChatGPTDescription: Returns the local connection information known by the OctoEverywhere plugin, along with the version of the OctoEverywhere plugin running on the printer host. Depending on the platform the connection details can include a local IP and port, API key, access code, serial number, username, or password. Use For: - The user asks for connection details, or those details are needed to diagnose or configure the selected printer. - Checking the plugin version, either to report it, to tell the user whether they need to update, or when another tool's behavior depends on the plugin version. Treat returned credentials as sensitive and do not expose them beyond the current task. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
get_file_details
ChatGPTDescription: Returns what the printer knows about one file, such as the slicer's estimated print time, filament usage, layer count, and the temperatures it was sliced for. Use a virtualPath returned by list_files. How much detail is available depends heavily on the platform, so treat every field except the path and name as optional. A field that is missing means the printer didn't report it, which is not the same as the value being zero. Anything the platform reports that has no dedicated field is passed through in PlatformDetails. Rough guide to what each platform returns: - Klipper/Moonraker: the most detail, including print time, filament length and weight, layer count and height, object height, nozzle diameter, filament type, slicer name and version, and sliced temperatures. - OctoPrint: print time, filament length, and object height, but only once OctoPrint has finished analyzing the file. - Bambu Lab: file size and modified time only, because its files are reached over FTP and carry no slicer metadata. - Elegoo and PrusaLink: not supported. Use For: - Telling the user how long a print will take or how much filament it needs, before starting it. - Confirming the right file was chosen before calling start_print. - Checking whether a file's sliced temperatures or nozzle diameter match the printer's current setup. This reads metadata only and never downloads the file, so it's safe to call on very large G-code files. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
get_live_webcam_snapshot
ChatGPTDescription: Returns a live webcam snapshot from the 3D printer requested by name. When to Use: If the user wants to see a live snapshot of their 3D printer's webcam feed. If you need to get a webcam snapshot from the 3D printer, to check on a print, to debug an issue, or various other purposes. * Any other use case where you need to get a live webcam snapshot from the 3D printer to see the print, hotend, bed, chamber, or any other part. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
get_octoeverywhere_plugin_logs
ChatGPTDescription: Returns the OctoEverywhere plugin's own diagnostic log from the printer host. By default, only the latest 500 lines are returned to keep the response focused. Increase tail_lines when older context is needed. Use For: - Diagnose OctoEverywhere connectivity, authentication, webcam, command, or platform-integration problems. - Inspect the exact plugin-side error after another tool fails. This is not the printer firmware log. Use list_files with the logs root when the platform exposes other logs. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
list_and_get_live_status_of_3d_printers
ChatGPTDescription: Retrieves a list of all 3D printers connected to the user's account, along with their real-time telemetry and status. This tool is universally compatible with major 3D printer platforms, including OctoPrint, Klipper, Bambu Lab, Creality, Elegoo, and PrusaLink. Key Data Returned: `name`: The primary identifier for the printer. `printer_platform`: The underlying platform type. Optional Filtering: Set `printer_platform` to select a platform family, `printer_name` to match part of a printer name case-insensitively, or both. When both are supplied, printers must match both filters. Omitting both returns all printers. Live Telemetry: The current printing status, print progress, and time remaining. Temperatures: The current bed and tool/hotend temperatures and their targets, when the platform reports them. Optional Material System: Set include_material_system to true to include AMS slots, spools, tools, routes, and platform-specific multi-material context. This is disabled by default because it can be large. Sub-status Details: The specific stage of the printing process or detailed error information. AI Diagnostics: Real-time 3D print quality and failure detection status, powered by OctoEverywhere's Gadget AI. When to Use: To retrieve the `name` or `printer_platform` required as inputs for subsequent tool calls. To list all 3D printers currently associated with a user's account. To check the live operational status, progress, and ETA of an active print. To read the printer's current temperatures, including to confirm the result of a set_temperature call or to check whether a heater has finished heating or cooling. * To diagnose print issues by fetching sub-status details, error codes, or AI failure detection states. Note that live status is cached for a few seconds, so call this again after a short wait if you are watching a temperature change. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
list_files
ChatGPTDescription: Lists file and folder metadata from the 3D printer, including names, virtual and native paths, sizes, modification times, permissions, and platform-specific metadata when available. This tool does not read file contents. Use For: - Browse printable files before starting, downloading, or deleting one. - Find printer configuration or log files on platforms that expose those roots. - Use the returned virtualPath exactly as the path argument of the other file tools. The optional root is normally gcode, config, or logs; supported roots vary by printer platform. Omit it to request every supported root. For example, OctoPrint exposes gcode and logs, while Klipper/Moonraker also exposes config. Not every platform supports the file tools at all. Elegoo and PrusaLink printers return an "unsupported" error for this tool and for upload_file, download_file, and delete_file. On those platforms, use send_printer_command to browse files through the printer's own native API instead. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_cancel_print
ChatGPTDescription: Allows you to send a cancel command to the 3D printer, canceling the current print job. Use For: - Use this if the user asks you to cancel the current print job. - Use this if you need to stop the printer immediately for any reason. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_home_command
ChatGPTDescription: Allows you to send a home command to the 3D printer for all axes. This can not be done while the printer is printing. NOTE that this tool call will block on some 3D printers until the homing process is complete. This can take upwards of 30 seconds or more. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_move_axis
ChatGPTDescription: Allows you to send a move axis command to the 3D printer, moving the specified axis. This can not be done while the printer is printing. Use For: - Use this if the user asks you to move a specific axis of the printer. - Use this if you need to adjust the printer's position. - Use if you need to debug an issue with the printer's position or calibration. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_pause_print
ChatGPTDescription: Allows you to send a pause command to the 3D printer, pausing the current print job. Use For: - Use this if the user asks you to pause the current print job. - Use this if you need to temporarily stop the printer for any reason. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_printer_command
ChatGPTDescription: Sends one native command directly to the selected printer's local control API and returns the complete native request/response envelope. Choose the transport from printer_platform returned by list_and_get_live_status_of_3d_printers: - OctoPrint or PrusaLink: Http. Sends an API REST query directly to the OctoPrint or PrusaLink API. Set top-level path, optional method/headers, and use request as the JSON body. For non-JSON bodies, leave request empty and supply body_text or body_base64. Paths must begin with one / and can only target that printer's local API. - Klipper/Moonraker: Websocket. Sends websocket messages directly to the Moonraker WebSocket API and returns the WebSocket response from Moonraker. Use request = {"Method":"printer.objects.query","Params":{"objects":{"toolhead":null}}} or another Moonraker JSON-RPC method. - Bambu Lab: Mqtt. Sends a full MQTT message to the Bambu Lab MQTT server and returns the MQTT message response. Put the complete native Bambu MQTT JSON payload in request; it is sent as-is. Example: {"info":{"sequence_id":"0","command":"get_version"}}. - Elegoo Centauri Carbon (first generation): Websocket. Sends websocket messages directly to the Elegoo Centauri Carbon (first generation) WebSocket API and returns the WebSocket response. Use request = {"Cmd":1,"Data":{}} for its integer SDCP command id and data. - Elegoo Centauri Carbon 2: Mqtt. Sends MQTT messages directly to the Elegoo Centauri Carbon 2 MQTT server and returns the MQTT message response. Use request = {"Method":1,"Params":{}} with its integer command id. Set wait_for_response=false for native commands that do not reply. timeout_seconds applies when waiting and must be 1-1800. A successful transport can still return isError=true; inspect response for the native protocol error, correct the request, and retry only when safe. Not every native command sends a matched reply, and waiting for one that never comes fails with a timeout rather than an error from the printer. If a command times out but you expected it to work, retry it with wait_for_response=false. A known example is the Bambu pushall command, which reports its state asynchronously instead of replying to the request. The complete native response is returned with no size limit, and some native queries return very large payloads. For example, Moonraker's server.temperature_store returns thousands of samples per sensor. Prefer the narrowest query available, such as requesting specific objects from printer.objects.query. Note that a native command that changes printer state may not be reflected by list_and_get_live_status_of_3d_printers immediately, because live status is cached for a few seconds. This is a powerful expert tool. Use it only when a safer dedicated tool cannot perform the requested action. Use for: - Debugging and troubleshooting issues. - Any task that requires querying information from the host software. - Any task that requires changing settings or configuration of the host software. - Getting status from the printer only exposed by the host software. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
send_resume_print
ChatGPTDescription: Allows you to send a resume command to the 3D printer, resuming the current print job. Use For: - Use this if the user asks you to resume the current print job. - Use this if you need to continue the printer after a pause. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
set_lights
ChatGPTDescription: Allows control to turn on or off the light on the 3D printer. A light name can be specified if the printer has multiple lights, otherwise the default light will be controlled. Generally the default light is a chamber light, that will add light to the webcam's viewport. Use For: - Use this if the user asks you to turn on or off lights on the 3D printer. - Use this if you need to add extra light to the webcam snapshot, to see the print or printer better. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
set_temperature
ChatGPTDescription: Sets one or more supported printer heater targets in Celsius. At least one target is required. A target of 0 turns that heater off. Safety limits enforced by OctoEverywhere: - Bed: 0-75°C - Chamber: 0-75°C - Tool/hotend: 0-260°C Temperature control is only implemented on Klipper/Moonraker and Elegoo Centauri Carbon 2 printers. OctoPrint, Bambu Lab, PrusaLink, and the first generation Elegoo Centauri Carbon return a "Not Supported" error; on those platforms set temperatures with send_printer_command using the platform's native API. To read the current temperatures back, including to confirm this command took effect, use list_and_get_live_status_of_3d_printers. Its live status is cached for a few seconds, so allow a short wait before re-reading. Heating and cooling take minutes. To wait for a heater to reach its target, use wait_for_printer_state with a heater and heater_at_or_above_celsius, rather than polling the status repeatedly. Use heater_at_or_below_celsius the same way to wait for a heater to cool. If a target of 0 is rejected with "At least one heater must be specified", the printer is running an older plugin that could not turn a heater off. In that case cool the heater with send_printer_command instead, using the platform's native command (for example the M140 S0 and M104 S0 G-code commands on Klipper), and tell the user to update their OctoEverywhere plugin. Not every platform exposes temperature control. VERY IMPORTANT - Use only at the user's request or with explicit user permission and validation. The user must always keep the printer attended while heaters are active. THIS CAN BE A VERY DANGEROUS COMMAND, THE HOTEND CAN START FIRES IF IT'S NOT READY TO PRINT. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
start_print
ChatGPTDescription: Starts printing a file already stored on the printer. First use list_files and pass its exact virtualPath as path. Platform options: - OctoPrint, Klipper, and Bambu only require path. - PrusaLink can optionally set storage (default: local). - Bambu 3MF project files can set plate, AMS usage/mapping, flow calibration, timelapse, bed leveling, vibration calibration, and layer inspection. Bambu G-code files ignore project-only options. list_files is not supported on Elegoo and PrusaLink printers. On those platforms, find the printable file name with send_printer_command against the printer's native API, then pass it here as path. Use get_file_details first to check the file's estimated print time and filament usage, and to confirm with the user that this is the file they meant. Use only when the user clearly asks to start the selected print. Starting a print can heat and move the printer, and prints can run for many hours and consume filament. Confirm the exact file with the user before starting it. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
upload_file
ChatGPTDescription: Uploads a file to the printer's virtual file system. Supply the content as either UTF-8 text or standard base64, but not both. Existing-file behavior is controlled by the printer platform and may overwrite a file at the same path. The path must begin with a virtual root the platform supports, the same roots reported by list_files: - gcode/ for printable files, such as gcode/models/benchy.gcode. - config/ for printer configuration files, such as config/printer.cfg, on platforms that expose a config root (for example Klipper/Moonraker). Use For: - Upload G-code or another printable file supplied by the user. - Put a generated text file onto a printer before starting it. - Putting or updating printer system files or config files. Do not invent or modify G-code without the user's direction. For binary files such as 3MF, use base64. Editing a config file can stop a printer from starting. Only write to config/ at the user's explicit request, and download the existing file first so the change can be reverted. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.
wait_for_printer_state
ChatGPTDescription: Waits until a 3D printer reaches one of the requested conditions, then returns its live status. This blocks while it waits, so it replaces repeatedly calling the list tool in a polling loop. This waits for two kinds of thing, and returns as soon as any one of them happens: 1. A printer state, given in conditions. 2. A heater reaching a temperature, given with heater plus either heater_at_or_above_celsius or heater_at_or_below_celsius. Supported conditions: - Idle - the printer is on and not printing. - Printing - the printer is actively printing, which includes warming up and resuming. - Paused - the print is paused. - PrintComplete - the print finished. - PrintCancelled - the print was cancelled. - Error - the printer, host, or plugin connection is in an error state. - Offline - the printer went offline. - PrintingStopped - the printer is no longer printing for any reason, meaning complete, cancelled, idle, error, or offline. Use this to wait for a print to finish without having to guess how it will end. - AnyStateChange - the status changed from whatever it was when this call started. Pass several conditions to wait for whichever happens first, such as PrintComplete and Error together. A temperature can be combined with states the same way, for example waiting for the bed to reach temperature or the printer to go into an error state, whichever comes first. Waiting on a temperature is the normal way to follow up a set_temperature call, since heating and cooling take minutes. Use heater_at_or_above_celsius when heating and heater_at_or_below_celsius when cooling, for example to wait until a hotend is cool enough to be safe. Heaters oscillate by around a degree once they settle, so a temperature counts as reached when it is within 1°C of the requested value. Without that a wait for an exact target could never finish. When to Use: To wait for a print to finish before reporting back or doing something else. To wait for a heater to finish heating before extruding or starting a print, or to finish cooling before telling the user the printer is safe. To confirm a command took effect, such as waiting for `Paused` after a pause, instead of immediately re-reading a status that is cached for a few seconds. To wait out a slow operation like homing or a tool change. Returns as soon as a condition is met. If the timeout is reached first, this returns normally with condition_met set to false and the current status, rather than failing - call it again to keep waiting. This polls the printer every few seconds, so a condition that is met and then reverts very quickly can be missed. Do not use this to wait for something that needs the user to act on the printer, since it will just block until the timeout. IMPORTANT REMINDER! NEVER ASSUME OR GUESS the printer_name value of a 3D printer. You must always use name values returned by the list tool as a value for printer_name.