Skip to main content
Glama
README.md
# freecad-print-mcp

Servidor [MCP](https://modelcontextprotocol.io) 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](https://github.com/neka-nat/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*.

## 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
powershell -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/drmarcelofrodrigues-ctrl/freecad-print-mcp/main/install.ps1 | iex"
```

**Manual:**

```bash
git clone https://github.com/drmarcelofrodrigues-ctrl/freecad-print-mcp
cd freecad-print-mcp
pip install -e .
```

Confira que o FreeCAD é encontrado:

```bash
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:

```json
{
  "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](docs/instalacao-claude-desktop.md).

### Claude Code

```bash
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:

```python
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/`](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](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](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

```bash
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.

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 issues