Sweet Home 3D MCP Server

Plugin do servidor MCP para o Sweet Home 3D que permite que assistentes de IA criem paredes, coloquem móveis, apliquem texturas e renderizem designs de interiores em 3D — 42 ferramentas, zero dependências externas.

Documentação

Plugin Sweet Home 3D MCP

License: GPL v2 Java 11+ Sweet Home 3D 6.0+

Um plugin para Sweet Home 3D que incorpora um servidor MCP (Model Context Protocol) diretamente dentro do aplicativo. Permite que o Claude e outros assistentes de IA controlem o Sweet Home 3D via HTTP — criar paredes, colocar móveis, renderizar fotos e muito mais — sem qualquer proxy externo ou processo de servidor separado.

Claude Desktop / Claude Code
         │  HTTP (JSON-RPC 2.0)
         ▼
┌─────────────────────────────────────┐
│  Sweet Home 3D  +  MCP Plugin       │
│  Built-in HTTP server on port 9877  │
│  http://127.0.0.1:9877/mcp         │
└─────────────────────────────────────┘

O Claude Code conecta-se diretamente a este endpoint. O Claude Desktop precisa de uma pequena ponte local (mcp-remote) no meio — consulte Configuração do Claude.

Capturas de tela

3D scene created via MCP

MCP Server Settings dialog

Requisitos

RequisitoVersão
Sweet Home 3D6.0 ou mais recente
Java (incluído no SH3D ou do sistema)11 ou mais recente
Node.jsLTS atual — apenas para Claude Desktop (executa a ponte mcp-remote)

Nota: O Sweet Home 3D acompanha um JRE incluído. Certifique-se de que seja Java 11+. Versões muito antigas do SH3D (instalador Windows 32 bits com JRE 1.8) falharão silenciosamente ao carregar o plugin devido a UnsupportedClassVersionError.

Instalação

Passo 1. Baixe o arquivo .sh3p mais recente em Releases.

Passo 2. Instale-o.

macOS (mais fácil): clique duas vezes no arquivo .sh3p. O Sweet Home 3D abre, instala o plugin e confirma com uma caixa de diálogo. Nada para copiar manualmente. Se o Finder não abrir o arquivo com o Sweet Home 3D, clique com o botão direito e escolha Abrir com → Sweet Home 3D. Clicar duas vezes funciona da mesma forma no Windows e Linux onde a extensão .sh3p está associada ao Sweet Home 3D.

Qualquer plataforma (manual): copie o arquivo para a pasta de plugins, criando a pasta se ela não existir:

SOPasta de plugins
Windows%APPDATA%\eTeks\Sweet Home 3D\plugins\
macOS~/Library/Application Support/eTeks/Sweet Home 3D/plugins/
Linux~/.sweethome3d/plugins/

Passo 3. (Re)inicie o Sweet Home 3D. O servidor MCP inicia automaticamente na porta 9877.

Você pode verificar se está em execução: Ferramentas → Servidor MCP... mostra o status do servidor.

Solução de problemas

macOS: o servidor MCP não inicia (não é possível abrir a porta)

A versão da Mac App Store do Sweet Home 3D é sandboxed e não inclui a permissão com.apple.security.network.server, portanto não é permitido abrir um socket de escuta. Como o plugin escuta na porta 9877, o servidor MCP não pode iniciar nessa versão.

Correção: use uma versão não sandboxed do Sweet Home 3D — a versão "Java" autônoma / instalador de sweethome3d.com em vez da versão da Mac App Store.

Configuração do Claude

Inicie o Sweet Home 3D primeiro: o servidor MCP existe apenas enquanto o aplicativo está em execução.

Claude Code

Crie .mcp.json no diretório do seu projeto:

{
  "mcpServers": {
    "sweethome3d": {
      "type": "http",
      "url": "http://localhost:9877/mcp"
    }
  }
}

Claude Desktop

