Skip to content

Print from a conversation.

mcp-3d-printer-server connects Claude, Codex, and other MCP clients to the printers you already run: OctoPrint, Klipper, Duet, Repetier, Bambu Lab, Prusa, and Creality. Send your agent a link, a photo, or a message, and it can adapt the model, slice it, and start the print.

npx -y mcp-3d-printer-server
Slicer preview of one layer of a charm tag: an outer wall, two inner walls, and diagonal sparse infill.
Outer wallInner wallSparse infill

Thank you, FULU Foundation, Louis Rossmann, and the OrcaSlicer-bambulab contributors. Thank you for standing up for consumer ownership, open-source developers, repair rights, and owners whose working hardware should not be made worse by locked-down software.

This server treats the FULU OrcaSlicer-bambulab fork as a first-class slicer for Bambu Lab projects. See the FULU guide for setup and current status.

Set up with your agent

Tell your agent which printer system you use (OctoPrint, Klipper, Bambu Lab, Prusa, and so on) and its address, if you know them, then copy and paste this:

  1. Copy the request. It points your agent at the current setup guide and the list of supported printer systems.
  2. Paste it into the agent you want to connect. It uses that harness's own MCP configuration or installer and keeps your existing servers.
  3. Name your printer system. The agent asks only for what that backend needs, such as an API key or a Bambu access code, and keeps it out of chat.
  4. Check the result. The agent confirms that the server starts, lists its tools, and reads printer status. It doesn't start a print as a test.

Prefer to do it yourself? Follow the installation guide, find your printer's credentials, or run it in Docker.

text
Install mcp-3d-printer-server in the agent/harness I'm using now.

Read https://github.com/DMontgomery40/mcp-3D-printer-server/blob/main/docs/SETUP.md
for the current setup instructions and supported printer backends.

Detect my OS and harness, then use its native MCP configuration or installer.
Preserve my existing servers and settings. Prefer the published npm package
(npx -y mcp-3d-printer-server, stdio); use Node.js 24 if a runtime is needed.

Ask which printer system I use and set PRINTER_TYPE to match. Never guess it.
Then ask only for the values that backend needs:
- octoprint: PRINTER_HOST, PRINTER_PORT if not 80, API_KEY
- klipper (Moonraker): PRINTER_HOST, PRINTER_PORT (usually 7125)
- duet: PRINTER_HOST, PRINTER_PORT if not 80
- repetier: PRINTER_HOST, PRINTER_PORT (usually 3344), API_KEY
- bambu: PRINTER_HOST, BAMBU_SERIAL, BAMBU_TOKEN (the LAN access code),
  and BAMBU_MODEL
- prusa: PRINTER_HOST (PrusaLink address or connect.prusa3d.com), API_KEY
- creality: PRINTER_HOST, PRINTER_PORT if not 80, API_KEY (bearer token)
For Bambu Lab, confirm the exact printer model with me; never guess it, and
explain any LAN Only Mode or Developer Mode setting I need to enable.
Keep keys, tokens, and access codes in local/private configuration; do not
repeat them in chat.

Bambu Lab has the most hardware testing. The other backends use each
system's HTTP API and rely on community reports, so tell me plainly if a
backend does not respond as the guide describes.

Offer these optional extras, and set them up only if I choose them:
- Blender MCP for model edits: uvx mcp-for-blender (formerly blender-mcp,
  which now installs it as a compatibility wrapper). Its Blender addon must be
  installed, enabled, and connected inside Blender.
- A slicer for slice_stl: look for an installed PrusaSlicer, OrcaSlicer,
  FULU OrcaSlicer-bambulab, Bambu Studio, or CuraEngine before suggesting
  an install.
Configure executables in the server environment. Do not enable
MCP_ALLOW_EXECUTABLE_ARG. Leave print confirmation on: do not set
PRINT_REQUIRE_CONFIRMATION=0 or BAMBU_REQUIRE_CONFIRMATION=0 unless I ask
for a headless setup.

Verify that the MCP initializes, lists its tools, and reads printer status.
Do not start a print or change printer settings, including temperatures, as
a setup test. Tell me what worked and whether I need to restart or reload
the harness.

Ask for what you want

Send a link, a photo, or a message from wherever you are. Your agent works out the steps and checks in when a choice matters. More on what to ask.

Start from anything

  • “Here's a phone case on MakerWorld. Make it fit my iPhone 17 Pro Max and print it.”

    Your agent reads Apple's dimensional drawings, refits the case in Blender around the new camera and buttons, checks the fit, exports a verified STL, slices it for your printer, and asks before it starts the print. See it worked through.

  • “Can you print a replacement?”

    with a photo of a snapped cabinet clip

    It asks for a measurement or two where the fit matters, models the part, and prints it on the printer you choose.

  • “Make this bracket 20% bigger and give it a thicker base.”

    It scales the STL, extends the base, and reports the new dimensions before it slices anything.

Check on any printer

  • “How far along is the Bambu print?”

    It requests a fresh status report and gives you progress, the current layer, and time remaining.

  • “Is the Prusa done yet?”

    It reads the printer's status through PrusaLink and reports its state and job progress.

  • “What are the bed and nozzle temperatures on the OctoPrint printer?”

    It reads OctoPrint's printer state, including current and target temperatures.

  • “The first layer isn't sticking. Cancel it.”

    It sends the cancel command through that printer's backend, then checks the printer's status.

Slice and print

  • “Print this in PETG.”

    with an STL

    It slices with the PETG filament profile you've set up and checks the job's peak temperatures. The server then asks you to confirm before the print starts.

  • “Print the bracket I sliced last night on the Bambu.”

    It checks the plate's model, nozzle, bed type, materials, and temperatures against the live printer, then asks you to confirm before it uploads and starts the job.

  • “Send benchy.gcode to the Klipper printer, but don't start it yet.”

    It uploads the file through Moonraker so you can start it later.

Works with the printer you have

Set PRINTER_TYPE for your printer system. Every printer tool also takes a per-call type and host, so one server can reach more than one printer.

  • Most tested
  • Community-reported
  • Unverified
  • Bambu LabbambuMost testedMaintainer hardware testing, shared with the Bambu-only fork.
  • OctoPrintoctoprintCommunity-reportedUsed against a real OctoPrint instance in #4.
  • Klipper (Moonraker)klipperCommunity-reportedUsed with a Creality K1 Max through Moonraker in #16.
  • PrusaLink / Prusa ConnectprusaCommunity-reportedPrusaLink 0.8.1 status fixed after #11; Prusa Connect setup discussed in #9.
  • DuetduetUnverifiedNo hardware reports yet.
  • Repetier-ServerrepetierUnverifiedNo hardware reports yet.
  • CrealitycrealityUnverifiedNo hardware reports yet.

Bambu Lab modelsP1SP1PX1CX1EA1A1 miniH2D

See what each backend needs

It stops instead of guessing

  • A person confirms every print start and heat-up, on every printer, through MCP elicitation. Clients that can't ask are refused. Heater-off and cancel are never held up.
  • The exact G-code is inspected first. Every heater target has to fit hardware and material ceilings that only the server's configuration can raise.
  • Bambu print tools need your exact model, from BAMBU_MODEL or bambu_model. Without it they ask or stop, because G-code for the wrong model can damage hardware.
  • Slicer, bridge, and Blender programs come from server configuration. A per-call path is refused unless you opt in.
  • A successful response means the command was sent. Check status and the printer itself.

Released under the GPL-2.0 license. An independent open-source project, not affiliated with any printer manufacturer or host software.