anycubic-slicer-next-control
Provides control of Anycubic Slicer Next and Anycubic printers, enabling model loading, profile selection, slicing, G-code export, and management of print jobs over LAN and Anycubic cloud.
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., "@anycubic-slicer-next-controlSlice this STL with the standard profile and export the G-code"
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.
Anycubic Slicer Next Control
PoC de plugin local para o Codex/ChatGPT controlar com segurança o Anycubic Slicer Next no Windows através de tools MCP estruturadas.
O projeto abre o app, carrega STL/3MF, descobre perfis locais, aplica overrides básicos de slicing, inicia o slice e exporta G-code e/ou .gcode.3mf. Suporta também remote print LAN (MQTT + FTP) para impressoras Anycubic compatíveis, com envio do ficheiro para o SD card e início/controlo do trabalho a partir da máquina local.
Estado do PoC
Detecta automaticamente
C:\Program Files\AnycubicSlicerNext\AnycubicSlicerNext.exee aceita override por variável de ambiente.Usa a CLI nativa herdada do OrcaSlicer (
--load-settings,--load-filaments,--slice,--outputdir,--export-3mf) apenas para slice local de G-code.Orquestra o app GUI para export compatível com o firmware:
slice_via_appabre o app, carrega o modelo e usa os controlos visuais do próprio app (Slice all / Export G-code) via UI Automation, porque a CLI não gera os metadados que a impressora exige (thumbnails,print_sequence,paint_info).Inspeciona a janela via Windows UI Automation e expõe um conjunto pequeno e seguro de ações (
uia_tree,uia_read,uia_click,uia_type,uia_key) com allowlists fixas — nunca coordenadas nem teclas arbitrárias.Controla impressoras na LAN via MQTT/TLS (porta 8883) e FTP/TLS (porta 990), com o access code nunca registado em logs.
Leitura da conta Anycubic via cloud workbench API (
account_login,account_devices,account_files), com token JWT capturado do app em memória e guardado DPAPI-encrypted. O envio poraccount_printestá bloqueado para repetição de ficheiros históricos até corrigir o contrato cloud documentado no incidente de 2026-09-07.Cria um plano temporário antes de executar e grava cada resultado numa pasta nova, evitando sobrescrita.
Valida extensões, tamanho, caminhos canónicos, perfis e roots permitidos.
Regista apenas metadados mínimos num audit log local; não guarda prompts nem tokens.
Related MCP server: bambu-cloud-mcp
Arquitetura
ChatGPT / Codex
|
| MCP stdio; schemas estritos; aprovação do host
v
Servidor local TypeScript
|
+-- Policy: allowlists, limites, plano -> confirmação, audit log
|
+-- Orquestração do app GUI (via de export compatível)
| +-- slice_via_app: abrir app, carregar modelo,
| | Slice all + Export G-code (UIA allowlist)
| +-- export-scan: localizar ficheiro novo e validar
| estrutura (thumbnail / print_sequence) antes de usar
|
+-- Adaptador CLI (secundário: G-code local)
| +-- carregar perfis JSON
| +-- overrides básicos
| +-- slice local
| +-- G-code / G-code.3MF
|
+-- Ponte Windows UIA/Win32 (inspeção + ações seguras)
| +-- detetar/inspecionar janela
| +-- ações allowlist (Slice all, Save Project, Export G-code, ...)
|
+-- Remote print LAN (MQTT/FTP) e Cloud (workbench API)O MCP orquestra o app em vez de replicar o slicer: o firmware rejeita ficheiros .gcode.3mf produzidos só pela CLI (erro 10115) porque lhes falta a estrutura que a própria app GUI gera. A UI wxWidgets expõe controlos via UI Automation com nomes localizados; por isso a camada UIA usa apenas uma allowlist pequena e robusta de ações, nunca coordenadas arbitrárias.
Mais detalhes: docs/architecture.md e schemas/tools.json.
Codex local vs. ChatGPT
Codex desktop/local: usa diretamente o servidor MCP stdio incluído em
.mcp.json.ChatGPT Developer Mode: a OpenAI exige um endpoint HTTPS público ou o Secure MCP Tunnel. Para manter o slicer privado, ligue o tunnel a este servidor stdio; depois registe a conexão no ChatGPT e use o ID
plugin_asdk_app...numa futura.app.json.O PoC não abre porta TCP e não cria um tunnel automaticamente. Essa escolha evita exposição acidental da máquina e precisa de configuração/autorização do workspace do utilizador.
O manifesto .codex-plugin/plugin.json e a pasta skills/ são específicos do ecossistema Codex. O servidor em dist/server.mjs, porém, é um servidor MCP stdio normal e pode ser usado por qualquer cliente MCP que execute processos locais na mesma máquina Windows.
Claude Code
Extraia o plugin para uma pasta estável, por exemplo C:\Tools\anycubic-slicer-next-control, e registe o servidor nativo:
claude mcp add anycubic-slicer-next --scope user -- cmd /c node "C:\Tools\anycubic-slicer-next-control\dist\server.mjs"
claude mcp listNo Windows nativo, cmd /c evita problemas de inicialização do processo local. O Claude Code pedirá confirmação antes de usar uma configuração MCP de projeto.
GitHub Copilot CLI
copilot mcp add anycubic-slicer-next -- node.exe "C:\Tools\anycubic-slicer-next-control\dist\server.mjs"
copilot mcp listTambém é possível colocar a configuração em %USERPROFILE%\.copilot\mcp-config.json. No VS Code, use .vscode\mcp.json com a mesma command/args, mas a chave superior esperada pelo editor é servers em vez de mcpServers.
Claude Code e Copilot usarão as tools MCP, mas não a skill Codex nem o manifesto .codex-plugin. O cliente precisa rodar no Windows onde o Anycubic Slicer Next está instalado; agentes cloud/remotos não conseguem controlar esse aplicativo local sem uma ponte explícita.
Como usar o MCP (guia de utilização)
O servidor expõe 86 tools MCP (ver schemas/tools.json) que cobrem o ciclo completo: inspecionar → abrir → fatiar → exportar → imprimir. Todas as tools são chamadas pelo agente (Codex, Claude, Copilot, …) através do protocolo MCP stdio; o fluxo é sempre o mesmo:
1. Modelo de confirmação (gating)
O servidor é local-first e "least privilege": nenhuma tool que tenha consequências (mover eixos, aquecer, iniciar impressão, enviar comandos, escrever ficheiros) executa sem aprovação explícita.
Classe de segurança | Exemplos | Exigências |
|
| nenhuma — executam de imediato |
|
|
|
|
|
|
| mover eixos, |
|
Regra prática: se a tool pedir confirm, o agente deve mostrar o plano/parâmetros ao utilizador e aguardar aprovação explícita antes de chamar. Um default de schema (confirm: false) nunca dispara uma ação.
2. Jornada típica — fatiar e exportar
1. inspect_slicer({}) → confirma instalação, processo e roots permitidos
2. slicer_profiles({ kind: "machine", query: "Kobra S1" })
3. open_model_in_slicer({ path: "<abs>\\modelo.stl|3mf", confirmation: "RUN" })
4. prepare_slice_job(...) → devolve o plano (camada, infill, walls, suportes)
5. run_slice_job({ job_id, confirmation: "RUN" })O fluxo recomendado para exportar um ficheiro que o firmware aceita é
slice_via_app(o app gera thumbnails,print_sequence,paint_info— a CLI não gera esses metadados e a impressora rejeita o ficheiro com erro 10115).A CLI é usada apenas como via secundária para G-code local (
--slice,--export-3mf). Não assuma que o resultado CLI é imprimível sem a validação do app.Nunca imprima G-code sem verificar no preview/estado: impressora, nozzle, filamento, temperaturas, tipo de mesa e limites físicos.
3. Jornada típica — imprimir via LAN
1. discover_printers({}) → ou fixar ANYCUBIC_PRINTER_IPS
2. printer_status({ dev_id, dev_ip, access_code })
3. send_to_printer({ ... local_file }) → envia .gcode/.3mf para sdcard/ via FTP/TLS
4. start_print({ ... }) → inicia o trabalho (project_file)
5. printer_status(...) → confirmar gcode_state / mc_percent4. Jornada típica — imprimir via cloud (por conta)
1. account_capture_token({}) → captura o JWT do app em memória (requer sessão iniciada)
2. account_token_status({}) → confirma dono/expiração sem ecoar segredo
3. account_login({}) → troca token por sessão cloud (XX-Token)
4. account_devices({}) → obter printer_key
5. account_file_upload({ local_file }) → sobe o .gcode/.3mf para a cloud
(ou account_cloud_files({}) para escolher um ficheiro já existente)
6. printer_print_start(...) → ordem 1 int live-validated (contrato correto)Atenção:
account_printestá legado/obsoleto (ordem 1/filetype 1, o contrato que causou o erro 10115). Para ficheiros novos useslice_via_app+ upload +printer_print_start/account_print_local. Ver incidente de 2026-09-07.
5. Ler o estado antes de agir
O servidor privilegia leitura antes de escrita. Antes de qualquer comando de controle, use:
printer_status/printer_status_snapshot— temperaturas, estado, progresso, slots ACEprinter_read_all— leitura exaustiva de todas as fontes (12 MQTT + catálogo HTTP, 434 campos)printer_connection_status— saúde da sessão MQTT cloud persistenteprinter_property_catalog— o que cada propriedade significa (offline)printer_hidden_command_map— todos os canais de escrita e a sua classe de segurança
O printer_command_send aceita light, fan, temperature, ace_*, ai_settings, axis, camera, print_update, pause/resume/stop — mas cada classe respeita o gating da tabela acima.
6. CAD e ferramentas criativas
cad_open_workspace({}) → abre o editor 3D web local (127.0.0.1, token por sessão)
cad_generate_parametric(...) → script paramétrico (manifold) → malha
cad_generate_from_prompt({ prompt, dry_run: true }) → AI texto→CAD (sem chamar o provedor)
cad_v2_boolean({ ... }) → booleanos CSG watertight (subtract/union/intersect)
cad_export(...) → slice_via_app(...) → fluxo completo modelar→fatiar
cad_close_workspace() → para o servidor local7. Boas práticas / segurança
Caminhos absolutos sempre. Roots permitidos:
ANYCUBIC_CONTROL_ALLOWED_INPUT_ROOTS/ANYCUBIC_CONTROL_ALLOWED_OUTPUT_ROOTS.confirmpor omissão éfalse— o utilizador aprova em cada passo consequente.Nunca colar access codes / tokens no chat: o servidor usa env vars ou ficheiros DPAPI-protected. Logs redigem tokens automaticamente.
Lê o estado antes de agir: use as tools
readacima antes de qualquerprinter_command_send/printer_print_start.Workflows de ficheiros: outputs em pasta nova por UUID (
ANYCUBIC_CONTROL_OUTPUT_ROOT), nada é sobrescrito.
Tools
| Tool | Efeito |
| ------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --- | ----------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| inspect_slicer | Deteta instalação, processo, roots e disponibilidade UIA. |
| list_slicer_profiles | Lista perfis JSON locais por tipo. |
| open_slicer | Abre o app. |
| open_model_in_slicer | Valida e abre um STL/3MF permitido. |
| prepare_slice_job | Valida tudo e devolve o comando/plano, sem executar. |
| run_slice_job | Executa um plano confirmado numa pasta nova. |
| get_slice_job | Consulta estado e artefactos. |
| uia_tree | Lê a árvore UIA da janela do slicer (depth/children limitados). |
| uia_read | Lê valores/estado dos controlos expostos. |
| uia_click | Invoca uma ação segura por nome (Slice plate/all, Save Project, Export G-code). |
| uia_type | Digita texto ASCII no controlo focado (máx. 500 chars). |
| uia_key | Envia uma tecla/shortcut da allowlist (Enter, Tab, Ctrl+S, ...). |
| slice_via_app | Orquestra o app (abre, ativa, Slice all + Export G-code via UIA) e localiza/valida o ficheiro exportado. Use quando o firmware rejeitar ficheiros slice-via-CLI (erro 10115). |
| discover_printers | Varre a sub-rede local procurando portas de impressora (8883/990/...). |
| printer_status | Consulta temperaturas, estado e progresso da impressora via MQTT. |
| send_to_printer | Envia .gcode/.3mf para o SD card via FTP (sdcard/). |
| start_print | Inicia o trabalho na impressora via project_file (LAN). |
| cancel_print | Envia task_cancel/task_pause/task_resume/print_stop. |
| account_capture_token | Captura o JWT (access_token) do app em memória e guarda DPAPI-encrypted. |
| account_token_status | Mostra quem é o dono do token e expiração, sem ecoar o segredo. |
| account_token_clear | Apaga o token guardado e a sessão em memória. |
| account_login | Troca o access_token por uma sessão cloud (XX-Token) ativa. |
| account_devices | Lista impressoras ligadas à conta Anycubic (remote print por conta). |
| account_files | Lista ficheiros na nuvem da conta (que alimenta account_print). |
| account_print | Legado/obsoleto: mantido por compatibilidade mas usa o contrato antigo (ordem 1, filetype 1) que causou o erro 10115. Use printer_print_start (contrato ordem 1 int, live-validated 2026-09-11). Ver incidente de 2026-09-07. |
| account_cloud_diagnostics | Consultas cloud allowlist: detalhe/estado/funções da impressora, histórico e detalhe, projetos, erros, metadados G-code, ACE, thumbnails. |
| account_cloud_live_diagnostics | Leituras MQTT cloud por tipo (axis/info/tempature/fan/light/peripherie/aiSettings/multiColorBox/print/file) com correlação de respostas e códigos do device. |
| printer_http_readonly_diagnostics | Sondas HTTP GET limitadas à impressora (facade OctoPrint/gkapi). |
| printer_read_all | Leitura exaustiva: todas as fontes MQTT (12) via cloud ou LAN nativa + catálogo HTTP completo (434 campos), com reconciliação campo-a-campo. Ver printer-property-map. |
| printer_property_catalog | Catálogo offline das 553 propriedades conhecidas (fonte, unidade, grupo, evidência, tópico). |
| printer_hidden_command_map | Mapa offline de todos os canais de escrita: tópicos, envelope, comandos com payload e classe de segurança, endpoints HTTP, order ids legacy, operações não verificadas. |
| printer_property_reconcile | Reconciliação offline: payload capturado vs catálogo → revela campos não documentados (extra). |
| printer_command_catalog | Lista os 18 comandos executáveis (tipo, ação, payload, classe de segurança, confirmações exigidas). |
| printer_connection_status | Saúde da sessão MQTT cloud persistente (ligada, contadores, eventos em buffer). |
| printer_gcode_resolve | Resolve gcode_id → cloud file id + metadados de slice (/work/gcode/infoFdm). |
| printer_command_send | Controlo completo por cloud: luz, ventoinhas, temperatura, ACE (secagem/feed/auto-feed/slot), AI, eixos (mover/home/motores-off), câmara (start/stop capture), print_update (configurações do trabalho em curso), pausa/retomar/parar, início local. Exige confirm: true (+ confirm_word: "EXECUTE" em motion/job). |
| printer_print_start | Início de impressão cloud com o contrato ordem 1 int live-validated (2026-09-11: uma tarefa real alcançou printing e finished na unidade de teste; a hipótese 1240 nunca criava tarefa): resolve gcode, recusa impressora ocupada, slice_param completo, mapeamento ACE explícito e verificação pós-envio da tarefa. Ver printer-command-bus. |
| account_file_upload | Upload de ficheiro local para a cloud (lock → PUT presigned → claim → unlock; locks órfãos eliminados em falha). Devolve cloud file id e gcode_id quando gerado. |
| account_print_local | Fluxo completo local→impressão: upload + resolução + início ordem 1 verificado num só fluxo confirmado. |
| printer_lan_camera | Snapshot da câmara por LAN (HTTP-FLV porta 18088, ffmpeg argv fixo, sem shell). |
| printer_connection_close | Encerra a sessão MQTT cloud persistente (higiene; reconecta automaticamente no próximo comando). |
| printer_material_catalog | Vocabulário de materiais aceite nas escritas de slot ACE. |
| printer_status_snapshot | Painel único de estado cloud (read-only): lifetime (print count, material usado, tempo total), firmware, temperaturas atuais, features, slots ACE Pro (filamento/estado/cor). Expansão Batch 0. |
| account_print_history | Histórico de impressão cloud com página/limite/status e razões de falha legíveis (read-only). Expansão Batch 0. |
| printer_lifetime_metrics | Métricas compactas de vida útil da impressora (contador, material, tempo) (read-only). Expansão Batch 0. |
| account_cloud_store | Quota de armazenamento cloud (usado/total) para preflight de upload (read-only). Expansão Batch 0. |
| account_cloud_files | Shelf de ficheiros cloud: gcode_id, tamanho, MD5, thumbnails (read-only). Expansão Batch 0. |
| printer_error_list | Catálogo de defeitos da câmara/AI + códigos de razão de falha conhecidos (read-only). Expansão Batch 0. |
| printer_file_preview | Pré-visualização de slice por gcode_id/file_id: layers, dimensões, uso de filamento por cor (read-only). Expansão Batch 0. |
| printer_order_registry | Registos de order-ids do protocolo cloud: 10 validados live + 40 de referência, com aviso de colisão 1214 (read-only). Expansão Batch 0. |
| account_cloud_projects | Índice de projetos cloud (/work/project/getProjects): id, nome, modelo, tamanho, timestamps — útil como índice de recuperação/report (read-only). Expansão Batch 2. |
| account_print_metrics | Agregados sobre account_print_history: contadores finished/failed/cancelled/paused, breakdown de falhas por razão legível e taxas de sucesso/falha (read-only). Expansão Batch 2. |
| printer_metrics_expose | Snapshot da impressora como texto Prometheus/OpenMetrics (printer_print_count_total, printer_material_used_kg, temperaturas, consumíveis, ACE drying) — pronto para Grafana/scrape (read-only). Expansão Batch 2. |
| printer_edge_stop | Recuperação de estado preso: mode:"force" envia STOP_PRINT_FORCE (44); mode:"free" envia SET_PRINT_STATUS_FREE (901) para limpar estados de "resuming/stoping". confirm:true e confirm_word:"EXECUTE" (safety job). Só na unidade de teste, após leitura do estado. Batch 1. |
| ace_feed_finish | Conclui uma operação de alimentação de filamento ACE (FEED_FILAMENT_FINISH 1209). confirm:true (safety state). Batch 1. |
| ace_refresh_slot | Refresca os metadados de um slot ACE (MULTI_COLOR_BOX_REFRESH_SLOT 1210). confirm:true (safety state). Batch 1. |
| printer_rename | Renomeia a impressora na conta cloud (/work/printer/edit, N10). confirm:true; idempotente, não destrutivo. Batch 1. |
| firmware_update_check | Consulta firmware atual/latest e indica se existe atualização (OTA read-only, nunca dispara/cancela OTA; N10). Batch 1. |
| printer_event_watch | Amostra printersStatus e devolve o delta desde a amostra anterior (estado, print_status, task_id, temperaturas, contadores lifetime, slots/consumíveis ACE, drying) como eventos; reset:true limpa a baseline. Read-only. N14. Batch 2. |
| nfc_tag_decode | Decoder puro offline de registos NFC crus → Anycubic SKU / Bambu-like / Creality ASCII. Nunca escreve em nenhuma tag. Read-only. N13. Batch 2. |
| spool_resolve | Resolve UID/SKU contra o registo offline de spools conhecidos. Read-only. N13. Batch 2. |
| camera_cloud_info | Info da câmara cloud: suporte RTC (Agora/Shengwang), video_taskid (autoriza sessão RTC), timelapse. Nunca abre a câmara nem encaminha o stream. Read-only. N12. Batch 2. |
| cad_open_workspace | Abre na browser uma página web 3D CAD local (127.0.0.1, token por sessão) para modelar/editar STL para impressão. Pode pré-carregar um ficheiro. |
| cad_close_workspace | Para o servidor local do workspace CAD (os ficheiros exportados permanecem no disco). |
| cad_v2_boolean | CSG robusto (Sprint 1): boolean watertight (add/subtract/intersect) entre dois objectos do workspace via three-bvh-csg. |
| cad_generate_parametric | Motor paramétrico (Sprint 2): executa script declarativo sandboxed sobre manifold-3d (WASM) e materializa a malha; STL/STEP opcional. |
| cad_generate_from_prompt | AI texto → CAD (Sprint 3): traduz descrição em script paramétrico (provedor configurado por CAD_AI_*), valida e executa; dry_run pré-visualiza sem chamar o provedor. |
| cad_select_faces / cad_edit_mesh / cad_texture / cad_image_to_3d | Edição avançada no workspace CAD: seleção de faces, extrude/bevel/subdivide/sculpt, cor/texture/relevo, imagem → 3D. |
| printer_capability_catalog | Catálogo read-only das capacidades LAN Anycubic (queries confirmadas, comandos mapeados, câmara). |
| printer_lan_command_preview | Pré-visualização exata (tópico + envelope) de um comando LAN — sem conectar nem publicar. |
| printer_diagnostics / printer_monitor | Diagnóstico LAN e recolha repetida de snapshots de estado. | | printer_lan_handshake / printer_lan_read | Transporte LAN nativo (mode LAN): handshake assinado 18910 + leituras de relatório via broker MQTT local 9883. Read-only; falham limpo em cloud-mode. Credenciais do broker nunca persistidas. |
| printer_lan_camera / camera_watch | Câmara via HTTP-FLV (porto 18088): mode:snapshot\|stream, duration_s (1–60), size; camera_watch faz snapshots periódicos opt-in (confirm:true). Captura read-only para o estado da impressora. |
| auth_setup / auth_id_flow_start | Primeira instalação sem Slicer: colar token pcf/web OU fluxo email/senha assistido por browser (portal Casdoor). Valida e grava DPAPI. Ver docs. | | slicer_component_inventory / audit_gcode_recovery | Inventário dos componentes do slicer; auditoria offline de G-code para recuperação. |
REST/OpenAPI (fase 5) + dados persistentes
Além do MCP stdio, o mesmo leque de tools está disponível por HTTP local (token-gated, só 127.0.0.1) para clientes genéricos (n8n, Node-RED, Home Assistant, Postman):
# 1) gerar/atualizar a spec OpenAPI 3.0 a partir das tools reais (79)
node scripts/generate-openapi.mjs --live
# -> escreve schemas/openapi.json
# 2) subir o bridge REST
node scripts/rest-bridge.mjs [--port 8766] [--token <hex>]
# POST /tools/{tool_name} (Bearer token)
# GET /openapi.json
# GET /healthO token é criado em %LOCALAPPDATA%\AnycubicSlicerNextControl\bridge-token
(ou PLUGIN_DATA); se não for passado --token, é gerado e impresso no arranque.
PLUGIN_DATA (variável de ambiente): redireciona toda a pasta de dados
(tokens cloud, bridge-token, outputs) para outro disco/pasta. Resolução:
$PLUGIN_DATA > %LOCALAPPDATA%\AnycubicSlicerNextControl >
pluginRoot/AnycubicSlicerNextControl. Útil para não encher o disco de sistema
ou para perfis portáteis.
Diagnóstico read-only consolidado: node scripts/diagnose.mjs [--cloud|--lan <ip>|--http|--printers] (substitui os antigos probe-*.mjs,
mantidos fora do repositório em local-scripts/archive/).
Módulo CAD (modelação 3D web)
O plugin inclui um módulo de modelação 3D web leve para desenhar objectos para impressão 3D sem abrir outra aplicação:
cad_open_workspace({ input_path?, port?, idle_timeout_min?, open_browser? })inicia um servidor HTTP apenas em 127.0.0.1 (nunca exposto à rede), gera um token aleatório por sessão e abre o browser. A ferramenta devolve a URL (com token).A página web oferece um editor inspirado em CAD (Three.js): primitivas (caixa, cilindro, cone, esfera, prisma), transformações numéricas em milímetros (mover, centrar, rodar, escalar), operações booleanas CSG (união/subtração/intersecção), import STL/OBJ e export STL/OBJ/3MF para a pasta raiz de saída configurada.
Booleanos robustos (Sprint 1):
cad_v2_booleanexecuta CSG watertight viathree-bvh-csg(MIT) sobre dois objectos do workspace — subtrair/intersetar com buracos reais (não só meias-espaços).Motor paramétrico (Sprint 2):
cad_generate_parametricexecuta um script declarativo sandboxed sobremanifold-3d(WASM) —box/cylinder/sphere/cone/tetrahedron,add/subtract/intersect,translate/rotate/scale/mirror— materializa a malha no workspace e devolve STL/STEP opcional.AI texto → CAD (Sprint 3):
cad_generate_from_prompttraduz uma descrição em linguagem natural num script paramétrico (provedor configurável por ambiente), valida, executa no motor manifold e materializa o resultado.dry_run: truedevolve uma pré-visualização determinística sem chamar o provedor.Medidas precisas: o servidor calcula caixa envolvente, volume e área num núcleo matemático em dupla precisão, e o ficheiro exportado pode ser usado diretamente em
slice_via_app/CLI.cad_close_workspacepara o servidor (fica livre a porta); os ficheiros exportados permanecem no disco.O workspace CAD não toca na impressora nem no slicer; é apenas um editor/repositório de STL para alimentar os fluxos de slicing existentes.
AI texto → CAD (configuração)
O provedor é lido de variáveis de ambiente do processo do servidor (nunca do browser/renderer):
Variável | Padrão |
| (sem chave — tool responde "not configured") |
|
|
|
|
Exemplo:
$env:CAD_AI_API_KEY = "sk-..."
node dist/server.mjsO fluxo completo (sem dry_run) chama {base}/chat/completions, extrai o código
de um fenced block, valida contra o sandbox partilhado e executa. A chave nunca
é exposta na UI nem nos logs (todos os erros passam por redact()).
Instalação e build
Requisitos: Windows, Anycubic Slicer Next e Node.js 22+.
Para instalação standalone, extraia anycubic-slicer-next-control-0.1.0.zip para uma pasta sem espaços e preserve a estrutura interna, especialmente dist/server.mjs. O ZIP é um pacote de plugin; para Codex, instale-o pelo marketplace/plugin manager local e abra uma nova task. Para outros clientes, use diretamente os comandos MCP acima.
Também há um bundle anycubic-slicer-next-marketplace-0.1.0.zip que já contém a estrutura .agents/plugins/marketplace.json e plugins/; ele pode ser registado diretamente como marketplace local do Codex.
pnpm install
pnpm run checkpnpm run check roda, em sequência, build → testes → smoke → e2e UI:
build:
node scripts/build.mjsregeneradist/server.mjsa partir do bundle congeladovendor/server.mjs(semtsc/esbuild; idempotente). Odist/é gitignored — nunca edite odist/diretamente, use ovendor/.test: suíte unitária (Node test runner, sem rede).
smoke:
scripts/smoke.mjsarranca o servidor MCP via stdio e valida as 82 tools +cad_open_workspace.e2e:ui:
tests/e2e/cad-ui.e2e.mjslança um Chromium headless real, abre o workspace CAD e executa o fluxo completo em browser: add primitivas → boolean CSG → paramétrico → AI dry-run (zero erros de página).
O plugin já inclui .codex-plugin/plugin.json e .mcp.json. Para desenvolvimento local, adicione a pasta a um marketplace pessoal ou de repositório usando o fluxo oficial do Codex; depois instale o plugin e abra uma nova task para carregar as tools.
Configuração de segurança
Variáveis opcionais:
Variável | Valor padrão |
| Descoberta em pastas padrão do Windows. |
| Plugin, Documents, Desktop e Downloads. |
|
|
| O root de output acima. |
| 1 GiB. |
| 600000 ms. |
| Access code da impressora (8 chars alfanuméricos). Usado quando a tool não recebe |
| IPs fixos separados por vírgula, para saltar o scan da sub-rede. |
Roots múltiplos usam ;. Todos os caminhos enviados às tools devem ser absolutos. Outputs são sempre criados dentro de uma pasta nova cujo nome é o UUID do job.
Exemplo de fluxo
inspect_slicer({})list_slicer_profiles({ kind: "machine", query: "Kobra S1" })— use the test-unit family as an example; any Anycubic machine profile works.Listar também processo e filamento.
prepare_slice_job(...)com, por exemplo,layer_height_mm: 0.2,infill_density_percent: 15,wall_loops: 3esupports: false.Rever printer/nozzle/material/output.
run_slice_job({ job_id, confirmation: "RUN" }).
Nunca imprima G-code sem verificar no preview a impressora, nozzle, filamento, temperaturas, tipo de mesa, limites físicos e comandos de início/fim.
Arquitetura (revisão: orquestrar o app, não replicar o slicer)
O MCP executa o aplicativo para toda a interação com o slicer — abre o app, carrega o modelo, e usa os próprios controlos visuais do app (via UIA) para fatiar e exportar. A CLI herdada do Orca é usada apenas para casos que ela suporta de forma fiável; ela não substitui o app nos formatos de export que o firmware exige. A tool slice_via_app encapsula exatamente esse fluxo: app GUI → Slice all → Export G-code → localizar e validar o ficheiro exportado.
Remote print (LAN)
discover_printers({})para candidatos na sub-rede (ou configureANYCUBIC_PRINTER_IPS).printer_status({ dev_id, dev_ip, access_code })para confirmar alcance e temperaturas.send_to_printer({ dev_id, dev_ip, access_code, local_file })após o slice.Mostre o caminho remoto e peça aprovação explícita.
start_print({ dev_id, dev_ip, access_code, task_name, file_remote_path: "sdcard:nome.gcode.3mf", ... }).printer_statuspara confirmargcode_state/mc_percent.
Remote print (Cloud / por conta)
account_capture_token({})— requer que o app esteja com sessão iniciada (re-login enquanto o watcher corre).account_token_status({})para confirmar o dono/expiração.account_login({})— troca o access_token por uma sessão cloud (XX-Token).account_devices({})— obter okey(printer_key) da impressora alvo.account_files({})— obterfile_key/file_id/gcode_idde um ficheiro já na nuvem.account_print({ printer_key, file_key, file_id, gcode_id, file_name, ... }).
Aceitação da API ≠ aceitação pelo firmware. Enviar um
.gcode.3mffatiado só via CLI pode resultar em erro 10115 na impressora porque falta ao ficheiro a estrutura que o app GUI gera (thumbnails,print_sequence,paint_info,bed_type). Para impressão cloud de um ficheiro novo, useslice_via_app(o app gera o formato correto), depois suba o ficheiro para a conta e chameaccount_print.
Pesquisa e limitações
A documentação atual da OpenAI define plugins como skills + MCP server + UI opcional e recomenda schemas explícitos, anotações corretas, least privilege e confirmação para ações consequentes: arquitetura, definição de tools, segurança, empacotamento.
O Anycubic Slicer Next é open source e baseado no OrcaSlicer: repositório oficial.
O manual oficial confirma os fluxos visuais de Import, Slice e Export G-code: manual Anycubic.
A CLI exporta G-code como resultado do slice e pode empacotá-lo em
.gcode.3mf.O remote print LAN segue o protocolo compatível com Bambu (MQTT
device/<id>/request|report+ FTPsdcard/), verificado no repositório oficial; necessita da impressora ligada na mesma rede e do access code. A automação foi inspecionada localmente numa instalação cujo executável reporta produto1.4.1.2. IDs e textos UIA não devem ser tratados como API estável.
Este projeto é independente, não afiliado à Anycubic. Nenhum código do slicer foi copiado; a integração invoca interfaces de processo e UI do app instalado.
This server cannot be deployed
Maintenance
Related MCP Connectors
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
3D print farm management for AI. Monitor, queue, and control prints on your SimplyPrint account.
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.30393 npm243GPL 2.0
- FlicenseAqualityCmaintenanceEnables remote cloud control and live LAN camera access for Bambu Lab 3D printers through 31 MCP tools.31-
- AlicenseAqualityCmaintenanceEnables MCP clients to monitor and control a Bambu Lab P1S printer over the local network, including status, file management, slicing, and print operations.11MIT
- FlicenseNot gradedqualityCmaintenanceEnables local Mac agents to monitor and control Bambu Lab 3D printers via MCP tools, including status checks, camera snapshots, and print job management.-