O Claude Desktop não carrega entradas "type": "http" de claude_desktop_config.json — essa entrada é ignorada. Ele inicia servidores MCP como comandos locais, então o plugin é alcançado através da ponte mcp-remote (requer Node.js). Adicione isso a claude_desktop_config.json:

{
  "mcpServers": {
    "sweethome3d": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://127.0.0.1:9877/mcp"]
    }
  }
}

Em seguida, saia completamente do Claude Desktop e inicie-o novamente.

O botão "Auto-configurar Claude Desktop" em Ferramentas → Servidor MCP... escreve uma entrada equivalente para você (e mantém uma cópia .bak da configuração anterior). Ele usa localhost como host; se o Claude Desktop não conseguir conectar, substitua por 127.0.0.1.

Comandos disponíveis

44 comandos em 14 categorias.

Cena

ComandoDescrição
get_stateEstado completo da cena: paredes, móveis, cômodos, câmera, rótulos, níveis
clear_sceneRemover todos os objetos da cena

Paredes

ComandoDescrição
create_wallParede única entre dois pontos
create_wallsCômodo retangular (4 paredes conectadas)
modify_wallAlterar altura, espessura, cor, arco, coordenadas
delete_wallExcluir parede por ID
connect_wallsConectar duas paredes para renderização correta de cantos

Cômodos

ComandoDescrição
create_room_polygonCômodo a partir de uma matriz de pontos de polígono
modify_roomAlterar nome, cor do piso/teto, visibilidade
delete_roomExcluir cômodo por ID

Móveis

ComandoDescrição
list_categoriesTodas as categorias do catálogo de móveis com contagens de itens
list_furniture_catalogNavegar pelo catálogo; filtrar por nome, categoria ou tipo
place_furnitureColocar um item do catálogo na cena
modify_furnitureMover, girar, redimensionar, recolorir móveis por ID; definir arcos de abertura de portas/janelas (sashPreset / sashes)
delete_furnitureExcluir móvel por ID
duplicate_objectsDuplicar um ou mais objetos por ID
group_furnitureAgrupar várias peças em um único objeto
ungroup_furnitureDividir um grupo de volta em peças individuais

Portas e Janelas

ComandoDescrição
place_door_or_windowColocar do catálogo em uma parede (calcula automaticamente posição e ângulo); sashPreset / sashes opcionais para o arco de abertura na planta

Texturas e Aparência

ComandoDescrição
list_textures_catalogNavegar pelo catálogo de texturas; filtrar por nome ou categoria
apply_textureAplicar textura do catálogo ao lado da parede ou superfície do cômodo
set_environmentCores do chão/céu, iluminação, transparência de paredes, modo de desenho

Formas 3D

ComandoDescrição
generate_shapeCriar geometria 3D personalizada: primitivas (caixa, esfera, cilindro, cone, cunha, arco, escadas, toro, hemisfério, tubo), extrusão, malha e operações booleanas CSG (união, subtração, interseção)

Anotações

ComandoDescrição
add_labelAnotação de texto na planta baixa 2D
add_dimension_lineLinha de medição com deslocamento automático
modify_dimension_lineMover extremidades de uma linha de dimensão ou deslocamento por ID
delete_dimension_lineExcluir linha de dimensão por ID

Câmera

ComandoDescrição
set_cameraAlternar para modo superior/observador; definir posição, ponto lookAt ou objeto target
store_cameraSalvar o ponto de vista atual como marcador nomeado
get_camerasListar todos os pontos de vista de câmera salvos

Multi-nível

ComandoDescrição
add_levelAdicionar um novo nível (andar/pavimento)
list_levelsListar todos os níveis; mostra qual está selecionado atualmente
set_selected_levelAlternar o nível ativo
delete_levelExcluir um nível e todos os seus objetos

Renderização e Exportação

