Klipper MCP Server
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.
Overview
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.
Features
๐จ๏ธ Core Printer Control
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 |
๐ง StealthChanger / Toolchanger Support
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 |
โก TMC Stepper Driver Control
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 |
๐ก LED Effects (klipper-led_effect)
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 |
๐ File Operations
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. |
๐ท Camera & Timelapse
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 |
๐ Print Statistics
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 |
๐ Diagnostics & Troubleshooting
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 |
๐ก๏ธ Temperature & Bed Mesh
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 |
๐งต Spoolman Integration
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 |
๐ Notifications
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 |
๐พ Backup & Maintenance
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 |
๐ G-code Analysis
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 |
๐ฅ๏ธ System Management
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 |
Installation
Prerequisites
Klipper + Moonraker running on your printer
Python 3.9+ on your CB1/Raspberry Pi
Network access between VS Code and printer
VS Code with GitHub Copilot (for Claude integration)
Quick Start (5 minutes)
# 1. SSH into your printer
ssh biqu@192.168.x.x # or pi@192.168.x.x 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
Verify Installation
# 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
Configuration
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 |
Setting Up VS Code MCP Client
Method 1: User Settings (Recommended)
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"
}
}
}
}
}
Method 2: Workspace Config
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"
}
}
}
}
Method 3: Multiple Printers
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" }
}
}
}
}
Verify Connection
Open VS Code with Copilot
Open the Copilot Chat panel
Type: @voron what's your status?
Claude should respond with your printer's status
Troubleshooting:
Ensure the CB1/Pi IP address is reachable: ping 192.168.x.x
Check firewall allows port 8000: sudo ufw allow 8000
Verify API key matches exactly in VS Code and config.py
Check service is running: sudo systemctl status klipper-mcp
Security
ARMED Flag
Dangerous operations (G-code execution, temperature changes) require ARMED=True in config.
Admin PIN
Destructive operations (file deletion, config restore, system reboot) require the admin PIN.
API Key
All requests must include a valid X-API-Key header matching your config.
Audit Log
All operations are logged to data/audit.log for security review.
Configuration Reference
# 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)
Usage Examples
Basic Commands
"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"
๐งต Bulk Import Filament Database into Spoolman
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:
Fetched 6,957 filaments from SpoolmanDB community database
Created 53 vendors (Polymaker, eSun, Bambu Lab, Prusament, Hatchbox, etc.)
Imported 5,223 filaments with full specifications:
Material types: PLA (2,466), PETG (943), ASA (526), ABS (467), TPU (312)...
Includes density, diameters, temp ranges, colors
All searchable in Spoolman UI
๐ System Health Check After Heavy Operation
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.
๐ ๏ธ Configuration Audit & Diagnostics
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
๐ก๏ธ Temperature Anomaly Detection
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
๐ง TMC Driver Optimization
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
๐ Print Statistics & Filament Usage
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%
๐ Multi-Tool Print Setup
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.
๐พ Automated Backup Before Update
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?
Optional Integrations
Spoolman
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"
TMC Autotune
For automatic TMC tuning, install klipper_tmc_autotune.
LED Effects
For animated LEDs, install klipper-led_effect.
Troubleshooting
Server won't start
# Check Moonraker is running
systemctl status moonraker
# Check logs
journalctl -u klipper-mcp -f
# Verify config
python3 -c "import config; print(config.MOONRAKER_URL)"
Can't connect from VS Code
Verify CB1/Pi IP address is correct
Check firewall allows port 8000: sudo ufw allow 8000
Verify API key matches in VS Code and config.py
Test: curl -H "X-API-Key: your-key" http://ip:8000/health
Operations failing
Check ARMED=True for dangerous operations
Verify Klipper is running and ready: systemctl status klipper
Check klippy.log: tail -f ~/printer_data/logs/klippy.log
Spoolman not working
Verify Spoolman is running: systemctl status spoolman
Check URL in config.py matches Spoolman's address
Test: curl http://localhost:7912/api/v1/health
Project Structure
klipper-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
Contributing
Contributions welcome! Please:
Fork the repository
Create a feature branch
Add tests if applicable
Submit a pull request
License
MIT License - See LICENSE file for details.
Acknowledgments