freecad-print-mcp
Supports Bambu Lab-style FDM printing workflows by checking printability and opening generated 3MF files in Bambu Studio for slicing and printing.
Enables headless FreeCAD modeling of 3D-printable parts through Python scripts, with helpers for magnet cavities, screw holes, chamfers, joints, shells, arrays, and export to STL/3MF/STEP.
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., "@freecad-print-mcp model a 60x40x10mm base with two M3 screw holes and show me a render"
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.
freecad-print-mcp
Servidor MCP que deixa o Claude modelar peças para impressão 3D no FreeCAD em modo headless — sem abrir a interface — e checar se a peça vai imprimir bem antes de ir para o fatiador.
Pensado para peças funcionais em FDM (Bambu Lab A1 e similares): suportes, encaixes com ímã, juntas, caixas com tampa, acessórios de bancada.
O que ele faz
Ferramenta | Para quê |
| Executa um script Python no FreeCAD ( |
| Roda um arquivo |
| Documentação dos helpers |
| PNG com vistas iso/topo/frente/lado para o Claude "ver" a peça |
| Malha fechada? Corpos soltos? % de área em balanço, contato com a mesa, melhor orientação |
| Caixa envolvente, volume, massa estimada em PLA |
| Abre o 3MF no Bambu Studio (ou o app padrão) |
| Diagnóstico da instalação |
Diferença para o freecad-mcp (neka-nat): aquele controla o FreeCAD aberto via RPC e é ótimo para ver a árvore de objetos na GUI. Este roda sem GUI, cada chamada é um processo isolado e reprodutível (o script fica salvo em _scripts/), e o foco é o ciclo modelar → ver → checar → fatiar.
Related MCP server: FreeCAD MCP
Instalação
Pré-requisitos: FreeCAD 1.0+ instalado e Python 3.10+ (o Python do sistema, não o do FreeCAD).
Windows, em um comando (Win+R ou PowerShell) — clona em %LOCALAPPDATA%\freecad-print-mcp, instala, acha o FreeCAD e configura o Claude Desktop:
powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/drmarcelofrodrigues-ctrl/freecad-print-mcp/main/install.ps1 | iex"Manual:
git clone https://github.com/drmarcelofrodrigues-ctrl/freecad-print-mcp
cd freecad-print-mcp
pip install -e .Confira que o FreeCAD é encontrado:
python -c "from freecad_print_mcp import runner; print(runner.freecad_version())"Se não encontrar, defina a variável FREECAD_CMD (Windows: C:\Program Files\FreeCAD 1.0\bin\FreeCADCmd.exe).
Claude Desktop
Edite claude_desktop_config.json (Configurações → Desenvolvedor → Editar configuração) e adicione:
{
"mcpServers": {
"freecad-print": {
"command": "python",
"args": ["-m", "freecad_print_mcp.server"],
"env": {
"FREECAD_CMD": "C:\\Program Files\\FreeCAD 1.0\\bin\\FreeCADCmd.exe",
"FCMCP_OUTPUT_DIR": "C:\\Users\\SEU_USUARIO\\Documents\\Impressão 3D\\freecad-mcp"
}
}
}
}Reinicie o Claude Desktop e peça: "rode o freecad_selftest". Detalhes e solução de problemas em docs/instalacao-claude-desktop.md.
Claude Code
claude mcp add freecad-print -e FREECAD_CMD="..." -- python -m freecad_print_mcp.serverUso
Peça em linguagem natural; o Claude escreve o script, roda, renderiza e checa:
"Faz um suporte para 4 seringas de 10 mL inclinado 20°, com chanfro na base, e me mostra como ficou."
O script que o Claude escreve se parece com isto:
s = awcad.rounded_box(60, 40, 10, r=3, center=True)
s = awcad.magnet_cavity(s, at=(20, 0, 10), d=5, h=2, axis=-awcad.Z) # ímã 5x2 entrando por cima
s = awcad.screw_hole(s, at=(-20, 0, 10), size="M3", countersink=True)
s = awcad.chamfer_bottom(s) # anti pé-de-elefante
awcad.export(s, "base-com-ima") # gera .stl e .3mfDentro do script estão disponíveis App (FreeCAD), Part, doc e awcad. Tudo em mm, Z para cima, base da peça em Z = 0.
Exemplos prontos em examples/: suporte de seringas, placa de calibração de folgas, junta esférica, caixa com tampa magnética.
Biblioteca awcad
Fica em src/freecad_print_mcp/fclib/awcad.py e é injetada em todo script. Resumo em docs/api-awcad.md. As tolerâncias padrão (awcad.TOL) são para PLA no A1 com bico 0,4 — imprima examples/teste_folgas.py e ajuste para o seu filamento.
Boas práticas de modelagem para FDM
Leia docs/boas-praticas-impressao.md: folgas, espessura mínima, orientação, pé de elefante, ímãs, juntas, quando usar STEP vs 3MF.
Estrutura
src/freecad_print_mcp/
server.py # ferramentas MCP
runner.py # localiza e executa o FreeCADCmd
mesh_tools.py # análise e render de malha (trimesh)
fclib/awcad.py # helpers que rodam DENTRO do FreeCAD
examples/ # scripts prontos
docs/ # instalação, API, boas práticas
tests/ # testes do lado que não precisa do FreeCADDesenvolvimento
pip install -e ".[dev]"
pytestOs testes cobrem mesh_tools e a montagem do script; a parte que depende do FreeCAD é testada pelo freecad_selftest.
Licença
MIT — Marcelo Ferreira Rodrigues / AnestWorks.
Available Tools
10 toolsawcad_referenceA
Documentação dos helpers awcad (assinaturas + docstrings) disponíveis dentro de freecad_run.
Passe function para ver só uma função; vazio lista todas.
Inputs: function. Returns: result
freecad_runA
Executa um script Python dentro do FreeCAD headless e devolve exportações + medidas.
O script já tem disponíveis: App (FreeCAD), Part, awcad (helpers) e doc (documento vazio).
Vetores: awcad.V(x, y, z) ou App.Vector; eixos awcad.X/Y/Z. Termine com
awcad.export(shape, "nome-da-peca") para gerar STL+3MF na pasta de saída; use awcad.measure(shape)
só para medir sem exportar. Prints aparecem no retorno. Peça sempre com a base em Z=0 (awcad.on_bed).
Exemplo mínimo: s = awcad.rounded_box(40, 30, 10, r=3, center=True) s = awcad.magnet_cavity(s, at=(10, 0, 10), d=5, h=2, axis=-awcad.Z) s = awcad.chamfer_bottom(s) awcad.export(s, "base-ima")
name: prefixo do arquivo de script salvo em /_scripts para rastreabilidade.
Inputs: code (required), name, timeout_s. Returns: result
freecad_run_fileB
Executa um arquivo .py local (ex.: examples/suporte_seringas_20ml.py) no FreeCAD headless, com awcad disponível.
Inputs: path (required), timeout_s. Returns: result
freecad_selftestA
Roda um script curto que exercita os principais helpers do awcad. Use após instalar para confirmar que tudo funciona.
Inputs: no named parameters. Returns: result
freecad_statusA
Verifica se o FreeCADCmd foi encontrado, sua versão e a pasta de saída configurada.
Inputs: no named parameters. Returns: result
list_outputsB
Lista os arquivos mais recentes na pasta de saída (STL/3MF/STEP/PNG).
Inputs: limit. Returns: result
mesh_check_printabilityB
Checa imprimibilidade FDM: malha fechada, corpos separados, dimensões mínimas, área em balanço, contato com a mesa e ranking de orientações. Padrão: Bambu Lab A1 (256³), bico 0,4, camada 0,2.
Inputs: path (required), bed_x_mm, bed_y_mm, bed_z_mm, +3 more. Returns: result
mesh_measureB
Mede um STL/3MF/OBJ: caixa envolvente, volume, massa estimada em PLA, faces, fechamento (watertight).
Inputs: path (required). Returns: result
mesh_renderA
Gera um PNG da malha para inspeção visual. views: lista separada por vírgula entre iso, top, bottom, front, back, left, right.
Inputs: path (required), views, size_px.
open_fileA
Abre o arquivo no aplicativo padrão do sistema (ex.: 3MF → Bambu Studio, FCStd → FreeCAD).
Inputs: path (required). Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes: status/self-test, script execution, helper docs, mesh analysis, and output management. There is some adjacency between freecad_run and freecad_run_file, and between mesh_measure and mesh_check_printability, but the descriptions make the intended use cases reasonably clear.
All names use snake_case, but the set mixes several prefix conventions: freecad_, awcad_, mesh_, and bare verb_noun names. Within groups it is readable, but it is not a single consistent verb_noun pattern throughout.
Ten tools is well-scoped for a FreeCAD print workflow. Each tool covers a distinct part of the lifecycle: setup, execution, reference, validation, mesh inspection, rendering, and output handling.
The core workflow is covered: run scripts, document helpers, self-test, measure/check/render meshes, list outputs, and open files. Minor gaps remain around output cleanup/deletion, job control, and richer file metadata, but normal agent workflows can work around them.
Maintenance
Related MCP Connectors
CAD in ChatGPT and Claude: editable parts, STEP/STL/drawings, in-chat 3D, automatic checks.
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
Text-to-CAD: build exact STEP or 3MF/STL on the server, each stated requirement measured.
Design 3D-printable parts by chatting: create, edit, render and publish parametric forges.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables control of FreeCAD CAD software from Claude Desktop through natural language commands. Supports creating, editing, and managing 3D objects, executing Python code, and generating screenshots of designs.10MIT
- AlicenseAqualityDmaintenanceEnables Claude Desktop to control FreeCAD for 3D CAD modeling, including creating, editing, and deleting objects, executing Python code, and running FEM analyses.14MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to create 3D-printable CAD models using build123d, with tools for modeling, modification, analysis, and publishing to platforms like Thingiverse and GitHub.14Creative Commons Attribution Non Commercial No Derivatives 4.0 International
- AlicenseAqualityDmaintenanceAllows controlling FreeCAD from Claude Desktop to create and edit 3D models using natural language commands.10MIT