MeshMend
Verifique e repare malhas STL e converta 3MF para STL, localmente via stdio: faces duplicadas e com área zero, orientação inconsistente, pequenos furos planares. Os arquivos nunca saem da sua máquina.
Documentação
![]()
MeshMend — servidor MCP
English · 中文
Verifique e repare malhas para impressão 3D (STL e 3MF) a partir de um assistente de IA que pode executar ferramentas no seu computador: Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Codex CLI, Gemini CLI ou qualquer outro cliente MCP que inicie servidores locais.
Pergunte “o ~/prints/bracket.stl é à prova d’água?”, “por que meu fatiador diz que este modelo tem buracos?” ou “把这个 3MF 转成 STL”: o assistente lê o arquivo na sua máquina, informa exatamente o que está errado (buracos, faces invertidas, cascas do avesso, arestas não-manifold, triângulos duplicados), diz honestamente se uma reparação automática vai corrigir e grava uma cópia reparada ao lado do original.
Seus arquivos nunca saem do seu computador. O servidor roda localmente, lê e grava apenas os arquivos que você nomeia, não faz requisições de rede e não tem telemetria. O arquivo original nunca é sobrescrito. É o mesmo código de malha da ferramenta gratuita no navegador em mesh-mend.pages.dev.
npx -y github:Keith-CY/meshmend-mcp
Status: versão 0.1.0. A publicação no npm está pendente; até lá,
npx -y github:Keith-CY/meshmend-mcp(precisa de Node.js 18+ e git) executa o mesmo build, e usuários do Claude Desktop podem instalar o pacote de um clique em Releases.
Ferramentas
| Ferramenta | Entrada | O que faz |
|---|---|---|
check_mesh | path, unit? (mm/cm/in, somente STL), item? (item do build 3MF) | Relata tamanho em mm, triângulos, cascas e cada problema com sua contagem, além de um veredito de uma reparação de teste em memória: ok, repairable, partly_repairable ou needs_manual_review. Somente leitura. |
repair_mesh | path, fill_holes? (padrão falso), max_hole_span_mm? (padrão 20), output_path?, unit?, item?, overwrite? | Remove faces duplicadas e de área zero, torna a orientação das faces consistente, vira cascas do avesso para fora e, se solicitado, tampa buracos planos. Grava um STL binário em milímetros e relata antes e depois. |
convert_3mf_to_stl | path, item?, output_path?, overwrite? | Converte 3MF para STL binário em milímetros, com transformações de build e unidades aplicadas e geometria inalterada. |
Cada resultado vem como texto legível e como JSON estruturado (structuredContent, com um outputSchema). check_mesh é marcado como somente leitura; as outras duas apenas criam novos arquivos (destructiveHint: false).
Onde os resultados vão: ao lado da entrada, como <name>.repaired.stl (ou <name>.stl para uma conversão), depois -2, -3, … em vez de substituir qualquer coisa. Com output_path, um arquivo existente é substituído apenas com overwrite: true, e o arquivo de entrada nunca pode ser a saída.
Conecte
Claude Desktop
Um clique: baixe meshmend-mcp-0.1.0.mcpb de Releases e abra (ou Configurações → Extensões → Configurações avançadas → Instalar extensão…). O Claude Desktop o executa com seu Node.js embutido.
Ou manualmente: Configurações → Desenvolvedor → Editar configuração e adicione a claude_desktop_config.json:
{
"mcpServers": {
"meshmend": {
"command": "npx",
"args": ["-y", "github:Keith-CY/meshmend-mcp"]
}
}
}
Claude Code
claude mcp add meshmend -- npx -y github:Keith-CY/meshmend-mcp
Cursor
~/.cursor/mcp.json (ou .cursor/mcp.json em um projeto):
{
"mcpServers": {
"meshmend": { "command": "npx", "args": ["-y", "github:Keith-CY/meshmend-mcp"] }
}
}
VS Code (GitHub Copilot)
.vscode/mcp.json:
{
"servers": {
"meshmend": { "type": "stdio", "command": "npx", "args": ["-y", "github:Keith-CY/meshmend-mcp"] }
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json: o mesmo bloco mcpServers do Cursor.
Codex CLI
~/.codex/config.toml:
[mcp_servers.meshmend]
command = "npx"
args = ["-y", "github:Keith-CY/meshmend-mcp"]
Gemini CLI
~/.gemini/settings.json:
{ "mcpServers": { "meshmend": { "command": "npx", "args": ["-y", "github:Keith-CY/meshmend-mcp"] } } }
Qualquer outro cliente
Qualquer cliente MCP que inicie servidores locais (stdio) pode executar npx -y github:Keith-CY/meshmend-mcp, ou node /path/to/meshmend-mcp/dist/meshmend-mcp.js de um checkout (o arquivo não tem dependências). Arquivos prontos estão em examples/clients/.
Dê ao assistente caminhos absolutos (~ é expandido). Caminhos relativos são resolvidos a partir do diretório de trabalho do servidor, que em aplicativos de desktop muitas vezes não é a pasta do seu projeto.
Arquivos reais, antes e depois
Dos testes deste repositório e de uma execução local (npm test repete tudo exceto o coelho e a esfera):
| Arquivo | O que check_mesh encontrou | Veredito | Depois de repair_mesh |
|---|---|---|---|
Bloco de amostra do MeshMend, 30 × 24 × 24 mm, 19 triângulos (missing-patch.stl) | 1 buraco (4 arestas abertas), 3 conflitos de orientação, 1 face duplicada | reparável (com fill_holes) | Fechado: duplicado removido, orientação corrigida, o buraco de 10 × 8 mm tampado com 2 triângulos; 20 triângulos |
multibody.stl do trimesh, 32 triângulos | 2 cascas do avesso, 12 conflitos de orientação | reparável | Fechado e para fora |
O bule Utah (teapot.stl), 894 triângulos | 6 limites abertos (64 arestas abertas), 1 vértice não-manifold | precisa de revisão manual | Inalterado, e explica o porquê: os buracos são curvos e o vértice não-manifold precisa de uma decisão |
Uma exportação CAD (featuretype.STL), 3.476 triângulos | 16 costuras abertas (576 arestas abertas) | precisa de revisão manual | Inalterado: superfícies cujos vértices não coincidem exatamente, e o MeshMend nunca solda vértices próximos |
O coelho de Stanford (bun_zipper.ply como STL, escalado para 156 mm; não incluído) | 5 limites abertos (223 arestas abertas) na base, 69.451 triângulos | precisa de revisão manual | Inalterado mesmo com um vão de 200 mm: os buracos do escaneamento não são planos |
| Uma esfera gerada de 100 mm, 247.499 triângulos, 3 buracos e 249 faces invertidas | 3 limites abertos (13 arestas abertas), 744 conflitos de orientação | parcialmente reparável | Orientação corrigida e 1 buraco plano tampado; 2 buracos curvos deixados para revisão. Cerca de 10 s |
O que corrige, e o que não corrige
Corrige:
- faces duplicadas e faces de área zero (degeneradas);
- orientação inconsistente de faces (normais invertidas) em arestas compartilhadas comuns;
- cascas fechadas que estão do avesso, quando não se sobrepõem a outras cascas;
- com
fill_holes: true: buracos planos simples (3–128 vértices de limite) cuja diagonal da caixa delimitadora está dentro demax_hole_span_mm.
Não corrige:
- soldar vértices próximos (apenas coordenadas exatamente iguais são unidas), então não pode fechar costuras entre superfícies;
- dividir arestas ou vértices não-manifold, remalhar ou reconstruir um sólido;
- reparar auto-interseções, unir partes sobrepostas ou verificar espessura de parede, saliências ou suportes;
- tampar buracos curvos, aberturas aninhadas ou buracos mais largos que o vão;
- garantir que um modelo imprima. Abra o resultado no seu fatiador.
Como algumas aberturas são intencionais, o preenchimento de buracos fica desativado a menos que seja solicitado. check_mesh executa a reparação em memória primeiro, então seu veredito diz se repair_mesh realmente vai ajudar antes de qualquer coisa ser gravada.
Limites: 30 MiB por arquivo e 250.000 triângulos (o mesmo do site). 3MF: o build primário, componentes, transformações, referências de partes de extensão de produção e unidades; ZIP64, extensões obrigatórias não suportadas, unidades mistas entre partes e pacotes somente G-code são recusados com uma explicação. Cores, materiais e configurações de impressão não são transferidos para STL.
Privacidade
O servidor MCP do MeshMend funciona apenas no seu computador. Ele lê os arquivos que você ou seu assistente nomeiam e grava novos arquivos STL; não envia nada para lugar nenhum, não tem análises ou telemetria e não mantém registros. Seu assistente de IA vê os resultados das ferramentas (contagens, tamanhos, caminhos de arquivo e mensagens) como qualquer outra saída de ferramenta, sob os termos de privacidade do próprio assistente.
Desenvolvimento
npm install
npm test # builds dist/ and runs the core, file and end-to-end tests (needs Bun)
npm run pack:mcpb # builds the Claude Desktop bundle into build/
node scripts/call.mjs check_mesh '{"path":"tests/fixtures/missing-patch.stl"}'
src/core/ é o código de malha do MeshMend, copiado sem alterações do site para que ambos deem as mesmas respostas. dist/meshmend-mcp.js é um único arquivo empacotado (commitado, então npx github: não precisa de etapa de build); NOTICE lista os pacotes empacotados e suas licenças.
Licença
MIT. Os três arquivos de teste do trimesh são licenciados sob MIT por seus autores (detalhes).
A versão no navegador, com pré-visualização 3D e comparação antes/depois: mesh-mend.pages.dev.