Skip to main content
Glama
LauOtero

Klipper MCP Server

by LauOtero

🔌 Klipper MCP Server

Servidor Model Context Protocol de nivel industrial para el ecosistema Klipper / Moonraker.

CI Licencia: GPLv3 Python MCP

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

  1. Estado del proyecto

  2. Descripción y propósito

  3. Casos de uso

  4. Optimizaciones de rendimiento

  5. Requisitos técnicos

  6. Instalación y puesta en marcha

  7. Configuración

  8. Manual de uso

  9. Benchmarks y perfilado

  10. Contribuir

  11. Créditos y financiación

  12. Contacto

  13. Licencia


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

klipper-mcp-server

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:

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

  2. Errores silenciosos de configuración: SAVE_CONFIG solo escribe en printer.cfg; los parámetros auto-calibrados en includes provocan fallos de arranque difíciles de diagnosticar.

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

  1. Validación offline de configuración: comprobar printer.cfg y todo su sistema de [include] antes de reiniciar la impresora, detectando parámetros auto-calibrados mal ubicados.

  2. Desarrollo de extras y componentes: generar plantillas canónicas y validar con el linter AST que se respetan las reglas del reactor.

  3. Diagnóstico asistido: analizar klippy.log y telemetría con prompts especializados y detección de anomalías.

  4. Operación controlada: ejecutar G-code con salvaguardas para comandos peligrosos (movimientos, calibración, cambios de estado).

  5. 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)

cache.py

Reduce latencia de acceso y persistencia entre reinicios

Concurrencia

Single-flight (coalescencia de peticiones idénticas)

coalescer.py

Elimina el cache stampede; N llamadas → 1 a Moonraker

Red

Pool de conexiones persistente (keep-alive, DNS cacheado)

moonraker_client.py

Menos handshakes TCP/TLS, menor latencia p95

Serialización

orjson con fallback a stdlib json

moonraker_client.py

Serialización/deserialización más rápida

Compresión

zstd/gzip en tránsito y en reposo

compression.py

Menos bytes en red y disco

Paralelización

asyncio.gather(return_exceptions=True) + semáforo

moonraker_client.py

Solapa latencias con aislamiento de fallos

Memoria

Cotas duras, purga activa, streaming, referencias débiles

cache.py

RSS estable, sin fugas en ejecución prolongada

Tokens

Compactación, delta unchanged, rotación O(1)

token_budget.py

Menos tokens por respuesta, sin sobrecarga

Arranque

Lazy loading memoizado

resources/, prompts/

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 dev

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 (mcp.server.mcpserver.MCPServer)

orjson

≥ 3.9 (opcional)

última

Fallback automático a json

zstandard

≥ 0.22 (opcional)

última

Fallback automático a gzip

uv

≥ 0.4

última

Gestor de entorno recomendado

Herramientas de desarrollo:

Herramienta

Uso

pytest + pytest-asyncio

Tests unitarios e integración

pytest-benchmark

Micro-benchmarks reproducibles

ruff

Lint y formato

mypy

Tipado estático

py-spy / memray

Perfilado de CPU y memoria

locust / vegeta

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-server

2. 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.server

El 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

PRINTER_<NAME>

URL base de Moonraker para la impresora <NAME>

http://192.168.1.100:7125

PRINTER_<NAME>_API_KEY

API key opcional (X-Api-Key)

abc123…

<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

MCP_CACHE_SIZE

512

Nº de entradas del cache L1 en memoria

MCP_CACHE_TTL

30

TTL del cache L1 en segundos

MCP_CACHE_DISK

(vacío)

Ruta del cache L2 en disco. Vacío = sin L2

MCP_CACHE_L2_TTL

300

TTL del cache L2 en segundos

MCP_CB_THRESHOLD

5

Fallos consecutivos antes de abrir el circuit breaker

MCP_CB_RECOVERY

30

Segundos antes de pasar a HALF_OPEN

MCP_MAX_CONCURRENCY

32

Concurrencia máxima por host (semáforo)

MCP_TOKEN_BUDGET

4000

Tokens máximos por respuesta

MCP_POLL_INTERVAL

