Klipper MCP Server
Klipper MCP Server exposes 17 MCP tools that let an LLM validate, inspect, diagnose and safely control a Klipper/Moonraker 3D-printer stack (multi-printer via the printer argument).
Validate & read configuration:
validate_config(checksprinter.cfg+ includes),get_config_file,list_config_files,search_config(pattern search across all configs).Develop extras/components:
lint_extra(AST linter for Klipper "golden rules"),generate_extra_template(canonical extra scaffolding with optional timer and G-code commands).Inspect the live stack:
get_server_info(Moonraker),list_objects,verify_component_loaded,verify_extra_loaded,get_printer_status(query Klipper objects).Monitor prints & telemetry:
get_print_progress,get_mcp_telemetry(MCP extras telemetry, cache/breaker observability).Diagnose:
get_klippy_log(tail N lines ofklippy.log),detect_anomalies(EWMA-based anomaly detection over a value series).Operate with safeguards:
run_gcode(dangerous scripts requireconfirm: true),restart_klipper(requiresconfirm: true).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Klipper MCP Server validate my printer.cfg and includes before I restart Klipper"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🔌 Klipper MCP Server
Servidor Model Context Protocol de nivel industrial para el ecosistema Klipper / Moonraker.
klipper-mcp-server expone, mediante una API uniforme (tools, resources
y prompts), las capacidades necesarias para que clientes LLM (Claude,
GPT, Cursor, VS Code) operen sobre el stack Klipper + Moonraker con
garantías industriales de resiliencia, observabilidad, seguridad y
rendimiento extremo.
📑 Tabla de contenidos
Related MCP server: Klipper MCP Server
📌 Estado del proyecto
Importante: el repositorio contiene actualmente la especificación técnica v0.1 (
docs/mcp-klipper.md) como fuente única de verdad. Dicha especificación incluye la implementación de referencia del núcleo y los contratos de tools, resources, prompts, agentes y skills. El código ejecutable se genera a partir de ella.Las optimizaciones de rendimiento descritas en la sección 4 están especificadas y diseñadas; sus objetivos son metas de ingeniería verificables mediante el arnés de benchmark incluido en el plan de medida. Los valores de línea base deben capturarse en CI antes de certificar la mejora (ver Benchmarks).
Campo | Valor |
Artefacto |
|
Versión | 0.1.0 (baseline) · optimización objetivo v0.2 |
Protocolo | MCP 2026-07-28 (stateless core) |
Runtime | Python ≥ 3.10 · asyncio · aiohttp |
Licencia | GPLv3 |
🎯 Descripción y propósito
El problema
El desarrollo de extensiones para Klipper y plugins para Moonraker presenta tres barreras recurrentes:
Reglas de oro no verificables automáticamente: muchas contribuciones fallan en revisión por usar
time.sleep(), variables globales o I/O síncrono en callbacks del reactor.Errores silenciosos de configuración:
SAVE_CONFIGsolo escribe enprinter.cfg; los parámetros auto-calibrados en includes provocan fallos de arranque difíciles de diagnosticar.Ausencia de tooling LLM-aware: los asistentes genéricos no disponen de contexto estructural del ecosistema Klipper/Moonraker.
La solución
Un servidor MCP que actúa como capa de abstracción tipada entre el cliente LLM y:
La API REST/JSON-RPC de Moonraker.
El sistema de archivos de configuración Klipper.
El log de eventos de Klipper (
klippy.log).Validadores AST y plantillas canónicas de código conforme.
Objetivos principales
Contratos verificables: cada tool valida su entrada contra schema y devuelve resultados deterministas.
Resiliencia activa: circuit breaker por fábrica, cache con purga periódica y detector de anomalías EWMA con histéresis.
Seguridad por defecto: comandos G-code peligrosos requieren
confirm=True; las API keys nunca se registran en logs.Rendimiento extremo: cache multinivel, coalescencia de peticiones y economía de tokens (ver sección 4).
Asincronía estricta: el event loop nunca se bloquea.
Capacidades entregadas (v0.1)
Categoría | Cantidad | Descripción |
Tools | 17 | Herramientas invocables por el modelo |
Resources | 8 | Recursos direccionables (URIs) |
Prompts | 10 | Plantillas de interacción predefinidas |
Agentes | 3 | System prompts especializados |
Skills | 3 | Guías ejecutables con checklist |
Core | 6 | Cache multinivel, single-flight, circuit breaker, EWMA, cliente Moonraker, token budget |
🧩 Casos de uso
Validación offline de configuración: comprobar
printer.cfgy todo su sistema de[include]antes de reiniciar la impresora, detectando parámetros auto-calibrados mal ubicados.Desarrollo de extras y componentes: generar plantillas canónicas y validar con el linter AST que se respetan las reglas del reactor.
Diagnóstico asistido: analizar
klippy.logy telemetría con prompts especializados y detección de anomalías.Operación controlada: ejecutar G-code con salvaguardas para comandos peligrosos (movimientos, calibración, cambios de estado).
Telemetría y SLO: exponer latencias, hit-rate de cache y estado del circuit breaker para integrarlos en observabilidad.
⚡ Optimizaciones de rendimiento
Las siguientes técnicas están especificadas en
docs/mcp-klipper.md (§6.2 y §6.6) y son las que
habilitan los objetivos medibles del proyecto.
Área | Técnica | Archivo | Beneficio |
Cache | Multinivel L1 (RAM) + L2 (disco) con doble cota (entradas y bytes) |
| Reduce latencia de acceso y persistencia entre reinicios |
Concurrencia | Single-flight (coalescencia de peticiones idénticas) |
| Elimina el cache stampede; N llamadas → 1 a Moonraker |
Red | Pool de conexiones persistente (keep-alive, DNS cacheado) |
| Menos handshakes TCP/TLS, menor latencia p95 |
Serialización | orjson con fallback a stdlib |
| Serialización/deserialización más rápida |
Compresión | zstd/gzip en tránsito y en reposo |
| Menos bytes en red y disco |
Paralelización |
|
| Solapa latencias con aislamiento de fallos |
Memoria | Cotas duras, purga activa, streaming, referencias débiles |
| RSS estable, sin fugas en ejecución prolongada |
Tokens | Compactación, delta |
| Menos tokens por respuesta, sin sobrecarga |
Arranque | Lazy loading memoizado |
| Menor tiempo de arranque y RSS en reposo |
Objetivos declarados (metas, no resultados medidos)
Objetivo | Meta | Métrica |
Reducción de latencia (p50/p95) | ≥ 60 % vs línea base v0.1 | PERF-1…3 |
Consumo de recursos (CPU/RAM) | ≤ 30 % de los máximos v0.1 | PERF-6…7 |
Hit-rate combinado L1+L2 | ≥ 95 % | PERF-4 |
Throughput | ≥ 250 req/s | PERF-5 |
Bloqueo del event loop | 0 | PERF-8 |
La metodología completa de perfilado y medición está en §6.6.6 de la especificación y en Benchmarks y perfilado.
🛠 Requisitos técnicos
Componente | Versión mínima | Versión recomendada | Notas |
Python | 3.10 | 3.11 | 3.10 · 3.11 · 3.12 soportadas |
Klipper | Últimas 2 stable | stable | También |
Moonraker | Últimas 2 stable | stable | API REST/JSON-RPC accesible |
aiohttp | ≥ 3.9 | última 3.x | Cliente HTTP asíncrono |
mcp | ≥ 2.3 | última 2.x | SDK MCP ( |
orjson | ≥ 3.9 (opcional) | última | Fallback automático a |
zstandard | ≥ 0.22 (opcional) | última | Fallback automático a |
uv | ≥ 0.4 | última | Gestor de entorno recomendado |
Herramientas de desarrollo:
Herramienta | Uso |
| Tests unitarios e integración |
| Micro-benchmarks reproducibles |
| Lint y formato |
| Tipado estático |
| Perfilado de CPU y memoria |
| Pruebas de carga y throughput |
Sistemas operativos soportados: Debian 12, Ubuntu 22/24 y Raspberry Pi OS.
🚀 Instalación y puesta en marcha
1. Clonar el repositorio
git clone https://github.com/<org>/klipper-mcp-server.git
cd klipper-mcp-server2. Crear el entorno e instalar dependencias
Se recomienda uv por velocidad y reproducibilidad:
uv venv
# Linux / macOS
source .venv/bin/activate
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
# Instalación editable con dependencias de desarrollo y rendimiento
uv pip install -e ".[dev,perf]"Alternativa con pip estándar:
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,perf]"3. Configurar las impresoras
Cada impresora se declara con dos variables de entorno: la URL de Moonraker y, opcionalmente, su API key.
# Linux / macOS
export PRINTER_DEFAULT="http://localhost:7125"
export PRINTER_VORON="http://192.168.1.100:7125"
export PRINTER_VORON_API_KEY="tu-api-key"
# Windows (PowerShell)
$env:PRINTER_DEFAULT = "http://localhost:7125"
$env:PRINTER_VORON = "http://192.168.1.100:7125"
$env:PRINTER_VORON_API_KEY = "tu-api-key"4. Arrancar el servidor
python -m klipper_mcp.serverEl servidor se comunica por stdio con el cliente MCP. Si no se
declara ninguna impresora, se usa http://localhost:7125 por defecto.
5. Verificar la instalación
pytest tests/ -q⚙️ Configuración
Todas las variables se leen del entorno y se validan de forma tipada en
src/klipper_mcp/config.py.
Impresoras
Variable | Descripción | Ejemplo |
| URL base de Moonraker para la impresora |
|
| API key opcional ( |
|
<NAME> se normaliza a minúsculas. Si solo hay una impresora, no es
necesario indicar su nombre en las llamadas.
Núcleo runtime
Variable | Default | Descripción |
|
| Nº de entradas del cache L1 en memoria |
|
| TTL del cache L1 en segundos |
| (vacío) | Ruta del cache L2 en disco. Vacío = sin L2 |
|
| TTL del cache L2 en segundos |
|
| Fallos consecutivos antes de abrir el circuit breaker |
|
| Segundos antes de pasar a |
|
| Concurrencia máxima por host (semáforo) |
|
| Tokens máximos por respuesta |
|
| Intervalo de polling en segundos |
|
| Nivel de logging ( |
Ejemplo completo
export PRINTER_DEFAULT="http://localhost:7125"
export MCP_CACHE_DISK="/var/cache/klipper-mcp"
export MCP_CACHE_TTL="30"
export MCP_CACHE_L2_TTL="300"
export MCP_MAX_CONCURRENCY="32"
export MCP_TOKEN_BUDGET="4000"
export MCP_LOG_LEVEL="INFO"📖 Manual de uso
Integración con Claude Desktop
Edita claude_desktop_config.json:
{
"mcpServers": {
"klipper": {
"command": "python",
"args": ["-m", "klipper_mcp.server"],
"env": {
"PRINTER_DEFAULT": "http://192.168.1.100:7125",
"PRINTER_DEFAULT_API_KEY": "tu-api-key",
"MCP_CACHE_SIZE": "512",
"MCP_CACHE_TTL": "30"
}
}
}
}Instalación en TRAE IDE (install link)
TRAE permite instalar un servidor MCP desde un enlace con esquema propio
(documentación oficial).
El proyecto incluye un generador reproducible en
install_link.py.
Formato del enlace:
trae://trae.ai-ide/mcp-import?type=<TYPE>&name=<NAME>&config=<B64_URLENCODED>Componente | Obligatorio | Descripción |
| Sí | Esquema y ruta fijos del handler de TRAE |
| Sí |
|
| No | Nombre del servidor en TRAE |
| Sí | JSON de configuración en Base64 y URL-encoded |
Generar el enlace:
# Con el script de consola instalado (pip install -e .)
klipper-mcp-install-link --name klipper \
--printer-url http://192.168.1.100:7125
# Equivalente sin instalar el entry point
python -m klipper_mcp.install_link --name klipper \
--printer-url http://192.168.1.100:7125
# Con API key y variables extras (repetible)
klipper-mcp-install-link --name voron \
--printer-url http://192.168.1.100:7125 \
--env PRINTER_VORON_API_KEY=TU_API_KEY \
--env MCP_CACHE_DISK=/var/cache/klipper-mcp
# Emitir un badge Markdown para el README
klipper-mcp-install-link --markdownEjemplo de enlace generado:
trae://trae.ai-ide/mcp-import?type=stdio&name=klipper&config=eyJjb21tYW5kIjoicHl0aG9uIiwiYXJncyI6WyItbSIsImtsaXBwZXJfbWNwLnNlcnZlciJdLCJlbnYiOnsiUFJJTlRFUl9ERUZBVUxUIjoiaHR0cDovLzE5Mi4xNjguMS4xMDA6NzEyNSJ9fQ%3D%3DImportar en TRAE:
Pega el enlace en la barra de direcciones del navegador y pulsa Enter.
Confirma en el diálogo del navegador que quieres abrir TRAE.
En la ventana Configure Manually de TRAE, revisa la configuración y pulsa Confirm.
Seguridad:
configva codificado en Base64, no cifrado. No compartas enlaces que incluyan API keys; genera el enlace en local y pasa los secretos vía--envsolo cuando lo vayas a usar.
Tools
Tool | Propósito | Ejemplo de invocación |
| Valida |
|
| Linter AST de reglas de oro |
|
| Genera plantilla de extra |
|
| Estado de la impresora |
|
| Consulta objetos Moonraker |
|
| Ejecuta G-code (con salvaguardas) |
|
Consulta la especificación (§7) para el contrato completo de las 17 tools, sus parámetros y sus valores de retorno.
Resources
Los recursos se direccionan por URI, por ejemplo:
klipper://config/printer.cfg
klipper://logs/klippy.log
klipper://docs/indexPrompts
Plantillas predefinidas para diagnóstico, optimización y generación:
Troubleshooting: análisis guiado de
klippy.log.Optimización: tuning de
pressure_advance,input_shaper, etc.Generación: scaffolding de extras y componentes conforme a las reglas de Klipper/Moonraker.
Docker Compose
# Definir la API key en el entorno del host
export VORON_API_KEY="tu-api-key"
docker compose up --build📊 Benchmarks y perfilado
El proyecto incluye un arnés offline (benchmarks/profile_harness.py)
que ejecuta las operaciones contra un Moonraker simulado
(tests/harness/sim_moonraker.py) para eliminar ruido de red.
# CPU: flamegraph sin instrumentar el proceso
py-spy record -o profile.svg -- python -m klipper_mcp.server
# Línea base de CPU
python -m cProfile -o baseline.prof -m klipper_mcp.server
# Memoria (detección de fugas en ejecución prolongada)
memray run -o mem.bin benchmarks/profile_harness.py
memray flamegraph mem.bin
# Benchmarks reproducibles y comparables en CI
pytest benchmarks/ --benchmark-only --benchmark-json=out.jsonProtocolo de medición
Congelar la línea base en la revisión v0.1 y versionar
benchmarks/baseline.json.Medir la candidata en el mismo hardware, con el mismo corpus e idénticas iteraciones.
Comparar p50/p95/p99, throughput y RSS. Se acepta la candidata solo si cumple los objetivos y no introduce regresiones > 10 %.
Verificar estabilidad: soak de 24 h sin crecimiento de RSS (pendiente ≤ 0.1 %/h) con hit-rate estable.
🤝 Contribuir
Estándares de código
Estilo:
ruff(lint + format) sin errores ymypysin errores.Longitud de línea: ≤ 80 caracteres.
Cabeceras: todo archivo
.pyincluye cabecera GPLv3.Asincronía: prohibido
time.sleep()en código del reactor; usar mecanismos del reactor oasyncio. Sin variables globales mutables.I/O: nunca bloqueante dentro del event loop.
Tipado: anotaciones en todas las funciones públicas.
Flujo de trabajo con Git
Crea una rama descriptiva desde
main:git checkout -b feat/single-flight-cache.Realiza commits atómicos siguiendo Conventional Commits:
feat:,fix:,perf:,docs:,refactor:,test:.Asegura que los tests y linters pasan antes de subir la rama.
Abre un Pull Request hacia
main.
Proceso de revisión de Pull Requests
Al menos una aprobación de un maintainer.
La CI debe estar en verde (lint, mypy, tests y benchmarks).
Todo cambio de rendimiento debe incluir evidencia de medición (JSON de benchmark) y no introducir regresiones > 10 %.
Los PR deben ser pequeños y con un único propósito.
Requisitos de pruebas
Cobertura mínima: 80 %.
Tests nuevos obligatorios para toda funcionalidad: casos válidos, inválidos y de borde.
Tests de integración con el Moonraker simulado para todo acceso de red.
Los tests de rendimiento usan
pytest-benchmarky no dependen de red real.
ruff check src/ tests/
mypy --ignore-missing-imports src/
pytest tests/ -v --cov=src/klipper_mcp --cov-fail-under=80🙌 Créditos y financiación
Autores
Equipo Klipper MCP Server — diseño de arquitectura, núcleo runtime y especificación técnica.
Agradecimientos
A los proyectos Klipper y Moonraker por su documentación abierta y su ecosistema.
A la comunidad de Model Context Protocol por el estándar y los SDKs de referencia.
A los mantenedores de aiohttp, orjson y zstandard.
Fuentes de financiación
Este proyecto es de desarrollo independiente y no cuenta actualmente con financiación institucional. Si deseas apoyar su mantenimiento, contacta con el equipo (ver Contacto).
📬 Contacto
Issues y bugs: GitHub Issues
Solicitudes de funcionalidad: usa la plantilla de feature request en el mismo repositorio.
Consultas generales y seguridad: escribe a
maintainers@klipper-mcp.dev.
Por favor, reporta vulnerabilidades de forma privada y no abras un issue público hasta que se haya evaluado el impacto.
📄 Licencia
Este proyecto se distribuye bajo la GNU General Public License v3.0. Consulta el archivo LICENSE para el texto completo.
La elección de GPLv3 garantiza que las mejoras derivadas —incluidas las optimizaciones de rendimiento— permanezcan disponibles para la comunidad del ecosistema Klipper/Moonraker.
Available Tools
17 toolsdetect_anomaliesC
Detecta anomalías en serie con EWMA.
Inputs: values (required), alpha, z_crit, z_warn. Returns: object
generate_extra_templateC
Genera plantilla canónica de extra Klipper.
Inputs: name (required), description (required), has_timer, gcode_commands. Returns: result
get_config_fileC
Lee un archivo de configuración.
Inputs: filename (required), printer. Returns: result
get_klippy_logC
Lee las últimas N líneas de klippy.log.
Inputs: printer, tail_lines. Returns: result
get_mcp_telemetryC
Obtiene telemetría de extras MCP (mcp_bridge).
Inputs: printer. Returns: object
get_printer_statusC
Consulta estado de objetos de Klipper.
Inputs: objects, printer. Returns: object
get_print_progressC
Obtiene progreso de impresión.
Inputs: printer. Returns: object
get_server_infoD
Información del servidor Moonraker.
Inputs: printer. Returns: object
lint_extraC
Linter AST de reglas de oro para extras Klipper.
Inputs: source_code (required). Returns: object
list_config_filesC
Lista archivos de configuración.
Inputs: printer. Returns: object
list_objectsC
Lista objetos registrados en Klipper.
Inputs: printer. Returns: object
restart_klipperC
Reinicia Klipper. Requiere confirm=True.
Inputs: confirm, printer. Returns: object
run_gcodeC
Ejecuta G-code. Peligrosos requieren confirm=True.
Inputs: gcode (required), confirm, printer. Returns: object
search_configC
Busca un patrón en todas las configs.
Inputs: query (required), printer. Returns: object
validate_configC
Valida contenido de configuración Klipper.
Inputs: config_content (required), filename. Returns: object
verify_component_loadedC
Verifica que un componente Moonraker esté cargado.
Inputs: component_name (required), printer. Returns: object
verify_extra_loadedC
Verifica que un extra Klipper esté cargado.
Inputs: extra_name (required), printer. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Most tools target distinct resources and actions (config files, validation, server info, runtime status, logs, G-code execution). However, verify_component_loaded vs verify_extra_loaded and get_printer_status vs list_objects/get_print_progress have somewhat overlapping scopes that could cause occasional misselection.
Tool names consistently use snake_case with a predictable verb_noun pattern (get_*, list_*, verify_*, validate_*, run_*). There is no mixed casing or vague naming, making the set easy to scan.
17 tools is slightly above the ideal range but reasonable for a server covering Klipper config validation, Moonraker diagnostics, telemetry, and printer control. Each tool appears to have a distinct purpose, though the surface is on the heavier side.
The server covers reading, listing, searching, validating configs, plus diagnostics, logs, and basic control. However, it lacks config write/update/delete operations and print lifecycle controls like pause/resume/cancel, leaving some common Klipper management workflows incomplete.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
LLM cost optimization gateway, repo token-waste auditor & model arbitrage MCP server.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.305,867 npm263GPL 2.0
- FlicenseNot gradedqualityCmaintenanceAn 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.29-
- AlicenseNot gradedqualityBmaintenanceExposes MCP tools that slice models with headless OrcaSlicer, stage gcode on Moonraker-based Klipper printers, gate job starts behind explicit operator authorization, and report status, telemetry-derived events, snapshots, and alerts. It also manages spools and lets AI agents query job estimates, blockers, and start-precondition checks.1Apache 2.0
- AlicenseAqualityCmaintenanceEnables MCP clients to inspect FreeCAD documents and export named solids to STL, find and derive OrcaSlicer presets, preview and run slices with recorded manifests, and then read G-code metadata, query a Moonraker printer, upload G-code, and start an uploaded print as a separate confirmed step.15MIT