← Back to directory
M

MCP 3D Printer Server

Community
Connect MCP clients to major 3D printers for STL/3MF editing, slicing, and printing.
Category
Other #124 of 230
Stars
★ 254 Very popular
Transport
stdio (local process) · Streamable HTTP
Runtime
Node.js 18+ · Docker
Credentials
API key / credential required
License
GPL-2.0
Last commit
Tools
23
53FMRS · D

This server bridges MCP clients to multiple 3D printer management systems, covering status queries, file management, print control, and fairly complete STL editing, slicing, and visualization, with Bambu Lab 3MF printing, FULU OrcaSlicer-bambulab integration, and bridge diagnostics. It is community-maintained rather than vendor-official, licensed under GPL-2.0, and supports the local stdio and streamable-http transports. It suits users who want to drive print workflows in natural language, but it requires printer credentials and LAN access, STL handling of large files strains memory, and the Bambu FTP channel and model-preset configuration carry real risks, while some features (such as Bambu real-time status and FULU macOS slicing) still have known limitations.

Strongest · Documentation 14/20 Weakest · Security and permissions 8/20

Reliability
9/20
Security and permissions
8/20
Maintenance
11/20
Documentation
14/20
Setup experience
11/20
Why each score
Reliability 9/20
Static review rests only on README text; no committed test files or CI workflows are visible, so the claim of 'Added real behavior tests for both transports' is an assertion, not verifiable evidence, capping this dimension at 12. Declared tools diverge from described behavior in several places the README itself admits: Bambu getStatus only confirms an MQTT connection, AMS mapping is placeholder logic, MD5 hash is not implemented, setTemperature depends on firmware acceptance, and startJob targets only .gcode files. The roadmap lists many unfinished capabilities. Dependencies are heavy and external (bambu-js, basic-ftp, Three.js, an external slicer binary, the FULU bridge runtime), producing environment-shaped failure modes. The self-reported macOS FULU slicing SIGSEGV plus unkillable UE processes is a genuine known defect. Deductions: no visible test/CI evidence, declared-vs-implemented gaps, failures gated on external components. Credit: candid disclosure of limits and named failure modes makes the happy path plausible.
Security and permissions 8/20
No red lines triggered: no malware, credential theft, covert exfiltration, fabricated maintainer identity, or real tokens in install examples. Credentials (API_KEY, BAMBU_TOKEN, BAMBU_SERIAL) arrive via environment variables or per-call parameters; there is no evidence of logging or exfiltrating them, but no explicit sanitization statement either. Risks cluster around: (1) the README states Bambu FTP file operations may be plain, unsecured FTP, an exposure on the network path; (2) several tools carry dangerous side effects — print_3mf, start_print, cancel_print, set_printer_temperature, process_and_print_stl can drive physical hardware, and beyond the required bambu_model and a temperature-confirm tool there is no systematic human confirmation gate described; (3) executable-selecting arguments (slicer_path, bridge_command, plugin_dir) are correctly off by default (MCP_ALLOW_EXECUTABLE_ARG=false) with an explicit prompt-injection rationale, which is good least-privilege design, but once enabled a model description or 3MF metadata can steer which local program launches; (4) Bambu printing stays on local MQTT/FTPS and does not silently switch to a cloud path, keeping the boundary clear. Against the anchor where 10 means main risks are visible but permission/confirmation/scoping is incomplete, this lands at 8.
Maintenance 11/20
The repository is not archived, has 233 stars, one open issue, an explicit GPL-2.0 license, and the README shows substantive recent work (dual transports, FULU integration, Bambu reliability fixes, Docker modernization). Static evidence is limited, though: commit cadence, release rhythm, dependency-update policy, and a security-response channel cannot be verified, and the Maintenance and Stars badges link to a yourusername placeholder, a documentation defect that hints at loose governance and versioning. The roadmap carries many long-standing unfinished items (full MQTT status, AMS mapping, MD5, preset discovery, parity across vendors), indicating maintenance is ongoing but coverage is not closed. No contributor governance, changelog, or disclosure process is visible. Against the 10-point anchor (active but governance/versioning gaps), this sits slightly above at 11.
Documentation 14/20
Documentation is layered: install paths (npm/source/Docker), itemized configuration, per-vendor ports and auth, JSON parameter examples for every tool and resource, platform-specific Bambu and FULU setup, explicit memory/visualization/performance limitations, an MCP safety appendix, and a table of client config file locations. Its notable strength is proactive disclosure of unfinished work and known failures (macOS FULU slicing crash, request for Windows testers, uncertain AMS behavior, plaintext FTP risk), which is genuinely useful for a static assessment. Deductions: documentation contradicts capability in places (the unverifiable test claim; placeholder badge URLs), some variables require users to infer paths (the BAMBU_STUDIO_CONFIG_PATH examples), no authoritative versioned tool schema is available to cross-check against (no cached manifest), and troubleshooting is descriptive rather than reproducible step-by-step. Interpolating above the 'usable but hidden assumptions and troubleshooting gaps' anchor of 10 gives 14.
Setup experience 11/20
The install path is clear: global npm install or source plus npm link, a Docker/Docker Compose route, and concrete client config locations with JSON snippets for Claude Desktop, Cursor, and Codex. Reaching a working connection is still demanding and platform-divergent: Bambu requires a serial, an access token, a printer model from seven enumerations, Developer Mode plus LAN-Only Mode; slicing requires supplying an external executable and setting SLICER_PATH/SLICER_TYPE; the Docker image ships no slicer by default and requires Dockerfile edits; and the FULU path differs per OS with distinct scripts and runtime directories, with the README stating macOS is unverified and Windows needs testers. This is a manual, fragile, platform-coupled assembly. Because no CI workflow or committed tests appear in the static material as execution evidence, setup is capped at 15; judged as 'works but manual/fragile,' it scores 11.

