loading…
Search for a command to run...
loading…
An MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, includi
An MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, including G-code execution, toolchanger operations, and real-time status monitoring.
A Model Context Protocol (MCP) server for controlling Klipper 3D printers via Moonraker API. Enables AI assistants like Claude to control your 3D printer through VS Code or any MCP-compatible client.
This server exposes 100+ tools for complete printer management, from basic operations to advanced diagnostics and toolchanger control. Perfect for Voron, RatRig, or any Klipper-based printer.
| Tool | Description |
|---|---|
get_printer_status |
Full status including temps, position, state |
run_gcode |
Execute any G-code command |
start_print |
Start a print job |
pause_print / resume_print |
Print flow control |
cancel_print |
Cancel current print |
home_axes |
Home X/Y/Z or all axes |
emergency_stop |
Immediate halt |
restart_klipper |
Firmware restart |
quad_gantry_level |
Run QGL procedure |
set_heater_temperature |
Set hotend/bed temps |
| Tool | Description |
|---|---|
get_active_tool |
Current tool status |
select_tool |
Pick up tool (T0-T5) |
drop_tool |
Return tool to dock |
initialize_toolchanger |
Run init sequence |
get_tool_offsets |
Tool offset values |
start_tool_alignment |
Alignment workflow |
test_dock_undock |
Test docking operations |
disable_crash_detection |
Disable during testing |
| Tool | Description |
|---|---|
get_tmc_status |
Driver status, currents, temps |
set_tmc_current |
Adjust run/hold current |
dump_tmc_registers |
Register diagnostics |
get_tmc_field / set_tmc_field |
Direct register access |
get_autotune_status |
TMC Autotune configuration |
list_tmc_steppers |
All TMC-equipped steppers |
| Tool | Description |
|---|---|
list_led_effects |
Available effects |
set_led_effect |
Activate an effect |
stop_led_effect / stop_all_effects |
Stop effects |
set_led_color |
Direct RGB/RGBW control |
list_led_scenes |
Preset scenes |
activate_led_scene |
Apply scene preset |
| Tool | Description |
|---|---|
list_gcode_files |
Browse G-code files |
get_file_metadata |
Slicer settings, thumbnails |
read_gcode_file |
Read file contents |
upload_gcode_file |
Upload new files |
delete_gcode_file |
Remove files |
search_in_file |
Search file contents |
list_config_files |
Klipper config files |
read_config_file |
Read printer.cfg etc. |
| Tool | Description |
|---|---|
get_camera_snapshot |
Capture current frame |
get_camera_stream_url |
MJPEG stream URL |
get_timelapse_settings |
Current timelapse config |
set_timelapse_enabled |
Enable/disable timelapse |
capture_timelapse_frame |
Manual frame capture |
render_timelapse |
Trigger video render |
configure_timelapse |
Adjust settings |
| Tool | Description |
|---|---|
get_print_history |
Past prints with filtering |
get_print_stats |
Cumulative statistics |
get_filament_usage_by_material |
Usage breakdown |
get_recent_prints |
Last N prints summary |
get_average_print_stats |
Average metrics |
export_printer_data |
Export all data to JSON |
| Tool | Description |
|---|---|
parse_klippy_log |
Analyze log for issues |
get_recent_errors |
Recent errors with context |
get_log_summary |
Log overview |
check_common_issues |
Config problem detection |
get_mcu_status |
MCU info and timing |
get_gcode_history |
Recent G-code commands |
get_troubleshooting_guide |
Problem-specific help |
analyze_print_failure |
Failure diagnosis |
check_config_issues |
Configuration validation |
get_system_performance |
CPU, memory, disk stats |
| Tool | Description |
|---|---|
get_temperatures |
All heater temperatures |
get_temperature_history |
Historical temp data |
analyze_temperature_data |
Anomaly detection |
set_temperature_alert |
Threshold alerts |
run_bed_mesh_calibrate |
Run bed mesh |
get_bed_mesh_profiles |
List saved meshes |
load_bed_mesh |
Load a mesh profile |
save_bed_mesh |
Save current mesh |
clear_bed_mesh |
Remove active mesh |
| Tool | Description |
|---|---|
list_spools |
All tracked spools |
get_active_spool |
Currently loaded spool |
set_active_spool |
Set spool for tool |
get_spool_details |
Full spool info |
check_low_filament |
Low filament warnings |
get_filament_usage_by_material |
Material statistics |
list_vendors |
Filament vendors |
list_filaments |
Filament database |
| Tool | Description |
|---|---|
send_notification |
Multi-channel notify |
send_discord_notification |
Discord webhook |
send_slack_notification |
Slack webhook |
send_pushover_notification |
Pushover push |
announce_tts |
Text-to-speech |
test_notifications |
Test all channels |
get_notification_settings |
Current config |
| Tool | Description |
|---|---|
backup_config |
Backup all configs |
list_backups |
Available backups |
restore_config |
Restore from backup |
check_maintenance_due |
Maintenance alerts |
log_maintenance |
Record maintenance |
get_maintenance_history |
Maintenance log |
get_audit_log |
Security audit trail |
export_printer_data |
Full data export |
| Tool | Description |
|---|---|
analyze_gcode_file |
Full file analysis |
validate_gcode |
Check for issues |
extract_gcode_comments |
Slicer comments |
get_gcode_moves |
Movement statistics |
extract_layer |
Get specific layer |
compare_gcode_files |
Diff two files |
| Tool | Description |
|---|---|
get_system_info |
CPU, memory, disk, temp |
get_network_info |
IP addresses, WiFi |
check_updates |
Available updates |
update_component |
Update Klipper/Moonraker |
refresh_update_status |
Check repos |
get_service_status |
Service states |
restart_service |
Restart services |
reboot_system |
System reboot |
shutdown_system |
System shutdown |
get_moonraker_config |
Moonraker info |
get_printer_objects |
Available Klipper objects |
# 1. SSH into your printer
ssh [email protected] # or [email protected] for Raspberry Pi
# 2. Clone the repository
cd ~
git clone https://github.com/Charleslotto/klipper-mcp.git
cd klipper-mcp
# 3. Create config from template
cp config.example.py config.py
# 4. Generate a secure API key and edit config
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
nano config.py # Paste the API key and adjust settings
# 5. Run the installer
chmod +x install.sh
./install.sh
# 6. Start the service
sudo systemctl start klipper-mcp
sudo systemctl enable klipper-mcp # Auto-start on boot
# Check service is running
sudo systemctl status klipper-mcp
# Test the API (replace with your API key)
curl -H "X-API-Key: your-api-key" http://localhost:8000/health
# View logs
journalctl -u klipper-mcp -f
Copy config.example.py to config.py and customize:
nano ~/klipper-mcp/config.py
Required settings:
| Setting | Description | Example |
|---|---|---|
API_KEY |
Secure authentication key | python3 -c "import secrets; print(secrets.token_urlsafe(32))" |
MOONRAKER_URL |
Your Moonraker address | http://localhost:7125 |
PRINTER_NAME |
Display name | Voron 2.4 |
Security settings:
| Setting | Description | Default |
|---|---|---|
ARMED |
Enable dangerous operations | false |
ADMIN_PIN |
PIN for destructive ops | 123456 |
Optional integrations:
| Setting | Description |
|---|---|
SPOOLMAN_ENABLED |
Enable Spoolman filament tracking |
TOOL_COUNT |
Number of toolchanger tools |
DISCORD_WEBHOOK_URL |
Discord notifications |
Add to your VS Code settings.json (Ctrl+Shift+P → "Preferences: Open User Settings (JSON)"):
{
"mcp": {
"servers": {
"voron": {
"type": "http",
"url": "http://192.168.x.x:8000/mcp",
"headers": {
"X-API-Key": "your-api-key-here"
}
}
}
}
}
Create .vscode/mcp.json in your project:
{
"mcpServers": {
"voron": {
"type": "http",
"url": "http://192.168.x.x:8000/mcp",
"headers": {
"X-API-Key": "your-api-key-here"
}
}
}
}
Configure multiple printers in settings.json:
{
"mcp": {
"servers": {
"voron-2.4": {
"type": "http",
"url": "http://192.168.1.100:8000/mcp",
"headers": { "X-API-Key": "key-for-voron" }
},
"voron-0.2": {
"type": "http",
"url": "http://192.168.1.101:8000/mcp",
"headers": { "X-API-Key": "key-for-v0" }
}
}
}
}
@voron what's your status?Troubleshooting:
ping 192.168.x.xsudo ufw allow 8000sudo systemctl status klipper-mcpDangerous operations (G-code execution, temperature changes) require ARMED=True in config.
Destructive operations (file deletion, config restore, system reboot) require the admin PIN.
All requests must include a valid X-API-Key header matching your config.
All operations are logged to data/audit.log for security review.
# config.py
# Moonraker connection
MOONRAKER_URL = "http://localhost:7125"
PRINTER_NAME = "Voron"
# MCP Server
MCP_HOST = "0.0.0.0"
MCP_PORT = 8000
MCP_TRANSPORT = "http" # or "stdio" for local use
# Security
API_KEY = "your-secret-key" # Required for all API calls
ARMED = False # Set True to enable dangerous ops
ADMIN_PIN = "1234" # For destructive operations
# Camera
CAMERA_SNAPSHOT_URL = "http://localhost/webcam/?action=snapshot"
CAMERA_STREAM_URL = "http://localhost/webcam/?action=stream"
# Spoolman (optional)
SPOOLMAN_ENABLED = True
SPOOLMAN_URL = "http://localhost:7912"
# Notifications (optional)
DISCORD_WEBHOOK_URL = ""
SLACK_WEBHOOK_URL = ""
PUSHOVER_USER_KEY = ""
PUSHOVER_API_TOKEN = ""
# Text-to-Speech (optional)
TTS_ENABLED = False
TTS_RATE = 150
TTS_VOLUME = 1.0
# Maintenance intervals (print hours)
MAINTENANCE_INTERVALS = {
"nozzle": 200,
"belts": 500,
"linear_rails": 1000,
"filters": 100
}
# StealthChanger / Toolchanger
TOOL_COUNT = 4 # Number of tools (T0-T3)
"What's my printer's current status?"
"Set the bed to 60°C and hotend to 210°C"
"Start printing benchy.gcode"
"Pick up T1" / "Drop the current tool"
User: "I want to bulk import filaments into Spoolman from the community database"
Claude: I'll fetch the external filament database and import everything for you...
Result:
User: "How is the Voron's load now that Spoolman has all that data?"
Claude: Let me check the system status...
┌──────────────────────────────────────┐
│ System Load After Spoolman Import │
├─────────────┬────────────┬───────────┤
│ CPU Load │ 1.32 │ 🟢 Normal │
│ Memory │ 60% used │ 🟢 OK │
│ Disk │ 38% used │ 🟢 OK │
│ CPU Temp │ 45.7°C │ 🟢 Cool │
│ CAN Bus │ All Active │ 🟢 OK │
└─────────────┴────────────┴───────────┘
Analysis: Spoolman runs on a separate machine, so the 5,223 filaments don't impact Klipper. Load settled from 1.71 → 1.32 after initial indexing.
User: "Can you audit my Voron's configuration?"
Claude: I'll analyze your printer configuration and logs...
Results:
Configuration Issues Found:
⚠️ Klipper git state: dirty/invalid - uncommitted changes
⚠️ TMC Autotune: Installed but not configured for all steppers
⚠️ Hold current: Using default 50% - consider optimizing
Recommendations:
1. Run 'git stash' in Klipper directory to clean state
2. Add [autotune_tmc] sections for stepper_x, stepper_y, stepper_z
3. Set hold_current to 40% for lower idle power consumption
No Critical Errors Found ✅
CAN Bus: All 4 MCUs communicating properly
TMC Drivers: No errors, all steppers responding
User: "Analyze my temperature data for any issues"
Claude: Analyzing temperature history...
Temperature Analysis (Last 24 Hours)
────────────────────────────────────
Hotend (extruder):
✅ Stable PID tuning - variance: ±0.3°C
✅ No thermal runaway events
Bed (heater_bed):
⚠️ Detected 2 oscillations during warmup
💡 Consider re-running PID_CALIBRATE BED
Chamber:
✅ Consistent 45°C during ABS prints
MCU Temperatures:
✅ All MCUs under 50°C
User: "What are my TMC driver settings and can they be improved?"
Claude: Let me check your TMC configuration...
TMC Driver Status
─────────────────────────────────────────────────
Stepper │ Driver │ Run │ Hold │ Temp
─────────────┼──────────┼────────┼────────┼──────
stepper_x │ TMC2209 │ 0.800A │ 0.400A │ 42°C
stepper_y │ TMC2209 │ 0.800A │ 0.400A │ 44°C
stepper_z │ TMC2209 │ 0.800A │ 0.600A │ 38°C
stepper_z1 │ TMC2209 │ 0.800A │ 0.600A │ 39°C
stepper_z2 │ TMC2209 │ 0.800A │ 0.600A │ 37°C
stepper_z3 │ TMC2209 │ 0.800A │ 0.600A │ 38°C
extruder │ TMC2209 │ 0.650A │ 0.325A │ 41°C
TMC Autotune: ⚠️ Installed but needs motor configuration
Recommendation: Add motor specs to enable automatic tuning
User: "Show me my print statistics and filament usage"
Claude: Here's your printing summary...
Lifetime Statistics
───────────────────
Total Prints: 847
Success Rate: 94.2%
Total Print Time: 1,247 hours
Total Filament: 12.4 kg
Filament by Material
────────────────────
PLA │ ████████████████████ │ 6.2 kg (50%)
PETG │ ████████████ │ 3.1 kg (25%)
ABS │ ████████ │ 2.0 kg (16%)
ASA │ ████ │ 1.1 kg (9%)
Recent Prints (Last 7 Days)
───────────────────────────
✅ voron_panel_x4.gcode │ 4h 23m │ PETG
✅ cable_chain.gcode │ 2h 15m │ ABS
✅ benchy.gcode │ 0h 42m │ PLA
❌ large_vase.gcode │ Failed │ Layer shift @ 45%
User: "I want to print a dual-color model, help me set up the tools"
Claude: Let me configure your toolchanger...
Current Tool Status
───────────────────
T0 (extruder): 🔵 Active - Docked
T1 (extruder1): ⚪ Ready - Docked
T2 (extruder2): ⚪ Ready - Docked
Setting up for dual-color print:
1. ✅ Set T0 active spool: Polymaker PLA Pro - Blue (ID: 142)
2. ✅ Set T1 active spool: Polymaker PLA Pro - White (ID: 156)
3. ✅ Verified tool offsets are calibrated
4. ✅ Both hotends at target temp (210°C)
Ready to print! The slicer should handle tool changes automatically.
User: "I want to update Klipper but backup my config first"
Claude: I'll create a backup and then check for updates...
Backup Created
──────────────
📁 backup_2026-01-26_143022.tar.gz
- printer.cfg
- moonraker.conf
- mainsail.cfg
- 12 include files
Total: 847 KB
Available Updates
─────────────────
Component │ Current │ Available │ Status
─────────────┼─────────────┼─────────────┼────────
Klipper │ v0.12.0-145 │ v0.12.0-152 │ 7 commits behind
Moonraker │ v0.8.0-401 │ v0.8.0-401 │ ✅ Up to date
Mainsail │ v2.9.1 │ v2.10.0 │ Update available
Would you like me to proceed with updating Klipper?
Enable filament tracking by setting up Spoolman:
cd ~/klipper-mcp/scripts
chmod +x install_spoolman.sh
./install_spoolman.sh
Then update config.py:
SPOOLMAN_ENABLED = True
SPOOLMAN_URL = "http://localhost:7912"
For automatic TMC tuning, install klipper_tmc_autotune.
For animated LEDs, install klipper-led_effect.
# Check Moonraker is running
systemctl status moonraker
# Check logs
journalctl -u klipper-mcp -f
# Verify config
python3 -c "import config; print(config.MOONRAKER_URL)"
sudo ufw allow 8000curl -H "X-API-Key: your-key" http://ip:8000/healthARMED=True for dangerous operationssystemctl status klippertail -f ~/printer_data/logs/klippy.logsystemctl status spoolmancurl http://localhost:7912/api/v1/healthklipper-mcp/
├── server.py # Main MCP server
├── moonraker.py # Moonraker API client
├── config.py # Configuration
├── requirements.txt # Python dependencies
├── install.sh # Installation script
├── klipper-mcp.service # Systemd service file
├── tools/ # MCP tool implementations
│ ├── printer.py # Core printer control
│ ├── toolchanger.py # Toolchanger/StealthChanger
│ ├── tmc.py # TMC driver control
│ ├── led_effects.py # LED animations
│ ├── filesystem.py # File operations
│ ├── camera.py # Camera & timelapse
│ ├── statistics.py # Print history
│ ├── diagnostics.py # Error analysis
│ ├── temperature.py # Temp control & mesh
│ ├── spoolman.py # Filament tracking
│ ├── notifications.py# Alerts & TTS
│ ├── backup.py # Backup & maintenance
│ ├── gcode_analysis.py # G-code parsing
│ └── system.py # System management
├── data/ # Runtime data
│ ├── audit.log # Security log
│ └── maintenance.json# Maintenance records
├── backups/ # Config backups
├── scenes/ # LED scene presets
│ └── led_scenes.json
└── docs/ # Documentation
Contributions welcome! Please:
MIT License - See LICENSE file for details.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"klipper-mcp-server": {
"command": "npx",
"args": []
}
}
}