CommunityProgramación y desarrollogithub.com

martinsgmx/3d-auto-fabrik

Orquesta los servidores MCP mcp-cura y mcp-moonraker para que un agente pueda llevar un modelo 3D desde un archivo de malla hasta una impresión supervisada en Klipper/Moonraker: inspección y reparación de mallas, resolución de perfiles de CuraEngine y laminado, verificación de seguridad del G-code, transferencia a la impresora, inicio de impresión, monitoreo en vivo, pausa/reanudación/cancelación y gestión de cola de trabajos, siempre detrás de las puertas de riesgo y aprobación de los servidores.

¿Qué es 3d-auto-fabrik?

La habilidad 3d-auto-fabrik actúa como un orquestador que conecta dos servidores MCP especializados: mcp-cura (para procesamiento de mallas y laminado) y mcp-moonraker (para control de impresoras Klipper/Moonraker). Su propósito es habilitar a un agente de IA para gestionar de forma autónoma y segura todo el flujo de trabajo de impresión 3D: importación de archivos STL/3MF, inspección y reparación de mallas, resolución de perfiles de CuraEngine, laminado, verificación del G-code generado, transferencia del archivo a la impresora, inicio y supervisión de la impresión, y gestión de cola de trabajos. La habilidad impone estrictas reglas de seguridad, como no confirmar acciones de alto riesgo sin aprobación explícita del usuario, no omitir verificaciones y mantenerse dentro de la política de seguridad local configurada. Está diseñada para plataformas que soportan el protocolo MCP, como Claude Code, Cursor y Codex, y requiere que ambos servidores (mcp-cura y mcp-moonraker) estén instalados y configurados.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/martinsgmx/agent-skill-3d-auto-fabrik/tree/HEAD/skills/3d-auto-fabrik

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace 3d-auto-fabrik?

Orquestador para mcp-cura (malla → laminado → G-code) y mcp-moonraker (estado de la impresora → impresión). Los dos servidores deliberadamente no se conocen entre sí: mcp-cura nunca contacta a la impresora, y mcp-moonraker nunca lamina. Esta habilidad es el pegamento. Los archivos se mueven entre ellos solo a través de una transferencia explícita y controlada por aprobación.

Reglas no negociables — leer antes de tocar el hardware

Estas reglas existen porque una impresora 3D es un calentador, un motor y una boquilla afilada. La fricción es el objetivo.

  1. Nunca confirmes una acción preparada de alto riesgo en nombre del usuario. moonraker_print_start, moonraker_print_cancel, moonraker_run_macro, cura_artifact_export, moonraker_file_delete y similares devuelven una solicitud de aprobación primero. Tu trabajo es presentar esa solicitud, de forma clara y honesta, y esperar. Solo después de que el usuario apruebe explícitamente (en el chat, o ejecutando mcp-moonraker approve <id> / mcp-cura approve <id> fuera de banda) podrás llamar a la herramienta *_confirm_action correspondiente. Nunca inventes, reutilices o parafrasees identificadores de aprobación o frases de confirmación.
  2. Nunca omitas la verificación para ser útil. cura_gcode_verify antes de cualquier impresión, moonraker_verify_connection antes de cualquier acción en la impresora, moonraker_files_list + moonraker_file_metadata después de cualquier transferencia.
  3. moonraker_emergency_stop es la única palanca sin compuerta. Úsala solo cuando algo esté físicamente mal ahora mismo (humo, rechinido, boquilla arrastrándose a través de la pieza, ejes chocando). Para "detener el calentamiento" fuera de una emergencia, usa moonraker_turn_off_heaters — reversible y sin compuerta.
  4. Mantente dentro de la política de seguridad local. Los límites de temperatura, el modo de solo lectura, allow_raw_gcode, allow_host_admin son establecidos por el usuario a propósito. Si una herramienta se niega, transmite la negativa y su razón. No reformules la llamada, habilites la bandera, ni busques otra herramienta que haga lo mismo.
  5. Ante la duda, detente y pregunta. Una impresora en pausa desperdicia un poco de electricidad; una impresión incorrecta desperdicia horas y filamento; una compuerta omitida puede quemar una casa. El usuario siempre está disponible — pregunta.