Static review · not runListed 2026-09-10

Read the FMRS scoring method →

Fit and risk

What it can accessReads local filesWrites / deletes local filesRuns commands or codeUses the network

Best for

  • Users with OctoPrint, Klipper, Duet, Repetier, Bambu Lab, Prusa, or Creality printers
  • Users who want to drive printing and model workflows from an MCP client in natural language
  • Technical users needing an end-to-end modify-STL, slice, and print workflow
  • Bambu users using FULU OrcaSlicer-bambulab or Bambu Studio as the project slicer

Not for

  • Users without any supported printer or printer management system
  • Users unwilling to provide printer credentials (API keys, access tokens, serial numbers)
  • Users expecting to override slicer settings such as layer height or temperature directly from MCP (must be done before generating the 3MF)
  • Users expecting complete real-time streaming Bambu status semantics (status reading remains limited)
  • Bambu users without Developer Mode and LAN Only Mode enabled or whose printer is not on the same network

Required permissions

  • API key or Bearer token for the printer management system
  • Bambu Lab serial number (BAMBU_SERIAL) and access token (BAMBU_TOKEN)
  • Network access to the printer's local network (including Bambu MQTT port 8883 and FTPS port 990)
  • Read/write access to the local filesystem for STL, G-code, and 3MF files and the temp directory
  • Ability to launch external slicer executables (SLICER_PATH) and optionally the FULU bridge command
  • Optional MCP_ALLOW_EXECUTABLE_ARG=1 to accept per-call local executable selectors

Risks and side effects

  • STL operations load entire models into memory; large files (e.g., over 10MB) can cause out-of-memory issues
  • Bambu file operations may use unsecured plain FTP, exposing transfers to network eavesdropping
  • A wrong Bambu model preset (bambu_model) can generate dangerous G-code and cause the bed to crash into the nozzle and damage the printer
  • Allowing per-call executable paths (MCP_ALLOW_EXECUTABLE_ARG) lets untrusted input choose which local program runs; enable only for trusted diagnostics
  • Tool output should be treated as untrusted input, so prompt injection is a risk and destructive operations should have human confirmation gates
  • Credentials are stored as environment variables in client config, so a leak grants printer control