2

Intervalo de polling en segundos

MCP_LOG_LEVEL

INFO

Nivel de logging (DEBUG…CRITICAL)

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"
      }
    }
  }
}

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

trae://trae.ai-ide/mcp-import

Sí

Esquema y ruta fijos del handler de TRAE

type

Sí

stdio o http

name

No

Nombre del servidor en TRAE

config

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 --markdown

Ejemplo de enlace generado:

trae://trae.ai-ide/mcp-import?type=stdio&name=klipper&config=eyJjb21tYW5kIjoicHl0aG9uIiwiYXJncyI6WyItbSIsImtsaXBwZXJfbWNwLnNlcnZlciJdLCJlbnYiOnsiUFJJTlRFUl9ERUZBVUxUIjoiaHR0cDovLzE5Mi4xNjguMS4xMDA6NzEyNSJ9fQ%3D%3D

Importar en TRAE:

  1. Pega el enlace en la barra de direcciones del navegador y pulsa Enter.

  2. Confirma en el diálogo del navegador que quieres abrir TRAE.

  3. En la ventana Configure Manually de TRAE, revisa la configuración y pulsa Confirm.

Seguridad: config va codificado en Base64, no cifrado. No compartas enlaces que incluyan API keys; genera el enlace en local y pasa los secretos vía --env solo cuando lo vayas a usar.

Tools

Tool

Propósito

Ejemplo de invocación

validate_config

Valida printer.cfg y sus includes

{"config_content": "...", "filename": "printer.cfg"}

lint_extra

Linter AST de reglas de oro

{"source_code": "..."}

generate_extra

Genera plantilla de extra

{"name": "mi_extra", "description": "..."}

get_printer_status

Estado de la impresora

{"printer": "voron"}

query_objects

Consulta objetos Moonraker

{"objects": {"print_stats": null}}

run_gcode

Ejecuta G-code (con salvaguardas)

{"script": "G28", "confirm": true}

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/index

Prompts

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

Protocolo de medición

  1. Congelar la línea base en la revisión v0.1 y versionar benchmarks/baseline.json.

  2. Medir la candidata en el mismo hardware, con el mismo corpus e idénticas iteraciones.

  3. Comparar p50/p95/p99, throughput y RSS. Se acepta la candidata solo si cumple los objetivos y no introduce regresiones > 10 %.

  4. 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 y mypy sin errores.

  • Longitud de línea: ≤ 80 caracteres.

  • Cabeceras: todo archivo .py incluye cabecera GPLv3.

  • Asincronía: prohibido time.sleep() en código del reactor; usar mecanismos del reactor o asyncio. 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

  1. Crea una rama descriptiva desde main: git checkout -b feat/single-flight-cache.

  2. Realiza commits atómicos siguiendo Conventional Commits: feat:, fix:, perf:, docs:, refactor:, test:.

  3. Asegura que los tests y linters pasan antes de subir la rama.

  4. 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-benchmark y 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 tools
detect_anomaliesC

Detecta anomalías en serie con EWMA.

ParametersJSON Schema
NameRequiredDescriptionDefault
alphaNo
valuesYes
z_critNo
z_warnNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
has_timerNo
descriptionYes
gcode_commandsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault
filenameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault
tail_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
objectsNo
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines1/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.6/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose2/5

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.

Usage Guidelines1/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
gcodeYes
confirmNo
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
printerNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoprinter.cfg
config_contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault
component_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
printerNodefault
extra_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 17 tool updatesv0.1.0
    • First observeddetect_anomalies
    • First observedgenerate_extra_template
    • First observedget_config_file
    • First observedget_klippy_log
    • First observedget_mcp_telemetry
    • First observedget_print_progress
    • First observedget_printer_status
    • First observedget_server_info
    • First observedlint_extra
    • First observedlist_config_files
    • First observedlist_objects
    • First observedrestart_klipper
    • First observedrun_gcode
    • First observedsearch_config
    • First observedvalidate_config
    • First observedverify_component_loaded
    • First observedverify_extra_loaded

TDQS

C2.7/5.0

Scored across 17 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers