SkillAgentSearch skills...

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.

Install / Use

/learn @GLechevalier/OpenGalatea
About this skill

Quality Score

0/100

Supported Platforms

Claude Code
Claude Desktop
Cursor

README

🗿 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. We release the robot-arm update when we reach 1K stars ! 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.


Arm grabbing a finished printed piece

We are working on integrating a SO-ARM-100 to fully automate 3D printing, and assembly of 3d printed objects !


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

<p align="center">Made with ❤️ and melted plastic</p>

Related Skills

View on GitHub
GitHub Stars9
CategoryDevelopment
Updated2d ago
Forks4

Languages

Python

Security Score

85/100

Audited on Apr 8, 2026

No findings