Setup

Before you start

Runtime:Node.js 18+ · Docker

API_KEY optionalsecret API key for non-Bambu printer management systems (e.g., OctoPrint, Prusa Connect), generated in each system's web interface.
BAMBU_TOKEN optionalsecret Bambu printer access token, shown on the printer touchscreen under Settings > Network > LAN Mode.
Other optional settings (27)
PRINTER_HOST optional Printer IP address or hostname.
PRINTER_PORT optional Printer HTTP API port, e.g., OctoPrint default 80, Klipper default 7125.
PRINTER_TYPE optional Printer type: octoprint, klipper, duet, repetier, bambu, prusa, or creality.
TEMP_DIR optional Directory where the server stores temporary files.
BAMBU_SERIAL optional Bambu printer serial number, found on the printer's sticker or in Bambu Studio's Device Management; required for Bambu printers.
BAMBU_MODEL optional Bambu printer model (p1s, p1p, x1c, x1e, a1, a1mini, h2d); required for print operations.
BED_TYPE optional Bed plate type, e.g., textured_plate, cool_plate, engineering_plate, hot_plate.
NOZZLE_DIAMETER optional Nozzle diameter in mm, default 0.4.
SLICER_TYPE optional Slicer type, e.g., prusaslicer, cura, orcaslicer, orcaslicer-bambulab, bambustudio.
SLICER_PATH optional Local path to the slicer executable.
SLICER_PROFILE optional Path to the slicer profile file.
FULU_ORCA_PATH optional Path to the FULU OrcaSlicer-bambulab executable; alias used when SLICER_PATH is unset.
ORCASLICER_BAMBULAB_PATH optional Alias for the FULU OrcaSlicer-bambulab executable path.
FULU_ORCA_PLUGIN_DIR optional FULU OrcaSlicer app plugin directory, e.g., the Contents/MacOS path on macOS.
ORCASLICER_BAMBULAB_PLUGIN_DIR optional Alias for the FULU plugin directory.
PJARCZAK_MAC_RUNTIME_DIR optional FULU BambuNetwork bridge runtime dir; macOS default is ~/Library/Application Support/OrcaSlicer/macos-bridge/runtime.
FULU_BAMBU_BRIDGE_COMMAND optional FULU BambuNetwork bridge command used for diagnostic RPC calls.
BAMBU_STUDIO_CONFIG_PATH optional Bambu Studio user config directory, used to read printer/filament/process presets.
MCP_TRANSPORT optional MCP transport mode: stdio or streamable-http.
MCP_HTTP_HOST optional Listen address for HTTP transport, default 127.0.0.1.
MCP_HTTP_PORT optional Listen port for HTTP transport, default 3000.
MCP_HTTP_PATH optional HTTP endpoint path, default /mcp.
MCP_HTTP_STATEFUL optional Whether HTTP transport keeps stateful sessions.
MCP_HTTP_JSON_RESPONSE optional Whether HTTP transport returns JSON responses.
MCP_HTTP_ALLOWED_ORIGINS optional Allowed origins list for HTTP transport.
BLENDER_MCP_BRIDGE_COMMAND optional Bridge command used by blender_mcp_edit_model in execute=true mode.
MCP_ALLOW_EXECUTABLE_ARG optional Whether per-call executable selectors (slicer_path, bridge_command) are accepted; off by default to prevent injection.
  1. Ensure Node.js 18 or higher is installed.
  2. Install globally with npm install -g mcp-3d-printer-server, or from source via git clone, npm install, and npm link.
  3. Create a .env file in the directory where you run the server or set environment variables (API_KEY, PRINTER_HOST, PRINTER_PORT, PRINTER_TYPE, and for Bambu also BAMBU_SERIAL, BAMBU_TOKEN, BAMBU_MODEL).
  4. Add an mcpServers entry to your MCP client config with command npx and args ["-y", "mcp-3d-printer-server"], putting printer connection values in env.
  5. Restart your client (for Codex, run /mcp or codex mcp list to confirm the server loaded).
  6. Alternatively run with Docker and Docker Compose: copy .env.example to .env, then run docker-compose up --build -d; install slicers inside the container rather than mounting host executables.
