OctoEverywhere
OctoEverywhere helps users monitor their connected 3D printers, check live print status and AI failure detection, view webcam snapshots and file listings, debug and fix common 3D printing issues, and use permission-controlled printer commands through ChatGPT. OctoEverywhere works with any kind of 3D printer, including those made by Bambu Lab, Prusa, Creality, Elegoo, Anycubic, QIDI, Snapmaker, Sovol, Flashforge, and more. OctoEverywhere works with OctoPrint, Klipper, Moonraker, Fluidd, Mainsail, PrusaLink, and more.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- CAD & 3D Design Tool Control
- Secondary Subcategories
- None listed
- Brand
- OctoEverywhere
- Access
- Account required
- First tracked
- 2026-07-31
- Tool count
- 20
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
OctoEverywhere is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT CAD & 3D Design Tool Control
View CategoryHow the Discoverability Score works
Organic discovery scoring for OctoEverywhere on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
20 tools agents can invoke
**Description:** 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`.
delete_file
**Description:** 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`.
download_file
**Description:** 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`.
extrude_filament
**Description:** 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_live_webcam_snapshot
**Description:** 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`.
get_octoeverywhere_plugin_logs
**Description:** 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_connection_info
**Description:** 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_file_details
**Description:** 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_and_get_live_status_of_3d_printers
**Description:** 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`.
list_files
**Description:** 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_cancel_print
**Description:** 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_home_command
**Description:** 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_move_axis
**Description:** 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_printer_command
**Description:** 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_pause_print
**Description:** 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`.
send_resume_print
**Description:** 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`.
set_temperature
**Description:** 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`.
start_print
**Description:** 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_lights
**Description:** 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`.
upload_file
**Description:** 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`.
wait_for_printer_state
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are OctoEverywhere alternatives on ChatGPT?
As of 2026-08-14, OctoEverywhere competes with HZplan, WalkMyPlan — Floor Plans in 3D in ChatGPT CAD & 3D Design Tool Control, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.