Verificación previa — cada sesión que toque el hardware

  1. mcp-cura doctor y mcp-moonraker doctor (diagnósticos locales, de solo lectura).
  2. moonraker_verify_connection — ¿conectado? ¿latencia? Klipper listo, ocupado o apagado.
  3. cura_policy_info y moonraker_policy_info — conoce los límites activos (límites de temperatura, modo de aprobación, interruptores de solo lectura) antes de planificar una mutación.
  4. moonraker_server_info — confirma que Klipper está ready, no shutdown ni ocupado con otro trabajo.
  5. Acuerda el plan con el usuario: qué impresora, qué material, qué boquilla, qué calidad, qué archivo, cuántas copias, dónde en la cama. No adivines.

Si un servidor falta o no se conecta, dilo y dirige al usuario a references/troubleshooting.md. No edites configuraciones, instales paquetes, ni ejecutes algo con --force solo para que una verificación pase.

El flujo de trabajo

Trabaja etapa por etapa. Informa brevemente después de cada etapa y pausa para el usuario cada vez que una compuerta lo requiera.

Etapa 0 — Plan. Resume el trabajo en un párrafo (archivo, impresora, material, boquilla, perfil, copias, colocación). Obtén la autorización.

Etapa 1 — Importar. cura_artifact_import con una ruta absoluta dentro de las raíces de importación configuradas (~/Downloads, ~/Documents, ~/Desktop, ~/models por defecto) — o con el parámetro data en base64 para un archivo fuera de las raíces. Las raíces confinan las rutas del sistema de archivos; la ruta data es el propio canal compatible del servidor para bytes proporcionados por el cliente, no una omisión, y no necesita cambios de política. Si una importación de ruta es rechazada, vuelve a importar los mismos bytes a través de data (el direccionamiento de contenido devuelve el mismo artifact_id) en lugar de reducir el trabajo a "no puedo ayudar". Registra el artifact_id devuelto — cada paso posterior lo referencia.

Etapa 2 — Inspeccionar y reparar. cura_mesh_inspect (límites en mm, conteo de triángulos, hermeticidad, volumen, triángulos degenerados). Luego, según sea necesario:

  • orientación / colocación / escalado → cura_mesh_transform (escalar → rotar → trasladar, luego center_on_bed)
  • superficie no manifold o desordenada → cura_mesh_remesh con un voxel_size, o cura_mesh_offset para expandir/contraer una malla cerrada
  • varias partes como una sola impresión → cura_mesh_merge (sopa de triángulos) o cura_mesh_boolean (una unión/sustracción real — basada en vóxeles)
  • demasiados triángulos → cura_mesh_decimate hacia target_triangles

Inspecciona de nuevo después de cada reparación y cita los números. Las operaciones de malla de riesgo medio están controladas por política pero no necesitan aprobación; aun así, muestra al usuario qué cambió.

Etapa 3 — Resolver y verificar el perfil. cura_profile_list para encontrar definiciones y perfiles de calidad, luego cura_profile_resolve (definición + calidad + material + variante + intención). Lee las advertencias: expresiones de Cura que no puede evaluar, violaciones de temperatura graves. Luego cura_profile_verify — los errores deben ser cero antes de laminar. Si no lo son, arregla el perfil (o elige otro) y explica por qué. Nunca lamines con una verificación fallida.

Etapa 4 — Laminar. cura_slice(model_artifact_ids=[…], definition, quality, material, variant, intent, overrides?, name, wait=true, wait_timeout_secs). Respeta max_concurrent_jobs (por defecto 2). Consulta con cura_slice_status; cura_slice_wait para trabajos cortos; cura_slice_cancel solo para trabajos en cola/en ejecución. Si el laminado falla, cura_slice_status lleva la cola del registro del motor — cita el error real.