ComandoDescrição
render_photoRenderização 3D com ray tracing (Sunflow); vista padrão ou panorâmica de cima; JPEG embutido ou PNG salvo
export_plan_imagePlanta baixa 2D como PNG
export_svgPlanta baixa 2D como SVG
export_to_objCena 3D como Wavefront OBJ (ZIP: OBJ + MTL + texturas)

Salvar / Carregar

ComandoDescrição
save_homeSalvar a cena em um arquivo .sh3d
load_homeCarregar um arquivo .sh3d, substituindo a cena atual

Pontos de verificação (linha do tempo de desfazer)

ComandoDescrição
checkpointSalvar um snapshot em memória (descrição opcional)
restore_checkpointRestaurar de um snapshot (suporta modo forçado)
list_checkpointsListar todos os snapshots com a posição atual do cursor de desfazer

Lote

ComandoDescrição
batch_commandsExecutar vários comandos em uma única solicitação

Sistema de Coordenadas

  • Unidades: centímetros (500 = 5 metros)
  • Eixo X: direita, eixo Y: para baixo (coordenadas de tela)
  • Todos os IDs de objetos são UUIDs estáveis — seguros para uso em várias chamadas

Compilação a partir do Código Fonte

Pré-requisitos: Java 11+, Maven 3.6+ (ou use o wrapper mvnw incluído).

# 1. Clone
git clone https://github.com/grimashevich/sweethome3d-mcp-server.git
cd sweethome3d-mcp-server

# 2. Obtain SweetHome3D.jar (copies from your SH3D installation or downloads it)
./scripts/setup-dev.sh        # macOS / Linux / Git Bash on Windows
# scripts\setup-dev.bat       # Windows Command Prompt

# 3. Build
./mvnw clean package

# 4. Run tests
./mvnw test

# The plugin artifact is at:
# target/sh3d-mcp-plugin-1.0.0.sh3p

Por que o script de configuração? SweetHome3D.jar é um binário de 46 MB excluído do git. O script primeiro verifica sua instalação local do Sweet Home 3D (mais rápido, funciona offline), depois recorre ao download do SourceForge. Os três JARs Java3D (j3dcore, j3dutils, vecmath) estão incluídos em lib/ diretamente.

Arquitetura

O plugin é um único componente autocontido sem dependências externas de runtime:

  • plugin — Ponto de entrada (SH3DMcpPlugin), diálogo de configurações
  • http — Servidor MCP HTTP streamable (JSON-RPC 2.0, porta 9877)
  • command — 44 manipuladores de comandos, auto-registrados via CommandRegistry
  • bridge — Wrapper thread-safe da API do Sweet Home 3D (HomeAccessor via EDT, CheckpointManager, ObjectResolver)
  • protocol — Parser JSON escrito à mão (zero dependências externas)
  • config — Configurações do plugin, auto-configurador do Claude Desktop

Consulte ARCHITECTURE.md para o design completo, decisões ADR e diagramas de sequência.

Adicionando um Novo Comando

Uma única classe é suficiente — o registro a detecta automaticamente:

public class MyCommandHandler implements CommandHandler, CommandDescriptor {

    @Override
    public Response execute(Request request, HomeAccessor accessor) {
        // All Home mutations must run on the Event Dispatch Thread:
        Object result = accessor.runOnEDT(() -> {
            Home home = accessor.getHome();
            // ... do something
            return "done";
        });
        return Response.success(result);
    }

    @Override
    public String getDescription() { return "Does something useful."; }

    @Override
    public Map<String, Object> getSchema() {
        return SchemaBuilder.object()
            .prop("name", "string", "Object name")
            .required("name")
            .build();
    }
}

Em seguida, registre-a em SH3DMcpPlugin.createCommandRegistry():

registry.register("my_command", new MyCommandHandler());

Consulte CONTRIBUTING.md para o guia completo de desenvolvimento.

Licença

GNU General Public License v2.0 — consulte LICENSE para detalhes.

Este plugin usa a API de Plugin do Sweet Home 3D (GPL v2) e Java3D (licença BSD / JOGL).