Skip to content

GLechevalier/OpenGalatea

Repository files navigation

🗿 OpenGalatea

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.


✨ Features

  • 🔍 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 !

🗺️ Roadmap

  • 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

🧰 Tech Stack

  • Python + FastMCP
  • PrusaSlicer (CLI) for slicing
  • Docker + Docker Compose
  • ngrok for remote tunnel access

📋 Prerequisites

  • 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.


🚀 Installation

1. Clone the repository

git clone https://github.com/GLechevalier/OpenGalatea.git
cd OpenGalatea

2. Configure environment variables

cp .env.example .env

Then 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/uploads

See Configuration for a full description of each variable.

3. Give write permissions to the uploads directory

mkdir uploads
chmod 777 uploads/

4. Start with Docker

docker compose up --build

The MCP server will start on http://localhost:8000.

4. Expose the server with ngrok

In a separate terminal:

ngrok http 8000

Copy 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.


⚙️ Configuration

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_DIR defaults to /app/uploads inside the Docker container and is already pre-configured — only change it if you customise the Docker setup.


🔌 Connecting to Claude

Once the server is running and exposed via ngrok, add OpenGalatea as an MCP server in your Claude client.

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "opengalatea": {
      "url": "https://xxxx.ngrok-free.dev/mcp"
    }
  }
}

Claude.ai (Integrations)

Go to Settings → Integrations → Add Integration and paste your ngrok URL:

https://xxxx.ngrok-free.dev/mcp

🛠️ Available Tools

Once connected, Claude has access to the following tools:

🔍 Discover Models

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

📥 Import Files

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

⚙️ Slice

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

🖨️ Print & Control

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

💬 Usage

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.


🔧 Running Without Docker

pip install -r requirements.txt
python main.py

Make sure PrusaSlicer is installed and accessible in your system PATH.


🤝 Contributing

Contributions are very welcome! OpenGalatea is an early-stage project with a lot of ground to cover.

To contribute:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feat/my-feature)
  3. Commit your changes (git commit -m 'feat: add my feature')
  4. Push and open a Pull Request

Please open an issue first for major changes so we can discuss the approach.


🙏 Credits

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.

📄 License

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

About

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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors