Skip to main content
Glama

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ê

freecad_run

Executa um script Python no FreeCAD (Part + biblioteca awcad) e exporta STL/3MF/STEP

freecad_run_file

Roda um arquivo .py do disco (ex.: os de examples/)

awcad_reference

Documentação dos helpers awcad (cavidade de ímã, furos de parafuso, chanfro de base, junta esférica, casca, canaleta, matriz, texto…)

mesh_render

PNG com vistas iso/topo/frente/lado para o Claude "ver" a peça

mesh_check_printability

Malha fechada? Corpos soltos? % de área em balanço, contato com a mesa, melhor orientação

mesh_measure

Caixa envolvente, volume, massa estimada em PLA

open_file

Abre o 3MF no Bambu Studio (ou o app padrão)

freecad_status / freecad_selftest

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

Uso

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

Dentro 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 FreeCAD

Desenvolvimento

pip install -e ".[dev]"
pytest

Os 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 tools
awcad_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

    A3.5/5.0

    Scored across 10 tools

    Disambiguation4/5

    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.

    Naming Consistency3/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables 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.
      10
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Enables Claude Desktop to control FreeCAD for 3D CAD modeling, including creating, editing, and deleting objects, executing Python code, and running FEM analyses.
      14
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables Claude to create 3D-printable CAD models using build123d, with tools for modeling, modification, analysis, and publishing to platforms like Thingiverse and GitHub.
      14
      Creative Commons Attribution Non Commercial No Derivatives 4.0 International