MCP 3D Printer Server
Conecta-se a sistemas de gerenciamento de impressoras 3D como OctoPrint, Klipper e Bambu Labs para manipulação de modelos e fluxos de trabalho de impressão.
Documentação
Agradecimentos à FULU e a Louis Rossmann
Obrigado à Fundação FULU e a Louis Rossmann por defenderem a propriedade do consumidor, os desenvolvedores de código aberto, os direitos de reparo e os usuários que não deveriam ter hardware funcional piorado por software restritivo. Este servidor MCP trata o fork FULU OrcaSlicer-bambulab como um alvo de slicer de projeto Bambu de primeira classe.
MCP 3D Printer Server
✨ Novidades / Atualizações Significativas (desde a última sessão)
- Transportes Locais Duplos: Adicionados modos de execução explícitos
stdioestreamable-httpcom seleção de transporte baseada em variáveis de ambiente. - Suporte ao FULU OrcaSlicer-bambulab: Adicionado suporte ao slicer
orcaslicer-bambulab/fulu_orcapara exportação de 3MF de projetos Bambu, e tornou-o o alvo de slicer Bambu padrão quando nenhum slicer está configurado. - Passada de Confiabilidade Bambu: Corrigidos bugs de conexão de argumentos Bambu, adicionadas operações de arquivo com suporte a FTP, melhorado o comportamento de atualização de status e implementados caminhos de comando práticos para
startJob,setTemperatureeprint_3mf. - Ferramentas de Ponte Blender: Adicionado
blender_mcp_edit_modelcom modo de execução opcional para fluxos de trabalho de colaboração em edição de modelos. - Testes de Comportamento de Transporte: Adicionados testes de comportamento reais para ambos os transportes (
initialize,tools/list, sucesso + falhatools/call, rejeição de origem). - Modernização do Docker: Atualizado o fluxo de build do Docker para funcionar sem recursos específicos do BuildKit e verificada a inicialização HTTP transmissível em testes de fumaça do contêiner.
🗺️ Roadmap / Tarefas Pendentes
- Alcançar Paridade de Recursos: Elevar a funcionalidade (detalhes de status, operações de arquivo, impressão direta quando possível, gerenciamento de predefinições) para OctoPrint, Klipper, Duet, Repetier, Prusa Connect e Creality Cloud ao nível de robustez planejado para a implementação Bambu.
- Implementar Status MQTT Completo do Bambu: Refatorar
getStatuspara Bambu para assinar relatórios MQTT e manter estado em tempo real. - Implementar Mapeamento AMS Robusto: Substituir a lógica provisória; analisar e usar corretamente o mapeamento AMS da configuração do slicer
.3mfou substituições do usuário para o comando de impressão MQTT. - Implementar Substituições de Impressão
.3mf: Adicionar lógica à ferramentaprint_3mfpara lidar com substituições fornecidas pelo usuário (por exemplo, sinalizadores de calibração) e potencialmente configurações comuns de slicer, se viável via MQTT/G-code. - Calcular Hash MD5: Adicionar lógica para calcular e incluir o hash MD5 do arquivo
.3mfno comando de impressão MQTT (opcional, mas recomendado pelo protocolo). - Refatorar Operações de Arquivo Bambu: Investigar a substituição das operações FTP
bambu-js(getFiles,uploadFile) por métodos MQTT diretos, se possível/estável, ou contribuir com suporte FTPS parabambu-js. - Adicionar Lógica de Descoberta de Predefinições: Melhorar a listagem de recursos de predefinições (atualmente lista com base em nomes de arquivo potenciais; poderia analisar arquivos de índice, se existirem).
- Expandir Suporte a
.3mf: Adicionar suporte a impressão.3mfpara outros tipos de impressoras, quando aplicável. - Tratamento de Erros e Relatórios: Melhorar o tratamento de erros MQTT e os relatórios de progresso/conclusão de impressão.
- Testes: Realizar testes de execução completos de todos os novos recursos Bambu.
Clique para expandir o Índice
Índice
Descrição
Este é um servidor que permite que usuários MCP se conectem aos endpoints de API destas impressoras 3D:
- OctoPrint
- Klipper (Moonraker)
- Duet
- Repetier
- Bambu Labs
- Prusa Connect
- Creality/Ender
Este servidor é um servidor Model Context Protocol (MCP) para conectar o Claude a sistemas de gerenciamento de impressoras 3D. Ele permite que o MCP interaja com impressoras 3D por meio das APIs de vários sistemas de gerenciamento de impressoras, como OctoPrint, Klipper (via Moonraker), Duet, Repetier e impressoras Bambu Labs.
Nota sobre Uso de Recursos: Este servidor MCP inclui recursos avançados de manipulação de modelos 3D que podem consumir muita memória ao trabalhar com arquivos STL grandes. Consulte a seção "Limitações e Considerações" para obter informações importantes sobre uso de memória e desempenho.
Recursos
- Obter o status da impressora (temperaturas, progresso da impressão, etc.)
- Listar arquivos na impressora
- Enviar arquivos G-code para a impressora
- Iniciar, cancelar e monitorar trabalhos de impressão
- Definir temperaturas da impressora
- Manipulação avançada de arquivos STL:
- Estender a base para melhor aderência
- Escalar modelos uniformemente ou ao longo de eixos específicos
- Rotacionar modelos em torno de qualquer eixo
- Transladar (mover) modelos
- Modificar seções específicas de arquivos STL (superior, inferior, centro ou personalizado)
- Análise abrangente de STL com informações detalhadas do modelo
- Gerar visualizações SVG de múltiplos ângulos de arquivos STL
- Relatórios de progresso em tempo real para operações longas
- Tratamento de erros com diagnósticos detalhados
- Fatiar arquivos STL para gerar G-code
- Confirmar configurações de temperatura em arquivos G-code
- Fluxo de trabalho completo de ponta a ponta, da modificação de STL à impressão
- Imprimir arquivos
.3mfdiretamente em impressoras Bambu Lab (via comando MQTT) - Fatiar projetos Bambu com FULU OrcaSlicer-bambulab (
SLICER_TYPE=orcaslicer-bambulab) e fatiar automaticamente arquivos 3MF não fatiados antes da impressão Bambu quando um slicer de projeto está configurado - Inspecionar e sondar o runtime FULU BambuNetwork (
check_fulu_orca_setup) e chamar métodos RPC de ponte FULU seguros por padrão para diagnósticos e desenvolvimento (fulu_bambu_network_rpc) - Ler arquivos de predefinição do Bambu Studio (impressora, filamento, processo) como recursos
Instalação
Pré-requisitos
- Node.js 18 ou superior
- npm ou yarn
Instalar a partir do npm
npm install -g mcp-3d-printer-server
Instalar a partir do código-fonte
git clone https://github.com/dmontgomery40/mcp-3d-printer-server.git
cd mcp-3d-printer-server
npm install
npm link # Makes the command available globally
Executando com Docker
Você também pode executar o servidor usando Docker e Docker Compose para um ambiente conteinerizado.
- Certifique-se de ter Docker e Docker Compose instalados.
- Copie
.env.examplepara.enve configure suas definições. - Compile e execute o contêiner:
docker-compose up --build -d
Usando Slicers com Docker
Observe que a configuração padrão do Docker não pode usar diretamente um slicer instalado na sua máquina host. Montar o executável do slicer diretamente do host no contêiner não é confiável devido às diferenças de sistema operacional e bibliotecas entre o host e o contêiner.
A abordagem recomendada é instalar o slicer de sua preferência dentro da imagem Docker. Isso torna o contêiner autossuficiente.
Para fazer isso, você precisará modificar o Dockerfile. Aqui está um exemplo conceitual de como você pode adicionar PrusaSlicer, OrcaSlicer ou a compilação FULU OrcaSlicer-bambulab (os comandos específicos podem variar dependendo do slicer, suas dependências e os pacotes Alpine atuais):
# ... other Dockerfile commands ...
# Example: Install PrusaSlicer, OrcaSlicer, or FULU OrcaSlicer-bambulab (adjust command as needed)
# Check Alpine package repositories first (e.g., apk add prusaslicer or apk add orcaslicer)
# If not available, download and install manually (e.g., AppImage):
# RUN apk add --no-cache fuse # FUSE might be needed for AppImages
# RUN wget https://example.com/path/to/OrcaSlicer_Linux_Vxxxx.AppImage -O /usr/local/bin/orcaslicer && \
# chmod +x /usr/local/bin/orcaslicer
# Set the SLICER_PATH env var accordingly in docker-compose.yml or when running
# Example for installed executable:
ENV SLICER_PATH=/usr/local/bin/orcaslicer
# ... rest of Dockerfile ...
Após modificar o Dockerfile, recompile sua imagem (docker-compose build). Você também precisará garantir que a variável de ambiente SLICER_PATH no seu arquivo .env ou docker-compose.yml aponte para o caminho correto dentro do contêiner (por exemplo, /usr/local/bin/orcaslicer). Para o fork FULU habilitado para Bambu, defina SLICER_TYPE=orcaslicer-bambulab.
Peço desculpas por não incluir um slicer específico pronto para uso, mas dada a grande variedade de slicers (PrusaSlicer, OrcaSlicer, Cura, etc.) e configurações disponíveis, pré-instalar um aumentaria desnecessariamente o tamanho da imagem para muitos usuários. Se um slicer específico se tornar um pedido muito comum, certamente poderei considerar adicionar suporte oficial a ele em uma versão futura.
Configuração
Crie um arquivo .env no diretório onde você executará o servidor ou defina variáveis de ambiente:
# Required for authentication with your printer management system
API_KEY=your_api_key_here
# Default printer connection settings
PRINTER_HOST=localhost
PRINTER_PORT=80 # Port for non-Bambu HTTP APIs
PRINTER_TYPE=octoprint # Options: octoprint, klipper, duet, repetier, bambu, prusa, creality
# Optional: Directory for temporary files
TEMP_DIR=/path/to/temp/dir
# Bambu Labs specific configuration
BAMBU_SERIAL=your_printer_serial # REQUIRED for Bambu
BAMBU_TOKEN=your_access_token # REQUIRED for Bambu
BAMBU_MODEL=p1s # REQUIRED for Bambu: p1s, p1p, x1c, x1e, a1, a1mini, h2d
BED_TYPE=textured_plate # Bed plate: textured_plate, cool_plate, engineering_plate, hot_plate
NOZZLE_DIAMETER=0.4 # Nozzle diameter in mm (default: 0.4)
# Slicer configuration (for slice_stl tool)
# For Bambu projects, the default is orcaslicer-bambulab unless SLICER_TYPE is set.
SLICER_TYPE=orcaslicer-bambulab # Options: prusaslicer, cura, slic3r, orcaslicer, orcaslicer-bambulab, bambustudio
SLICER_PATH=/path/to/slicer/executable
SLICER_PROFILE=/path/to/slicer/profile
# Optional aliases for FULU OrcaSlicer-bambulab when SLICER_PATH is not set
FULU_ORCA_PATH=/path/to/FULU/OrcaSlicer
ORCASLICER_BAMBULAB_PATH=/path/to/FULU/OrcaSlicer
FULU_ORCA_PLUGIN_DIR=/path/to/FULU/OrcaSlicer.app/Contents/MacOS
ORCASLICER_BAMBULAB_PLUGIN_DIR=/path/to/FULU/OrcaSlicer.app/Contents/MacOS
# Optional FULU BambuNetwork bridge runtime
# macOS default runtime dir:
# /Users/you/Library/Application Support/OrcaSlicer/macos-bridge/runtime
PJARCZAK_MAC_RUNTIME_DIR=
FULU_BAMBU_BRIDGE_COMMAND=
# Optional: Path to Bambu Studio user config dir (for loading presets)
# Example macOS: /Users/your_user/Library/Application Support/BambuStudio/user/YOUR_USER_ID
# Example Windows: C:\Users\your_user\AppData\Roaming\BambuStudio\user\YOUR_USER_ID
# Example Linux: /home/your_user/.config/BambuStudio/user/YOUR_USER_ID
BAMBU_STUDIO_CONFIG_PATH=
# MCP transport configuration
MCP_TRANSPORT=stdio # Options: stdio, streamable-http
MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=3000
MCP_HTTP_PATH=/mcp
MCP_HTTP_STATEFUL=true
MCP_HTTP_JSON_RESPONSE=true
MCP_HTTP_ALLOWED_ORIGINS=http://localhost
# Optional bridge command for blender_mcp_edit_model execute=true mode
BLENDER_MCP_BRIDGE_COMMAND=
# Accept per-call executable selectors instead of reading commands and paths
# from server environment configuration. Off by default: slicer_path,
# bridge_command, and active-probe path overrides can select which local
# executable launches. MCP_ALLOW_BRIDGE_COMMAND_ARG remains a legacy alias for
# bridge commands and bridge-derived probe paths only.
MCP_ALLOW_EXECUTABLE_ARG=false
Uso
Adicione este servidor à configuração do seu cliente MCP (Claude Desktop, Claude Code, Cursor, Codex ou qualquer cliente compatível com MCP). A maioria dos clientes baseados em JSON usa uma entrada mcpServers com o comando e as variáveis de ambiente:
{
"mcpServers": {
"3dprint": {
"command": "npx",
"args": ["-y", "mcp-3d-printer-server"],
"env": {
"PRINTER_HOST": "your_printer_ip",
"PRINTER_TYPE": "bambu",
"BAMBU_SERIAL": "your_printer_serial",
"BAMBU_TOKEN": "your_access_token",
"BAMBU_MODEL": "p1s",
"SLICER_TYPE": "orcaslicer-bambulab",
"SLICER_PATH": "/path/to/FULU/OrcaSlicer",
"FULU_ORCA_PLUGIN_DIR": "/Applications/OrcaSlicer.app/Contents/MacOS"
}
}
}
}
Para impressoras que não são Bambu, substitua as variáveis de ambiente específicas da Bambu por API_KEY e o PRINTER_TYPE apropriado (consulte Sistemas de Gerenciamento de Impressoras Suportados).
FULU OrcaSlicer-bambulab
Use FULU-Foundation/OrcaSlicer-bambulab como o slicer de projeto Bambu de primeira classe definindo:
PRINTER_TYPE=bambu
SLICER_TYPE=orcaslicer-bambulab
SLICER_PATH=/path/to/FULU/OrcaSlicer
FULU_ORCA_PLUGIN_DIR=/path/to/FULU/runtime/payload
BAMBU_MODEL=p1s
Os aliases aceitos incluem fulu_orca, fulu-orca, orca-studio e orca_bambulab. Para impressoras Bambu, esta é a família de slicer padrão quando SLICER_TYPE não está definido.
O que a integração faz:
slice_stlusa a forma de CLI de projeto FULU/Orca (--slice 0 --export-3mf) para produzir um 3MF fatiado compatível com Bambu.print_3mfpode fatiar automaticamente um 3MF não fatiado por meio do FULU OrcaSlicer-bambulab e, em seguida, enviar e iniciar o projeto fatiado pelo caminho de impressão Bambu deste servidor.check_fulu_orca_setupverifica o executável FULU, o payload de runtime da plataforma, os comandos de configuração e o handshake opcional da ponte BambuNetwork.fulu_bambu_network_rpcpode chamar o protocolo de ponte FULU para diagnósticos e desenvolvimento. Métodos somente leitura são permitidos por padrão; métodos de mutação exigemallow_mutating_method=true; métodos de impressão FULU ainda exigembambu_model.
O que permanece deliberadamente explícito:
- O caminho de impressão Bambu existente deste servidor MCP é MQTT local mais FTPS e ainda precisa de
BAMBU_SERIAL,BAMBU_TOKENePRINTER_HOST. - A ponte BambuNetwork da FULU é um runtime separado. O MCP pode inspecioná-la, sondá-la e emitir chamadas RPC de ponte protegidas, mas não alternará silenciosamente uma impressão do controle local por LAN para o controle em nuvem/BambuNetwork.
BAMBU_MODELpermanece obrigatório para operações de impressão Bambu porque predefinições de máquina incorretas podem produzir G-code perigoso.
Status Atual do Teste de Bancada
Esta integração foi testada contra os artefatos de lançamento atuais do FULU para macOS e um teste de fumaça local com Benchy. O bug do lado do MCP encontrado durante esse teste foi real: os slicers de projetos da família Bambu devem usar o JSON de preset Orca/Bambu com --load-settings, não o sinalizador inválido --load-machine. Isso está corrigido aqui.
O fallback antigo do Bambu Studio ainda funciona. Defina:
SLICER_TYPE=bambustudio
SLICER_PATH=/Applications/BambuStudio.app/Contents/MacOS/BambuStudio
Com esse fallback, o mesmo Benchy 3MF foi fatiado com sucesso através da CLI do Bambu Studio em um 3MF de projeto compatível com Bambu. Este é o caminho conhecido como bom enquanto o empacotamento da plataforma FULU se estabiliza.
O macOS ainda não está comprovado como verde. Neste Mac, os pacotes de lançamento do FULU para macOS arm64 e x86_64 encontraram o mesmo problema de fatiamento via CLI durante o teste com Benchy: um caminho travou com SIGSEGV dentro do processamento da CLI do OrcaSlicer, e tentativas repetidas deixaram processos UE do macOS ininterruptíveis que ignoraram SIGKILL. O MCP agora evita fingir que isso está resolvido. check_fulu_orca_setup pode inspecionar o pacote e a carga útil da ponte, mas usuários de macOS devem tratar o fatiamento via CLI do FULU como território de feedback ativo até que o FULU envie uma combinação estável de CLI/tempo de execução para macOS.
Precisamos de testadores no Windows. O caminho de configuração do WSL 2, as verificações de carga útil e a forma do comando da ponte estão representados neste MCP, mas o caminho completo do Windows ainda precisa de relatórios reais de pessoas que possam validar install_runtime.ps1, verify_runtime.ps1, sondagem da ponte, fatiamento via CLI e um fluxo de impressão conhecido como seguro em suas próprias máquinas.
Continuaremos iterando com o feedback de usuários e contribuidores. Por favor, relate o SO, a arquitetura da CPU, o nome do artefato de lançamento do FULU, o resultado de check_fulu_orca_setup, o stderr do comando do slicer e se o fallback do Bambu Studio funciona no mesmo modelo.
Configuração do Tempo de Execução FULU por Plataforma
O README do FULU atualmente diz que o macOS está em andamento, mas a árvore de origem já inclui scripts de tempo de execução Lima para macOS e scripts de tempo de execução WSL para Windows. Este MCP conhece esses layouts de arquivo e retorna os comandos exatos através de check_fulu_orca_setup.
Windows:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Reinicie o Windows e execute os scripts do pacote FULU a partir do diretório que contém install_runtime.ps1:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\install_runtime.ps1 -PackageDir . -PluginDir .
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\verify_runtime.ps1 -PackageDir . -PluginDir .
Linux:
Instale a compilação FULU OrcaSlicer-bambulab normalmente, defina SLICER_TYPE=orcaslicer-bambulab e aponte SLICER_PATH para o executável. Se você quiser diagnósticos no nível da ponte, defina FULU_BAMBU_BRIDGE_COMMAND para o pjarczak_bambu_linux_host empacotado.
macOS:
Defina o diretório de carga útil do aplicativo e execute os scripts que o FULU copia para o pacote do aplicativo:
export FULU_ORCA_PLUGIN_DIR="/Applications/OrcaSlicer.app/Contents/MacOS"
bash "$FULU_ORCA_PLUGIN_DIR/install_runtime_macos.sh" -PackageDir "$FULU_ORCA_PLUGIN_DIR" -PluginDir "$FULU_ORCA_PLUGIN_DIR"
bash "$FULU_ORCA_PLUGIN_DIR/verify_runtime_macos.sh" -PackageDir "$FULU_ORCA_PLUGIN_DIR" -PluginDir "$FULU_ORCA_PLUGIN_DIR"
O tempo de execução instalado por padrão é:
~/Library/Application Support/OrcaSlicer/macos-bridge/runtime
A forma do comando da ponte é:
"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper" "$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host"
Se o seu aplicativo for nomeado Orca Studio.app ou estiver em outro lugar, passe seu caminho real de Contents/MacOS como plugin_dir ou FULU_ORCA_PLUGIN_DIR.
Verifique a Configuração Através do MCP
Peça ao seu cliente MCP para chamar check_fulu_orca_setup, ou chame-o de um agente com argumentos como:
{
"platform": "darwin",
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
"plugin_dir": "/Applications/OrcaSlicer.app/Contents/MacOS",
"run_bridge_probe": true,
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
}
O resultado relata arquivos de carga útil ausentes, comandos de instalação/verificação, os valores de env do MCP a serem usados e informações de handshake/capacidade/tempo de execução da ponte quando a sondagem está habilitada.
Seletores de executável por chamada exigem
MCP_ALLOW_EXECUTABLE_ARG=1. Por padrão, o comando da ponte e seus caminhos derivados são lidos da configuração de ambiente do servidor. Passarbridge_command, ou passarslicer_path,plugin_dirouruntime_dircomrun_bridge_probe=true, retorna um erro nomeando o sinalizador de adesão. A inspeção de configuração sem execução ainda pode usar os argumentos de caminho sem o sinalizador. Esses valores selecionam qual executável local este servidor inicia, então aceitá-los para uma sondagem permite que o que está direcionando o modelo — a descrição de um modelo baixado, um README em um arquivo, metadados 3MF — escolha esse programa. A mesma restrição se aplica aslicer_pathnas ferramentas de fatiamento. Defina o sinalizador apenas para diagnósticos iterativos confiáveis; deixe-o desligado para uso normal.
RPC da Ponte FULU
fulu_bambu_network_rpc fala o protocolo de quadro da ponte FULU do lado do MCP. O protocolo são quadros binários little-endian com corpos JSON, usando métodos como bridge.handshake, bridge.capabilities, bridge.runtime_info e net.get_user_print_info.
Exemplo de diagnóstico seguro:
{
"method": "bridge.runtime_info",
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
}
Métodos de mutação são intencionalmente restritos:
{
"method": "net.start_print",
"allow_mutating_method": true,
"bambu_model": "p1s",
"payload": {
"client_job_id": 1,
"params": {
"dev_id": "YOUR_PRINTER_ID"
}
}
}
Esse segundo exemplo é intencionalmente incompleto porque chamadas reais de impressão BambuNetwork precisam da carga útil completa dos parâmetros de impressão FULU/Bambu. A parte importante é que o MCP expõe a ponte sem fingir que uma impressão em nuvem pode ser inferida com segurança de um nome de arquivo local.
Onde essa configuração vive depende do seu cliente e SO:
| Cliente / escopo | Localização macOS / Linux | Localização Windows |
|---|---|---|
| Claude Desktop (macOS / Windows) | ~/Library/Application Support/Claude/claude_desktop_config.json | %APPDATA%\Claude\claude_desktop_config.json |
| Claude Desktop (Linux) | Não oficialmente suportado para MCP local ainda; os docs do Claude Desktop ainda listam suporte Linux como em breve. | N/A |
| Claude Code (MCP compartilhado do projeto) | .mcp.json na raiz do projeto | .mcp.json na raiz do projeto |
| Claude Code (MCP local/do usuário) | ~/.claude.json | %USERPROFILE%\.claude.json |
| Configurações do Claude Code (não definições de servidor MCP) | ~/.claude/settings.json | %USERPROFILE%\.claude\settings.json |
| Cursor (projeto) | .cursor/mcp.json na raiz do projeto | .cursor\mcp.json na raiz do projeto |
| Cursor (global) | ~/.cursor/mcp.json | %USERPROFILE%\.cursor\mcp.json |
| Codex (usuário; CLI, extensão IDE, aplicativo) | ~/.codex/config.toml | %USERPROFILE%\.codex\config.toml |
| Codex (projeto, apenas projetos confiáveis) | .codex/config.toml na raiz do projeto | .codex\config.toml na raiz do projeto |
O Codex usa TOML em vez do formato JSON acima. Você pode gerenciar servidores MCP com codex mcp, ou editar config.toml diretamente com uma entrada [mcp_servers.<name>].
Reinicie seu cliente após editar a configuração. Para o Codex, execute /mcp ou codex mcp list para confirmar que o servidor carregou.
Recomendado: use com codemode-mcp
Para qualquer servidor MCP com uma grande superfície de ferramentas, envolvê-lo atrás de codemode-mcp reduz drasticamente o uso de tokens. Em vez de expor cada definição de ferramenta ao modelo, o codemode permite que o agente escreva código contra uma interface de duas ferramentas (search() e execute()), carregando apenas as ferramentas que precisa sob demanda.
Anthropic e Cloudflare demonstraram independentemente que esse padrão reduz os custos de tokens do MCP em até 98%:
- Execução de código com MCP (Anthropic)
- Code Mode: dê aos agentes uma API inteira em 1.000 tokens (Cloudflare)
Isso se aplica a todos os servidores MCP, não apenas a este.
Sistemas de Gerenciamento de Impressoras Suportados
OctoPrint
OctoPrint é uma interface web popular para impressoras 3D. Ela fornece uma API REST para controlar a impressora.
- Porta padrão: 80 (http) ou 443 (https)
- Autenticação: chave de API necessária
Klipper (via Moonraker)
Klipper é um firmware para impressoras 3D que funciona com o servidor de API Moonraker.
- Porta padrão: 7125
- Autenticação: depende da sua configuração do Moonraker
Duet
Duet é uma placa de controle para impressoras 3D com sua própria interface web (DuetWebControl).
- Porta padrão: 80 (http) ou 443 (https)
- Autenticação: depende da sua configuração do Duet
Repetier
Repetier-Server é um software host para impressoras 3D.
- Porta padrão: 3344
- Autenticação: chave de API necessária
Bambu Labs
As impressoras Bambu Lab usam MQTT para status e controle e FTP para operações de arquivo.
- Autenticação: número de série e token de acesso necessários (defina
BAMBU_SERIALeBAMBU_TOKEN) - Modelo da impressora: Obrigatório (defina
BAMBU_MODEL). Valores válidos:p1s,p1p,x1c,x1e,a1,a1mini,h2d. Isso garante que o slicer gere o G-code correto para sua impressora específica. - Requisitos: a impressora deve estar na mesma rede com o Modo Desenvolvedor e o Modo Somente LAN habilitados
- Compatível com: X1C, X1E, P1S, P1P, A1, A1 Mini, H2D
Encontrando o Número de Série e o Token de Acesso da Sua Impressora Bambu
Para conectar à sua impressora Bambu Lab, você precisa de duas coisas:
-
Número de Série da Impressora:
- Procure na parte traseira ou inferior da sua impressora um adesivo com um número de série (normalmente começa com "01P" ou "01A" seguido de números/letras)
- Alternativamente, abra o Bambu Studio, conecte-se à sua impressora, vá para Dispositivo > Gerenciamento de Dispositivos e veja as informações da sua impressora
-
Token de Acesso:
- O token de acesso é um código de segurança necessário para conectar diretamente à sua impressora
- Para impressoras da série P1: vá para a tela de toque, selecione Configurações > Rede > Modo LAN, e você verá o código de acesso
- Para impressoras da série X1: vá para a tela de toque, selecione Configurações > Rede > Modo LAN, e habilite o Modo LAN para ver o código de acesso
- Para A1 Mini: use o aplicativo Bambu Handy para conectar à sua impressora e depois vá para Configurações > Rede > Modo LAN
Nota: Se sua impressora não estiver na mesma rede local ou você não conseguir encontrar o token de acesso, pode ser necessário atualizar o firmware da sua impressora para a versão mais recente para habilitar o Modo LAN.
Notas de Comunicação Bambu (MQTT e FTP)
- MQTT: Este servidor usa o protocolo MQTT local (porta 8883, TLS) com base em descobertas da comunidade (por exemplo, OpenBambuAPI) para enviar comandos como iniciar impressões e cancelar trabalhos.
- FTP: A listagem e o upload de arquivos atualmente dependem do servidor FTP que roda na impressora (via auxiliar da biblioteca
bambu-js). Nota: Esta conexão FTP pode ser não segura (FTP simples) com base nas limitações atuais da biblioteca. Use com consciência da segurança da sua rede.
Prusa Connect
Prusa Connect é a solução baseada em nuvem da Prusa para gerenciar suas impressoras.
- Porta padrão: 80 (http) ou 443 (https)
- Autenticação: chave de API necessária
- Compatível com: Prusa MK4, Prusa Mini, Prusa XL e outras impressoras Prusa com Prusa Connect
Para a nuvem Prusa Connect, use connect.prusa3d.com com PRINTER_PORT=443, ou inclua o esquema diretamente com PRINTER_HOST=https://connect.prusa3d.com. O servidor normaliza ambas as formas para HTTPS. Hosts locais PrusaLink continuam usando HTTP, a menos que você forneça um host https:// ou porta 443.
Configurando o Prusa Connect
- Certifique-se de que sua impressora Prusa esteja atualizada com o firmware mais recente
- Conecte sua impressora à sua rede Wi-Fi
- Crie uma conta Prusa Connect e registre sua impressora
- Gere uma chave de API na interface web do Prusa Connect em Configurações > Acesso à API
Creality Cloud
Creality Cloud é o sistema de gerenciamento da Creality para suas impressoras.
- Porta padrão: 80 (http) ou 443 (https)
- Autenticação: token Bearer necessário
- Compatível com: série Ender, série CR e outras impressoras Creality com capacidades de rede
Configurando o Creality Cloud
- Instale o aplicativo Creality Cloud no seu dispositivo móvel
- Crie uma conta e adicione sua impressora
- Habilite o acesso à rede local para sua impressora
- Gere um token no aplicativo Creality Cloud em Configurações > Opções de Desenvolvedor
Ferramentas Disponíveis
Clique para expandir as Ferramentas de Manipulação de STL
Ferramentas de Manipulação de STL
Aviso de Uso de Memória: As seguintes ferramentas de manipulação de STL carregam modelos 3D inteiros na memória. Para arquivos STL grandes ou complexos (>10MB), essas operações podem consumir memória significativa. Ao usar essas ferramentas no ambiente MCP, esteja ciente das restrições de memória.
get_stl_info
Obtenha informações detalhadas sobre um arquivo STL, incluindo dimensões, contagem de vértices e caixa delimitadora.
{
"stl_path": "/path/to/file.stl"
}
extend_stl_base
Estenda a base de um arquivo STL por uma quantidade especificada.
{
"stl_path": "/path/to/file.stl",
"extension_inches": 2
}
scale_stl
Dimensione um modelo STL uniformemente ou ao longo de eixos específicos.
{
"stl_path": "/path/to/file.stl",
"scale_factor": 1.5
}
Ou para dimensionamento não uniforme:
{
"stl_path": "/path/to/file.stl",
"scale_x": 1.2,
"scale_y": 1.0,
"scale_z": 1.5
}
rotate_stl
Gire um modelo STL em torno de eixos específicos (em graus).
{
"stl_path": "/path/to/file.stl",
"rotate_x": 45,
"rotate_y": 0,
"rotate_z": 90
}
translate_stl
Mova um modelo STL ao longo de eixos específicos (em milímetros).
{
"stl_path": "/path/to/file.stl",
"translate_x": 10,
"translate_y": 5,
"translate_z": 0
}
merge_vertices
Mescle vértices que estão mais próximos do que uma tolerância especificada. Ajuda a fechar pequenas lacunas e pode simplificar ligeiramente a malha.
{
"stl_path": "/path/to/model.stl",
"tolerance": 0.01 // Optional, default = 0.01mm
}
center_model
Translada o modelo para que o centro de sua caixa delimitadora fique na origem do mundo (0,0,0).
{
"stl_path": "/path/to/model.stl"
}
lay_flat
Tenta identificar a maior superfície plana do modelo (que já não esteja diretamente voltada para cima ou para baixo) e rotaciona o modelo para que essa face fique orientada para baixo no plano XY (Z=0). Útil para orientar modelos para impressão.
{
"stl_path": "/path/to/model.stl"
}
modify_stl_section
Aplica uma transformação específica a uma seção selecionada de um arquivo STL. Isso permite modificações detalhadas de partes específicas de um modelo.
{
"stl_path": "/path/to/file.stl",
"section": "top",
"transformation_type": "scale",
"value_x": 1.5,
"value_y": 1.5,
"value_z": 1.5
}
Para limites de seção personalizados:
{
"stl_path": "/path/to/file.stl",
"section": "custom",
"transformation_type": "rotate",
"value_x": 0,
"value_y": 0,
"value_z": 45,
"custom_min_x": -10,
"custom_min_y": 0,
"custom_min_z": -10,
"custom_max_x": 10,
"custom_max_y": 20,
"custom_max_z": 10
}
generate_stl_visualization
Gera uma visualização SVG de um arquivo STL a partir de vários ângulos (vistas frontal, lateral, superior e isométrica).
{
"stl_path": "/path/to/file.stl",
"width": 400,
"height": 400
}
slice_stl
Fatia um arquivo STL para gerar o G-code.
{
"stl_path": "/path/to/file.stl",
"slicer_type": "orcaslicer",
"slicer_path": "/path/to/orcaslicer",
"slicer_profile": "/path/to/machine.json;/path/to/process.json",
"filament_profile": "/path/to/flat-nylon-filament.json"
}
Para o OrcaSlicer, o servidor usa --slice 0 --outputdir e retorna a saída renomeada plate_1.gcode. Carregue o filamento separadamente com filament_profile (--load-filaments) ou codifique-o em slicer_profile após uma barra vertical, por exemplo /path/to/process.json|/path/to/filament.json.
confirm_temperatures
Confirma as configurações de temperatura em um arquivo G-code.
{
"gcode_path": "/path/to/file.gcode",
"extruder_temp": 200,
"bed_temp": 60
}
process_and_print_stl
Processa um arquivo STL (estende a base), fatia-o, confirma as temperaturas e inicia a impressão.
{
"stl_path": "/path/to/file.stl",
"extension_inches": 2,
"extruder_temp": 200,
"bed_temp": 60,
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY"
}
Nota: A orientação automática para impressão ideal (minimizando suportes, etc.) é uma tarefa complexa normalmente tratada pelas interfaces gráficas dos slicers (como OrcaSlicer ou PrusaSlicer) e não está implementada neste servidor.
Clique para expandir as Ferramentas de Controle da Impressora
Ferramentas de Controle da Impressora
get_printer_status
Obtém o status atual da impressora 3D.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY"
}
Para impressoras Bambu, isso atualmente apenas confirma a conexão MQTT.
list_printer_files
Lista os arquivos disponíveis na impressora.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY"
}
Para impressoras Bambu, lista os arquivos no diretório gcodes via FTP.
upload_gcode
Envia conteúdo G-code ou um caminho de arquivo G-code local para a impressora.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY",
"filename": "my_print.gcode",
"gcode": "G28\nG1 X100 Y100 Z10 F3000\n...",
"print": true
}
Para arquivos maiores, passe um caminho local. Se filename for omitido, o nome do arquivo na impressora será o nome base de gcode_path.
{
"host": "192.168.1.100",
"type": "klipper",
"api_key": "YOUR_API_KEY",
"gcode_path": "/path/to/my_print.gcode",
"print": true
}
Para impressoras Bambu, envia para o diretório gcodes via FTP. Não é possível iniciar a impressão automaticamente.
start_print
Inicia a impressão de um arquivo que já está na impressora.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY",
"filename": "my_print.gcode"
}
Não recomendado para impressoras Bambu. Use print_3mf para arquivos .3mf da Bambu.
cancel_print
Cancela o trabalho de impressão atual.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY"
}
Para impressoras Bambu, envia o comando stop_print via MQTT.
set_printer_temperature
Define a temperatura de um componente da impressora.
{
"host": "192.168.1.100",
"type": "octoprint",
"api_key": "YOUR_API_KEY",
"component": "extruder",
"temperature": 200
}
Para impressoras Bambu, isso envia comandos de temperatura do firmware G-code (M104 para o bico, M140 para a mesa) via MQTT.
Clique para expandir as Ferramentas Específicas da Bambu
Ferramentas Específicas da Bambu
check_fulu_orca_setup
Inspeciona o executável FULU OrcaSlicer-bambulab, o payload de runtime da plataforma, os comandos de configuração e a sonda opcional da ponte BambuNetwork.
O bridge_command mostrado abaixo requer MCP_ALLOW_EXECUTABLE_ARG=1; caso contrário, é lido de FULU_BAMBU_BRIDGE_COMMAND. Veja Verifique a Configuração Através do MCP.
{
"platform": "darwin",
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
"plugin_dir": "/Applications/OrcaSlicer.app/Contents/MacOS",
"run_bridge_probe": true,
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
}
fulu_bambu_network_rpc
Chama um método JSON RPC da ponte FULU BambuNetwork. Métodos somente leitura, como bridge.handshake, bridge.runtime_info e net.get_user_print_info, são permitidos por padrão. Métodos que podem alterar o estado da conta, impressora, nuvem ou impressão exigem allow_mutating_method=true; métodos de impressão FULU também exigem bambu_model.
{
"method": "bridge.handshake",
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
}
print_3mf
Envia um arquivo .3mf fatiado para uma impressora Bambu via FTP e inicia o trabalho de impressão via comando MQTT. Se o 3MF não tiver G-code de placa embutido e um slicer de projeto estiver configurado, o servidor pode fatiá-lo automaticamente primeiro com FULU OrcaSlicer-bambulab ou Bambu Studio. Permite substituir alguns parâmetros de impressão, como o mapeamento do AMS.
bambu_model é obrigatório -- garante que o slicer gere G-code para a impressora correta. Usar o modelo errado pode fazer a mesa colidir com o bico e danificar a impressora. Se não for fornecido na chamada da ferramenta e BAMBU_MODEL não estiver definido no ambiente, o servidor perguntará interativamente via elicitação MCP (se suportado pelo seu cliente) ou retornará um erro claro.
{
"three_mf_path": "/path/to/your_model.3mf",
"bambu_model": "p1s",
"bed_type": "textured_plate",
"host": "your_bambu_ip",
"bambu_serial": "YOUR_SERIAL",
"bambu_token": "YOUR_TOKEN",
"slicer_type": "orcaslicer-bambulab",
"slicer_path": "/path/to/FULU/OrcaSlicer",
"use_ams": true,
"ams_mapping": [0, 1, 2, 3],
"bed_leveling": true,
"flow_calibration": false,
"vibration_calibration": false,
"timelapse": false
}
Nota: Substituir configurações do slicer, como altura da camada ou temperatura, através desta ferramenta não é suportado pelo comando MQTT da impressora. Aplique essas alterações antes de gerar o arquivo .3mf.
Recursos Disponíveis
Clique para expandir os Recursos da Impressora
Recursos da Impressora
printer://{host}/status- Status atual da impressora 3D (limitado para Bambu atualmente)printer://{host}/files- Lista de arquivos disponíveis na impressora 3D (FTP para Bambu)printer://{host}/file/{filename}- Conteúdo de um arquivo G-code específico (verifica apenas a existência para Bambu)
Clique para expandir os Recursos de Predefinições da Bambu
Recursos de Predefinições da Bambu
Se a variável de ambiente BAMBU_STUDIO_CONFIG_PATH estiver definida para o diretório de configurações do usuário do Bambu Studio, você pode ler suas predefinições salvas.
preset://bambu/machine/{preset_name}- Lê um arquivo de predefinição de máquina (ex.:Bambu Lab P1S 0.4 nozzle.json)preset://bambu/filament/{preset_name}- Lê um arquivo de predefinição de filamento (ex.:Generic PLA.json)preset://bambu/process/{preset_name}- Lê um arquivo de predefinição de processo (ex.:0.20mm Standard @BBL P1S.json)
Exemplo de Uso:
"Leia o conteúdo da minha predefinição de processo Bambu chamada '0.16mm Optimal @BBL P1S'"
(Claude chamaria ReadResource com preset://bambu/process/0.16mm%20Optimal%20%40BBL%20P1S)
Exemplos de Comandos para o Claude
Aqui estão alguns exemplos de comandos que você pode dar ao Claude após conectar o servidor MCP:
Controle da Impressora
- "Qual é o status atual da minha impressora 3D?"
- "Mostre-me a lista de arquivos na minha impressora."
- "Envie este G-code para minha impressora: [conteúdo do G-code]"
- "Comece a imprimir o arquivo chamado 'benchy.gcode'."
- "Cancele o trabalho de impressão atual."
- "Defina a temperatura do extrusor para 200°C."
- "Defina a temperatura da mesa para 60°C."
Manipulação e Impressão de STL
- "Pegue este arquivo STL e estenda a base em 2 polegadas, depois envie para o slicer e coloque na fila da minha impressora."
- "Estenda a base do model.stl em 1,5 polegadas."
- "Escalone este arquivo STL em 150% uniformemente."
- "Escalone o model.stl para ter o dobro da largura, mas mantenha a mesma altura."
- "Rotacione este modelo 90 graus em torno do eixo Z."
- "Mova este modelo STL para cima em 5mm para criar um espaço embaixo."
- "Você pode modificar apenas a parte superior deste modelo para torná-la 20% maior?"
- "Analise este arquivo STL e me diga suas dimensões e detalhes."
- "Gere uma visualização deste arquivo STL para que eu possa ver como ele é."
- "Crie visualizações SVG do meu modelo a partir de diferentes ângulos."
- "Torne a base deste modelo mais larga sem alterar sua altura."
- "Fatia o arquivo STL modificado usando o PrusaSlicer."
- "Confirme se as temperaturas no G-code são 200°C para o extrusor e 60°C para a mesa."
- "Processe este arquivo STL, torne a base 2 polegadas mais longa, fatie-o e comece a imprimir, mas confirme as temperaturas primeiro."
- "Imprima
~/Downloads/my_model.3mfna impressora Bambu." - "Envie
~/Desktop/calibration_cube.3mfpara a impressora Bambu usando os slots 0 e 2 do AMS e desligue o nivelamento da mesa." - "Cancele o trabalho de impressão na minha Bambu P1S."
- "Quais são as configurações na minha predefinição de filamento Bambu 'Generic PETG'?"
- "Mostre-me minhas predefinições de processo Bambu."
Limitações da Impressora Bambu Lab
Devido à natureza da API da impressora Bambu Lab, existem algumas limitações:
-
Requisito de 3MF imprimível:
print_3mfprecisa, em última análise, de um 3MF fatiado que inclua pelo menos uma entradaMetadata/plate_<n>.gcodepara que o servidor possa calcular o MD5 e iniciar o trabalho corretamente. Arquivos 3MF não fatiados podem ser fatiados automaticamente primeiro quandoSLICER_TYPE=orcaslicer-bambulabouSLICER_TYPE=bambustudioestiver configurado. -
Ressalva do comportamento do AMS: O mapeamento do AMS é passado através do comando de arquivo de projeto MQTT, mas o comportamento real ainda depende do firmware da impressora, do filamento carregado e dos metadados do projeto fatiado.
-
Caminho de controle de temperatura: As atualizações de temperatura são implementadas através do despacho de comandos G-code (
M104/M140) via MQTT, então o comportamento efetivo ainda depende da aceitação do firmware da impressora e do estado atual da impressora. -
Canal de transferência de arquivos: Os uploads usam o caminho FTPS da Bambu (porta 990) diretamente através de
basic-ftpcom TLS implícito. Algumas operações de leitura/lista ainda usam auxiliaresbambu-js. -
Escopo do caminho de início direto:
startJobatualmente tem como alvo arquivos.gcodeno armazenamento da impressora; trabalhos.3mfdevem ser iniciados através deprint_3mfpara que os metadados e a seleção de placa sejam tratados. -
Consistência de status: As leituras de status forçam uma atualização
pushallquando possível, mas a semântica completa de status em tempo real e fluxo de eventos em todos os modelos Bambu ainda precisa de maior robustez. -
Escopo da ponte FULU BambuNetwork: A ponte FULU expõe a funcionalidade BambuNetwork através de seu próprio runtime e protocolo RPC. Este MCP pode inspecionar/testar esse runtime e emitir chamadas RPC de ponte protegidas, mas o
print_3mflocal ainda usa o caminho MQTT/FTPS local explícito do servidor, a menos que uma mudança futura mapeie um payload completo de impressão em nuvem FULU com segurança.
Limitações e Considerações
Uso de Memória
- Arquivos STL Grandes: Processar arquivos STL grandes ou complexos pode consumir memória significativa. Toda a geometria do STL é carregada na memória durante as operações.
- Múltiplas Operações: Executar várias operações de STL em sequência (especialmente em arquivos grandes) pode fazer a memória se acumular se a coleta de lixo não acompanhar.
- Ambiente MCP: Como isso roda como um servidor MCP, esteja ciente de que o ambiente MCP do Claude tem restrições de memória. Operações complexas em arquivos STL muito grandes podem causar problemas de falta de memória.
Limitações da Manipulação de STL
- Modificação de Seção: O recurso de modificação específica de seção funciona melhor em geometrias mais simples. Malhas complexas ou não-manifold podem produzir resultados inesperados.
- Extensão da Base: O algoritmo de extensão da base funciona adicionando uma nova geometria sob o modelo. Para modelos com partes inferiores complexas, os resultados podem não ser perfeitos.
- Tratamento de Erros: Embora tenhamos adicionado tratamento robusto de erros, alguns casos extremos em arquivos STL complexos ainda podem causar problemas.
Limitações da Visualização
- Representação SVG: A visualização SVG é uma representação esquemática simplificada, não uma renderização 3D real.
- Modelos Complexos: Para modelos muito complexos, a visualização pode não representar com precisão todos os detalhes.
Considerações de Desempenho
- Operações de Fatiamento: Processos de slicer externos podem ser intensivos em CPU e podem levar um tempo considerável para modelos complexos.
- Relatório de Progresso: Para arquivos grandes, as atualizações de progresso podem parecer paradas em certos estágios de processamento.
Recomendações de Teste
- Comece com arquivos STL menores (< 10MB) para testar a funcionalidade
- Monitore o uso de memória ao processar arquivos grandes
- Teste modificações em geometrias simples antes de tentar as complexas
- Considere executar em um sistema com pelo menos 4GB de RAM disponível para operações maiores
Apêndice: Notas de Segurança do MCP
Veja Recomendado: use com codemode-mcp para reduzir a sobrecarga de tokens com superfícies de ferramentas grandes.
Injeção de Prompt: Riscos e Mitigações
A injeção de prompt é um problema em aberto para agentes que usam ferramentas. Mitigações práticas:
- Credenciais de privilégio mínimo e tokens de curta duração.
- Validação rigorosa de esquema e listas de permissões explícitas para ações/hosts.
- Portões de confirmação humana para operações destrutivas.
- Sandboxing de execução com limites de recursos/tempo.
- Trate a saída da ferramenta como entrada não confiável por padrão.
Badges
Licença
GPL-2.0