An open-source MCP server that gives Claude full control over your Prusa 3D printer — from finding a model online to slicing and printing it, entirely hands-free. Future works include orchestrating N printers for production optimisation.
OpenGalatea bridges Claude and your Prusa printer through the Model Context Protocol (MCP). It is designed for developers who want to automate 3D printing workflows, run printing farms, or experiment with AI-driven fabrication pipelines.
Named after Galatea — the ivory statue brought to life. OpenGalatea brings your printer to life through conversation.
- 🔍 Search Printables.com for models directly from Claude
- 📥 Import STL files from URLs, Printables, or Google Drive
- ⚙️ Auto-slice with PrusaSlicer profiles (printer, material, print quality)
- 🤖 AI-recommended print loadout based on your part's requirements
- 🖨️ Full printer control — start, pause, resume, stop, monitor
- 📁 Manage files on the printer's USB storage
- 🐳 Fully Dockerised — one command to get started
- 📟 Runs on the Edge on Rasberry Pis so you can deploy a small local server next to your printer !
- Robotic arm integration — automatically clear the print plate when a job finishes
- Plate cleaning arm — spray isopropyl alcohol and remove filament residue
- Print farm orchestrator — optimise job scheduling across 1 or N printers
- Iterative part improvement — model → print → inspect → improve, in a loop
- Python + FastMCP
- PrusaSlicer (CLI) for slicing
- Docker + Docker Compose
- ngrok for remote tunnel access
- Docker & Docker Compose
- A Prusa printer running firmware 6.4.0 or later, connected to your local network
- ngrok (free tier works fine)
- Python 3.11+ (only needed if running without Docker)
- Printer setup:
Update your printer to firmware ≥ 6.4.0 via Settings → FW Update. Then connect it to your Wi-Fi network. Your credentials (
PRINTER_IP,PRINTER_USER,PRINTER_PASSWORD) can be found on the printer under Settings → Network → PrusaLink.
git clone https://github.com/GLechevalier/OpenGalatea.git
cd OpenGalateacp .env.example .envThen fill in your values:
PRINTER_IP=192.168.1.xx
PRINTER_USER=maker
PRINTER_PASSWORD=your_password
BASE_URL=http://192.168.1.xx
NGROK_BASE_URL=https://xxxx.ngrok-free.dev
PRUSA_SLICER_EXE=prusa-slicer
UPLOAD_DIR=/app/uploadsSee Configuration for a full description of each variable.
mkdir uploads
chmod 777 uploads/docker compose up --buildThe MCP server will start on http://localhost:8000.
In a separate terminal:
ngrok http 8000Copy the generated HTTPS URL (e.g. https://xxxx.ngrok-free.dev) and set it as NGROK_BASE_URL in your .env file, then restart the container.
All configuration is done via environment variables in your .env file.
| Variable | Description | Example |
|---|---|---|
PRINTER_IP |
Local IP address of your Prusa printer | 192.168.1.28 |
PRINTER_USER |
HTTP Basic Auth username for the printer | maker |
PRINTER_PASSWORD |
HTTP Basic Auth password for the printer | your_password |
BASE_URL |
Base URL of your printer (used for local API calls) | http://192.168.1.28 |
NGROK_BASE_URL |
Your public ngrok HTTPS URL (used to expose the MCP server) | https://xxxx.ngrok-free.dev |
PRUSA_SLICER_EXE |
PrusaSlicer executable name or full path | prusa-slicer |
UPLOAD_DIR |
Directory where uploaded STL and bgcode files are stored | /app/uploads |
Your printer's IP, username, and password are available on the printer under Settings → Network → PrusaLink.
UPLOAD_DIRdefaults to/app/uploadsinside the Docker container and is already pre-configured — only change it if you customise the Docker setup.
Once the server is running and exposed via ngrok, add OpenGalatea as an MCP server in your Claude client.
{
"mcpServers": {
"opengalatea": {
"url": "https://xxxx.ngrok-free.dev/mcp"
}
}
}Go to Settings → Integrations → Add Integration and paste your ngrok URL:
https://xxxx.ngrok-free.dev/mcp
Once connected, Claude has access to the following tools:
| Tool | Description |
|---|---|
search_printables |
Search for models on Printables.com |
get_print_files |
Get the STL file list and download URLs for a model |
get_stl_download_url |
Refresh an expired signed download URL |
| Tool | Description |
|---|---|
upload_from_url |
Download an STL or .bgcode from a URL into the server |
list_uploads |
List files currently in the uploads folder |
delete_upload |
Remove a file from the uploads folder |
| Tool | Description |
|---|---|
list_printer_profiles |
List available printer profiles |
list_print_and_material_profiles |
List print quality and material profiles for a printer |
recommend_loadout |
Get an AI-recommended slice configuration for your part |
slice_stl |
Auto-orient and slice an STL into a .bgcode file |
confirm_filament |
Confirm the correct filament is loaded before printing |
| Tool | Description |
|---|---|
print_bgcode_file |
Upload a .bgcode to the printer and start the job |
get_status_of_printer |
Get temperatures, printer state, and job progress |
pause_print |
Pause the current print job |
resume_print |
Resume a paused print job |
stop_print |
Cancel the current print job |
list_files |
List files on the printer's USB storage |
delete_file |
Delete a file from the printer's USB storage |
Once Claude is connected to OpenGalatea, you can talk to it naturally. Here are some example prompts:
"Find me a parametric phone stand on Printables and print the best-rated one."
"Slice the file I just uploaded in draft mode with PETG and start printing."
"What's the current temperature of my printer bed?"
"Pause the print, I need to check something."
Claude will automatically follow the correct workflow: search → import → recommend settings → slice → confirm filament → print.
pip install -r requirements.txt
python main.pyMake sure PrusaSlicer is installed and accessible in your system PATH.
Contributions are very welcome! OpenGalatea is an early-stage project with a lot of ground to cover.
To contribute:
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit your changes (
git commit -m 'feat: add my feature') - Push and open a Pull Request
Please open an issue first for major changes so we can discuss the approach.
OpenGalatea builds on the shoulders of these open-source projects:
- PrintablesGraphQL by @100prznt — GraphQL client for the Printables.com API, used to search models and retrieve download URLs.
- Tweaker-3 by @ChristophSchranz — Auto-orientation engine for STL files, used under the hood when slicing to find the optimal print orientation.
This project is licensed under the MIT License.
MIT License
Copyright (c) 2026 GauthierLechevalier
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Made with ❤️ and melted plastic