Etapa 5 — Revisión del G-code. Sobre el artefacto G-code devuelto por el laminado:

  • cura_gcode_inspect — tiempo estimado, filamento, número de capas, rango Z, temperaturas máximas, comandos sospechosos.
  • cura_gcode_verify — comandos peligrosos, temperaturas vs. política local, falta de apagado del calentador / desactivación del motor / metadatos.
  • Si falta algo, cura_gcode_prepare crea un artefacto nuevo con una secuencia de apagado segura (o secuencia de finalización completa). Cuando lo uses, lleva adelante el identificador del artefacto nuevo — el original no se modifica.

Luego muestra al usuario el resumen — tiempo, filamento, temperatura más alta, resultado de la verificación — y obtén confirmación explícita antes de la Etapa 6. Esta es la última oportunidad barata para abortar.

Etapa 6 — Transferir a la impresora. El artefacto G-code debe existir en la raíz gcodes de la impresora. Los servidores MCP no exponen una herramienta de subida; las rutas compatibles son:

  • cura_artifact_export a una raíz de exportación que la impresora pueda leer (un recurso compartido montado/USB que la impresora vigila), o
  • el usuario copia el archivo allí mismo (interfaz web, SCP, el recurso compartido), o
  • si — y solo si — el usuario lo solicita explícitamente, el punto final de subida HTTP de Moonraker como una excepción claramente registrada.

Antes de tocar la impresora, confirma que el archivo llegó: moonraker_files_list (raíz gcodes) y moonraker_file_metadata — el tiempo y filamento estimados deben coincidir con la salida de Cura.

Etapa 7 — Imprimir. Antes de moonraker_print_start:

  • moonraker_printer_status muestra Klipper listo e inactivo, no apagado ni ocupado; moonraker_temperatures muestra lecturas ambientales normales.
  • La cama está despejada, la placa correcta, el material correcto cargado, la puerta cerrada — pregunta al usuario; no puedes verlo.
  • El usuario confirma el nombre exacto del archivo. moonraker_print_start prepara una acción de alto riesgo; transmite la solicitud de aprobación y espera la aprobación, luego moonraker_confirm_action con la frase y acknowledge=true.

Durante la impresión: consulta moonraker_printer_status y moonraker_temperatures; usa moonraker_camera_snapshot para una verificación visual cuando algo parezca incorrecto; moonraker_gcode_history cuando los comandos fallen. Para detener la impresión para inspección, usa moonraker_print_pause → inspeccionar → moonraker_print_resume. Para abortar, moonraker_print_cancel (alto riesgo, doble confirmación) — solo cuando el usuario lo solicite. Después, moonraker_print_history registra el resultado.

Post-impresión. Los calentadores deben estar apagados (la secuencia de finalización lo hace — verifica con moonraker_temperatures). Recuerda al usuario que limpie la placa. Si el usuario quiere limpiar los artefactos, listarlos (cura_artifact_list) y solo eliminar con confirmación explícita — cura_artifact_delete es de alto riesgo.

Aprobaciones en una frase

Los modos de aprobación (in_band, out_of_band, both) se configuran por servidor en [approval]. En todos los modos, una acción preparada = un approval_id = una frase de confirmación de un solo uso con un TTL corto (por defecto 120 s). La herramienta y los argumentos almacenados de la llamada de preparación son los que se ejecutan; los argumentos dados a *_confirm_action son decorativos. *_pending_approvals vuelve a listar lo que está esperando; moonraker_cancel_approval / mcp-cura deny <id> anula una acción antes de que se ejecute. Protocolo completo: references/safety-approvals.md.

Referencia rápida — dónde leer más

La instalación y el registro de MCP/habilidad por plataforma residen en los documentos del repositorio (docs/platforms.md), no en esta habilidad — cárguelos cuando el usuario pregunte sobre la configuración.

Cuándo no usar esta habilidad

Dibujar o reparar geometría CAD/STL a mano (usa una herramienta de modelado), editar printer.cfg o includes de Klipper (la administración del host y la escritura de configuración están desactivadas por defecto — y deben permanecer así), o cualquier cosa que involucre reinicios del host, reinicios de firmware o G-code sin formato que el usuario no haya habilitado explícitamente. Dilo y detente.

Skills relacionados