claude_desktop_config.json
{
  "mcpServers": {
    "3dprint": {
      "command": "npx",
      "args": ["-y", "mcp-3d-printer-server"],
      "env": {
        "PRINTER_HOST": "your_printer_ip",
        "PRINTER_TYPE": "bambu",
        "BAMBU_SERIAL": "your_printer_serial",
        "BAMBU_TOKEN": "your_access_token",
        "BAMBU_MODEL": "p1s",
        "SLICER_TYPE": "orcaslicer-bambulab",
        "SLICER_PATH": "/path/to/FULU/OrcaSlicer",
        "FULU_ORCA_PLUGIN_DIR": "/Applications/OrcaSlicer.app/Contents/MacOS"
      }
    }
  }
}

Shown for Claude Desktop. Other clients may use a different file or key (VS Code uses "servers") — the configurator below converts it.

.vscode/mcp.json
{
  "servers": {
    "3dprint": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-3d-printer-server"
      ],
      "env": {
        "PRINTER_HOST": "your_printer_ip",
        "PRINTER_TYPE": "bambu",
        "BAMBU_SERIAL": "your_printer_serial",
        "BAMBU_TOKEN": "your_access_token",
        "BAMBU_MODEL": "p1s",
        "SLICER_TYPE": "orcaslicer-bambulab",
        "SLICER_PATH": "/path/to/FULU/OrcaSlicer",
        "FULU_ORCA_PLUGIN_DIR": "/Applications/OrcaSlicer.app/Contents/MacOS"
      }
    }
  }
}

Goes in your project's .vscode/mcp.json (VS Code uses a "servers" key).

Terminal
claude mcp add 3dprint -e PRINTER_HOST=your_printer_ip -e PRINTER_TYPE=bambu -e BAMBU_SERIAL=your_printer_serial -e BAMBU_TOKEN=your_access_token -e BAMBU_MODEL=p1s -e SLICER_TYPE=orcaslicer-bambulab -e SLICER_PATH=/path/to/FULU/OrcaSlicer -e FULU_ORCA_PLUGIN_DIR=/Applications/OrcaSlicer.app/Contents/MacOS -- npx -y mcp-3d-printer-server

Run it in a terminal; replace any <…> placeholders with your own values first.

Check that it works

After restarting the client, confirm that tools like get_printer_status, slice_stl, and print_3mf appear in the tool list, then ask "What's the current status of my 3D printer?" to verify the connection.

Troubleshooting

  1. Verify Node.js is version 18 or higher
  2. Check that PRINTER_HOST, PRINTER_PORT, PRINTER_TYPE, and API_KEY/token are correct
  3. For Bambu, confirm BAMBU_SERIAL, BAMBU_TOKEN, and BAMBU_MODEL are set and that Developer Mode and LAN Only Mode are enabled
  4. Make sure the printer and the machine running the server are on the same local network
  5. If slicing fails, check SLICER_TYPE, SLICER_PATH, and the slicer command's stderr output
  6. When using FULU OrcaSlicer-bambulab, call check_fulu_orca_setup first to inspect the runtime payload and install commands
  7. On macOS, FULU CLI slicing may crash or leave uninterruptible processes; SLICER_TYPE=bambustudio is the known-good fallback
  8. If a probe or slicing tool reports an executable-argument error, check whether MCP_ALLOW_EXECUTABLE_ARG is set
  9. Confirm the client config file location is correct and restart the client after edits

Things to try

Once connected, you can ask your AI assistant things like:

  • What's the current status of my 3D printer?
  • Extend the base of model.stl by 2 inches, slice it, and start the print.
  • Print ~/Downloads/my_model.3mf on my Bambu P1S.
  • Rotate this STL model 90 degrees around the Z axis.

Tools 23

