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 Servervalidate 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: agentvet-mcp
📌 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.
| Name | Required | Description | Default |
|---|---|---|---|
| alpha | No | ||
| values | Yes | ||
| z_crit | No | ||
| z_warn | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about what constitutes an anomaly, how z_warn vs z_crit are surfaced, whether the operation is read-only, or the shape of the result. Naming EWMA is the only behavioral hint, leaving the agent to guess at thresholds and output semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and wastes no words, but it is terse to the point of under-specification for a four-parameter analytical tool, so conciseness here comes at the cost of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not strictly required, but for a four-parameter tool with 0% schema coverage and no annotations the description is far too thin. It gives no indication of input format, threshold semantics, or safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, and the description does not compensate. It hints at EWMA smoothing (relevant to 'alpha') but says nothing about 'values', 'z_crit', or 'z_warn' and their roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (detect anomalies) and even names the method (EWMA), which is more than a bare tautology. However, 'en serie' is vague about the expected input format, and there is no differentiation from any sibling tool (though the sibling list suggests this tool is functionally distinct from the Klipper/config tools).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer context entirely from the name and the word 'EWMA'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_extra_templateC
Genera plantilla canónica de extra Klipper.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| has_timer | No | ||
| description | Yes | ||
| gcode_commands | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: whether it writes a file to disk, requires a running Klipper instance, validates the inputs, or has side effects is entirely unspecified. "Generate" weakly implies output production rather than mutation, but nothing is confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though the brevity reflects under-specification rather than deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and 0% parameter documentation, the description should explain inputs and behavior; an output schema exists so return values need no explanation, but the tool's invocation requirements remain opaque. For a four-parameter generator it is substantially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for four parameters (name, description, has_timer, gcode_commands), and the description adds no information about any of them. An agent cannot tell what format the name or description should take or how gcode_commands is used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Genera") and resource ("plantilla canónica de extra Klipper"), so an agent knows it produces a canonical Klipper extra template. It does not differentiate itself from siblings like validate_config or lint_extra, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of what to do with the generated template. The single sentence states only what it produces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_config_fileC
Lee un archivo de configuración.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default | |
| filename | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Lee" weakly implies a non-destructive read, but nothing is said about permissions, behavior when the file is missing, whether the printer argument changes resolution scope, or any limits. For a zero-annotation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, which is appropriately sized. But the brevity comes at the cost of under-specification rather than tight precision, so it is not a strong example of economical structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Beyond that, the definition is inadequate for a two-parameter tool with 0% schema coverage: no parameter meaning, no usage context, and no behavioral detail are supplied anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not: neither the required "filename" nor the "printer" argument (with its non-obvious "default" value) is explained. The word "archivo" loosely maps to filename but adds no format, path, or resolution semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Lee") and resource ("archivo de configuración"), so the core operation is unambiguous. However, it offers no differentiation from closely related siblings like search_config, list_config_files, or validate_config, leaving the agent to infer which read variant applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as search_config or list_config_files, nor any prerequisites or exclusions. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_klippy_logC
Lee las últimas N líneas de klippy.log.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default | |
| tail_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a safe read, but says nothing about permissions, whether it runs on the printer host, latency, or what happens if the log is missing. A single clause is thin for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with no filler. It is arguably under-specified rather than verbose, but for its length it wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but the description leaves the printer selector undocumented and provides no behavioral context for a two-parameter tool with no annotations. Not sufficient to call it confidently across multiple printers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It hints at tail_lines via 'N líneas', but the 'printer' parameter (default 'default') is never mentioned, leaving half the parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lee/reads) and resource (últimas N líneas de klippy.log), making the operation immediately identifiable. It does not differentiate from any sibling, but no sibling overlaps this log-reading function, so the gap is minor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to, or what alternatives exist (e.g. get_printer_status for behavior vs. raw log text). The agent must infer the diagnostic use case entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_telemetryC
Obtiene telemetría de extras MCP (mcp_bridge).
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation via 'Obtiene' but says nothing about permissions, side effects, rate limits, or the operational context (e.g., mcp_bridge) beyond a terse mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, it is so minimal that it fails to carry its share of information for a tool with a parameter and no annotations, bordering on under-specification rather than efficient conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Still, the description omits parameter semantics, usage context, and behavioral details, making it incomplete for an agent trying to invoke the tool correctly under ambiguous 'telemetry' semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'printer' has 0% schema description coverage and is not mentioned or explained in the description. The description does nothing to compensate for the missing parameter semantics, leaving the agent without guidance on what values are valid or what 'default' means.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Obtiene') and a resource ('telemetría de extras MCP (mcp_bridge)'), so the general purpose is identifiable. However, 'telemetría' is vague and no sibling differentiation is provided, leaving the agent unsure how this differs from related tools like get_server_info or get_klippy_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which sibling tools are alternatives. The description only asserts what it retrieves, not the context in which retrieval is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_printer_statusC
Consulta estado de objetos de Klipper.
| Name | Required | Description | Default |
|---|---|---|---|
| objects | No | ||
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it does almost none. It never says the operation is read-only, whether Klipper must be running or connected, what happens with an empty objects value, or how the query behaves for offline printers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short, front-loaded sentence with no padding, which is structurally fine. But brevity here comes at the cost of under-specification rather than efficiency, so it sits at the minimum-viable level.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and that is the only gap the description is excused from. With zero annotation coverage and zero parameter documentation, the definition is not complete enough for an agent to call this query tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, and neither 'objects' (a string defaulting to empty) nor 'printer' is explained. The description's word 'objetos' loosely gestures at the objects parameter but gives no format (comma-separated? single name?), no valid object names, and no indication of what the printer identifier expects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (consulta) and resource (estado de objetos de Klipper), so the general purpose is inferable. However, the name promises 'printer status' while the description talks about arbitrary 'Klipper objects', and nothing distinguishes it from siblings like list_objects, get_server_info or get_print_progress. An agent cannot tell which of those to pick from this text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of any alternative among the many closely related siblings (list_objects, get_print_progress, get_server_info). The agent is left to guess when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_print_progressC
Obtiene progreso de impresión.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, yet it says nothing about read-only semantics, permissions, polling expectations, or how the 'default' printer is resolved. The verb 'Obtiene' weakly implies a read, but nothing else about behavior is conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no wasted words and nothing buried, but the brevity here reflects under-specification rather than disciplined conciseness. Structure is fine for the size, yet the size is inadequate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, with zero annotation coverage and zero parameter documentation, the definition leaves the read-only nature, the printer parameter, and any sibling distinction entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameter at all. The single 'printer' parameter with default 'default' gets no explanation of what value it accepts, whether it is a name/index, or what happens when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Obtiene progreso de impresión" is a direct restatement of the tool name get_print_progress in another language, adding no distinguishing detail. It does not differentiate this tool from close siblings such as get_printer_status or get_klippy_log, so an agent gets essentially nothing beyond the name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite, and no mention of when to prefer get_printer_status or any other sibling. The agent must infer the entire usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoD
Información del servidor Moonraker.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it discloses nothing. It does not say whether this is a read-only operation, whether it hits the network, what subset of server state it reports, or how it behaves for multiple printers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no filler, so it is structurally clean and front-loaded. However, the brevity reflects under-specification rather than efficient communication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (so return values need not be described), the definition lacks annotations, parameter documentation, and any usage context. For a tool exposed alongside 16 siblings, this is not enough for reliable selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'printer' parameter has 0% schema description coverage and is never mentioned in the description. With no explanation of what 'printer' selects (and it being optional with a 'default' value), the agent is left guessing about multi-instance targeting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Información del servidor Moonraker' essentially restates the tool name get_server_info, adding only the vendor qualifier 'Moonraker'. It states no verb or action and does nothing to distinguish the tool from siblings like get_printer_status or get_mcp_telemetry, which also return status-style information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this tool, when not to, or how it relates to alternatives such as get_printer_status or get_mcp_telemetry. An agent has no basis for choosing between these information-returning tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lint_extraC
Linter AST de reglas de oro para extras Klipper.
| Name | Required | Description | Default |
|---|---|---|---|
| source_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose read-only nature, side effects, or the specific checks performed, though 'linter' weakly implies read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence fragment. While brief, it is under-specified rather than efficiently concise, and it does not front-load actionable details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return values, but the description still lacks usage guidance, rule specifics, and parameter explanation. It is insufficient for an agent to reliably invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single source_code parameter. The description only hints the input is a Klipper extra, adding no format, constraints, or meaningful parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States it is an AST linter applying golden rules to Klipper extras, naming a function and a resource. However, the 'golden rules' are vague and the description does not differentiate this from sibling validate_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no when-to-use guidance, no prerequisites, and no alternatives. An agent cannot tell when to choose this over validate_config or other validation siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_config_filesC
Lista archivos de configuración.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the listing is recursive, read-only (implied but unstated), scoped to a printer, or what the response contains, despite an output schema existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste. It is appropriately brief, though brevity here reflects under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an undocumented parameter and no annotations, the description is inadequate. It omits the printer-scoping behavior and gives no indication of what the listing returns, leaving the agent dependent on guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter 'printer' (default 'default') is completely undocumented in either the schema or description. The description does not mention that listing is printer-scoped, which is critical for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Lista archivos de configuración' = List configuration files), which distinguishes it from siblings like get_config_file (singular read) and validate_config. However, it is a bare restatement with no scope details (all files? filtered? per printer?).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus siblings like search_config or get_config_file. The description gives no conditions, exclusions, or alternatives, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_objectsC
Lista objetos registrados en Klipper.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry the full behavioral burden. It says nothing about what 'objects' are, whether this reads current runtime state or config, or any limits. An output schema exists but the description adds no behavioral context beyond the terse statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and wastes no words. It is concise, though it could stand to be more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no annotations, an output schema, and many siblings, this description is inadequate. It doesn't explain what objects are listed, whether they relate to config or runtime, or how results differ from related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One optional parameter (printer) with no schema description (0% coverage). The description doesn't clarify its meaning or default beyond what's in the schema. With a single parameter and no schema docs, the description should compensate but does not; baseline for 1 param with low coverage is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (list) and resource (objects registered in Klipper), which is clear enough for the action. However, it doesn't distinguish this from sibling tools like get_config_file or get_printer_status, and 'objects' is vague compared to other tools' specific domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as get_config_file or validate_config. The agent is left to infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_klipperC
Reinicia Klipper. Requiere confirm=True.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it only discloses the confirm gate. It does not say whether the restart aborts an active print, whether it is disruptive or reversible, how long the service is unavailable, or what the printer param controls. For a service-restart mutation this is a significant disclosure gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the core action is front-loaded ahead of the precondition. It is efficient, though arguably so terse that brevity comes at the cost of substance rather than being a virtue in itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, for a no-annotation restart operation with 0% parameter coverage and a second unexplained parameter, the description leaves too much unstated about side effects and scope to let an agent call it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are two parameters (confirm, printer). The description explains only that confirm must be True; the printer parameter (which presumably selects which printer/instance to restart) is completely undocumented in both the schema and the description. Only half the parameter surface is addressed, and even that adds little beyond the name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Reinicia Klipper'), which is unambiguous and distinct from any sibling (none of the other tools restart the service). It does not explicitly differentiate from neighbours like run_gcode, but the action itself is unique enough that an agent can select it confidently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the precondition 'Requiere confirm=True'. There is no statement of when to use this tool versus alternatives (e.g. run_gcode with a RESTART command) or under what circumstances a restart is warranted. The prerequisite is useful but does not constitute usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_gcodeC
Ejecuta G-code. Peligrosos requieren confirm=True.
| Name | Required | Description | Default |
|---|---|---|---|
| gcode | Yes | ||
| confirm | No | ||
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It mentions a safety gate for dangerous commands but omits critical details such as permissions required, consequences of executing arbitrary G-code, and what happens if confirm is omitted for a dangerous command.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and contains no wasted words. However, its extreme brevity is arguably under-specification for a tool with no annotation or schema support, making it too terse to be fully effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a hardware execution tool with no annotations, 0% schema coverage, and an output schema that only covers return values, the description should explain parameter meanings, execution context, and safety implications. It only addresses one narrow safety condition, leaving the agent without enough context to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters. The description only clarifies the role of confirm for dangerous commands, leaving the expected format of gcode and the purpose of the printer parameter completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Ejecuta G-code' gives a specific verb and resource, clearly identifying the tool's action. It does not explicitly differentiate from siblings, but no sibling performs G-code execution, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states a condition: dangerous commands require confirm=True. However, it does not explain when to use this tool versus alternatives like restart_klipper or validate_config, nor does it define what counts as 'dangerous'. Usage is implied but not fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_configC
Busca un patrón en todas las configs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| printer | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about whether matching is case-sensitive, regex or literal, how results are scoped, or that the operation is read-only. Only the bare action is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. It is efficient, though brevity here shades into under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but with zero annotations, zero schema descriptions, and an undocumented printer parameter, the definition leaves too much unresolved for an agent to invoke it confidently against the config-file siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so nothing defines either parameter. The description's word 'patrón' hints that query is a pattern rather than a literal string, but it never clarifies pattern syntax, and the printer parameter (default 'default') is left entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: search a pattern across all configs. An agent can distinguish a global search from get_config_file or list_config_files, though those siblings are never named. No sibling differentiation is offered explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: find where a value appears across configs. There is no explicit when-to-use, when-not-to-use, or pointer to alternatives such as get_config_file for a single file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_configC
Valida contenido de configuración Klipper.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | printer.cfg | |
| config_content | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a non-mutating validation but says nothing about error reporting, what invalid input triggers, or whether any state is affected. With zero annotation coverage this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted words, but its brevity stems from under-specification rather than economy. The sentence earns its place but covers only the bare minimum.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, but with no annotations, no parameter documentation, and no usage guidance, the definition is not complete enough to reliably select and invoke the tool. The 0% schema description coverage leaves the parameters fully undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no parameter meaning whatsoever. It never explains config_content (the required field) or the optional filename with its default of printer.cfg, so it does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (valida) and resource (contenido de configuración Klipper), so an agent knows it validates Klipper config. It does not, however, differentiate from close siblings such as lint_extra or search_config, which also operate on config data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use, no when-not-to-use, and no mention of alternatives like lint_extra or get_config_file. The agent receives no routing guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_component_loadedC
Verifica que un componente Moonraker esté cargado.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default | |
| component_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it says nothing beyond restating the operation. It does not disclose failure behavior (what happens if the component is absent), whether this connects to the printer, or any side effects, though the existence of an output schema does relieve it of explaining return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and free of waste. It is appropriately concise, though its brevity reflects under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0% schema description coverage, no annotations, and two parameters, the description leaves too much unsaid: valid component names, the role of the printer parameter, and any behavioral expectations. The output schema covers return values, but the invocation-side gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters. The description only implies a component name via the tool's purpose; it never explains acceptable component_name values (e.g. 'klippy', 'virtual_sdcard') or the purpose of the 'printer' parameter, which defaults to 'default'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: verifying whether a Moonraker component is loaded. It is clear on its own, but it does not differentiate from the visible sibling verify_extra_loaded, which follows the same verification pattern for a different target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. With verify_extra_loaded in the sibling list, an agent would benefit from knowing whether to call this for components vs. extras in a given situation, and that distinction is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_extra_loadedC
Verifica que un extra Klipper esté cargado.
| Name | Required | Description | Default |
|---|---|---|---|
| printer | No | default | |
| extra_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It states that a verification occurs but says nothing about read-only nature, permissions, or side effects; while 'Verifica' implies a read, this is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence that is front-loaded and free of fluff. However, for a tool with two parameters and an output schema, it is under-specified rather than appropriately detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and 0% schema coverage, the description is incomplete: it does not explain parameters, read-only behavior, or how the result should be interpreted. The existence of an output schema covers return values only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only indirectly implies the extra_name parameter ('un extra Klipper') and completely omits the printer parameter and its default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Verifica') and resource ('extra Klipper'), so the agent knows it checks whether a Klipper extra is loaded. However, it does not differentiate from the near-identical sibling verify_component_loaded, so an agent cannot easily choose between them. Clear but no sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no mention of the sibling verify_component_loaded as an alternative. The only implied usage is the generic 'verify something' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.0- First observed
detect_anomalies - First observed
generate_extra_template - First observed
get_config_file - First observed
get_klippy_log - First observed
get_mcp_telemetry - First observed
get_print_progress - First observed
get_printer_status - First observed
get_server_info - First observed
lint_extra - First observed
list_config_files - First observed
list_objects - First observed
restart_klipper - First observed
run_gcode - First observed
search_config - First observed
validate_config - First observed
verify_component_loaded - First observed
verify_extra_loaded
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
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…
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that publishes CLI tools on your machine for discoverability by LLMs7 npm1MIT
- AlicenseAqualityDmaintenanceMCP server that validates LLM-generated tool-call arguments, lints tool definitions, and produces retry messages for AI assistants.342 npm1MIT
- FlicenseCqualityCmaintenanceA security-first MCP server that provides LLMs with structured tools for filesystem, process, search, build/test/lint, IDE integration, and more.402-
- AlicenseNot gradedqualityCmaintenanceLocal-first MCP server that provides project context, verification gates, and structured tools for coding agents to discover knowledge, run diagnostics, and execute allowlisted commands within a repository.9 npmMIT