get_stl_info read-only
Get detailed information about an STL file, including dimensions, vertex count, and bounding box.
extend_stl_base writes
Extend the base of an STL file by a specified amount.
scale_stl writes
Scale an STL model uniformly or along specific axes.
rotate_stl writes
Rotate an STL model around specific axes in degrees.
translate_stl writes
Move an STL model along specific axes in millimeters.
merge_vertices writes
Merge vertices closer than a specified tolerance, helping close small gaps.
center_model writes
Translate the model so its bounding box center sits at the world origin (0,0,0).
lay_flat writes
Attempt to identify the largest flat surface and rotate the model so it faces down on the XY plane (Z=0).
Show 15 more tools
modify_stl_section writes
Apply a transformation to a selected section (top, bottom, center, or custom bounds) of an STL file.
generate_stl_visualization read-only
Generate multi-angle SVG visualizations of an STL file (front, side, top, and isometric views).
slice_stl writes
Slice an STL file to generate G-code using an external slicer.
confirm_temperatures read-only
Confirm temperature settings in a G-code file.
process_and_print_stl writes
End-to-end workflow: process an STL (extend base), slice it, confirm temperatures, and start printing.
get_printer_status read-only
Get the current status of the 3D printer (temperatures, print progress, etc.).
list_printer_files read-only
List files available on the printer.
upload_gcode writes
Upload G-code content or a local G-code file path to the printer.
start_print writes
Start printing a file that is already on the printer.
cancel_print destructive
Cancel the current print job.
set_printer_temperature writes
Set the temperature of a printer component.
check_fulu_orca_setup read-only
Inspect the FULU OrcaSlicer-bambulab executable, platform runtime payload, setup commands, and optionally probe the BambuNetwork bridge.
fulu_bambu_network_rpc read-only
Call one FULU BambuNetwork bridge JSON RPC method; read-only methods are allowed by default, mutating methods require explicit opt-in, and print methods also require bambu_model.
print_3mf writes
Upload a sliced .3mf file via FTP and start the print job on a Bambu printer via MQTT, optionally auto-slicing first.
blender_mcp_edit_model writes
Blender bridge tool with an optional execution mode for model-edit collaboration workflows.

Use cases

Query printer status, temperatures, and print progress in natural language
List, upload, and manage G-code files on the printer
Modify STL models with scaling, rotation, translation, and base extension
Slice STL files and confirm G-code temperatures
Print sliced 3MF files on Bambu Lab printers
Generate multi-angle SVG visualizations of STL models
Read Bambu Studio machine, filament, and process presets

Supported clients

Claude Desktop
Claude Code
Cursor
Codex

Listed from the project's documentation, not tested by this site.

Overview

This is a Model Context Protocol (MCP) server that connects MCP clients to several 3D printer management systems: OctoPrint, Klipper (via Moonraker), Duet, Repetier, Bambu Lab, Prusa Connect, and Creality Cloud. It can read printer status and temperatures, list files on the printer, upload G-code, start and cancel print jobs, and set temperatures. It also offers substantial STL manipulation: scaling, rotation, translation, base extension, vertex merging, centering, laying flat, section-specific edits, detailed analysis, and multi-angle SVG visualization. It can slice STL files into G-code with an external slicer, confirm temperature settings in G-code, and upload a sliced 3MF to a Bambu Lab printer via FTP to start a job over MQTT, auto-slicing unsliced 3MF files with FULU OrcaSlicer-bambulab or Bambu Studio when a project slicer is configured. The Bambu integration also provides FULU runtime setup inspection (check_fulu_orca_setup), guarded FULU BambuNetwork bridge RPC calls (fulu_bambu_network_rpc), and resources for reading Bambu Studio presets. The server supports stdio and streamable-http local transports, requires Node.js 18 or higher, and is licensed under GPL-2.0.

Similar servers

BioMCP 75 · B

One binary. One grammar. Evidence from the biomedical sources you already trust.

★ 659 · Tools 11 Compare with this →

Source revision e61a2e960f50 Data synced 2026-10-19 Read the FMRS scoring method