Skip to main content
Glama
README.md
# Astah MCP

Servidor MCP local e genérico para transformar pedidos e enunciados de exercícios de modelagem em projetos nativos do Astah (`.asta`).

O usuário conversa normalmente com o agente do cliente MCP: pode descrever o modelo desejado, colar o enunciado ou anexar um PDF se o cliente conseguir lê-lo. O agente interpreta o conteúdo e chama o servidor com uma especificação estruturada; o usuário não precisa escrever JSON nem informar coordenadas.

O projeto foi construído sobre a API oficial do Astah. Ele implementa todos os tipos de diagrama que a instalação Astah UML permite criar nativamente por API e rejeita explicitamente tipos indisponíveis, evitando apresentar um diagrama aproximado como se fosse o tipo solicitado.

## Fluxo de uso

1. O usuário informa o que quer modelar ou fornece o enunciado do exercício.
2. O agente identifica elementos, propriedades, relações, multiplicidades e o tipo de diagrama adequado.
3. O MCP valida a especificação e cria o projeto nativo no Astah.
4. O servidor calcula um layout compacto quando não recebe posições explícitas.
5. O Astah exporta os diagramas para PNGs temporários.
6. O agente inspeciona as imagens e confirma que não há cortes ou sobreposições.
7. A pasta temporária é apagada; somente o `.asta` final permanece no caminho escolhido.

Por padrão, o MCP cria apenas um diagrama e comprime o conteúdo nele. Mais de um diagrama só é aceito quando o pedido ou o enunciado exige explicitamente várias visões.

## Diagramas suportados

Esta versão cria nativamente:

- diagrama de classes, incluindo classes abstratas, interfaces, enumerações e objetos;
- diagrama de casos de uso;
- diagrama de máquina de estados;
- diagrama de atividades;
- diagrama de sequência;
- diagrama de estrutura composta;
- mapa mental.

Também são suportados os principais elementos e relações próprios de cada tipo, como atributos, operações, literais, associações, agregações, composições, generalizações, realizações, dependências, atores, `include`, `extend`, transições, fluxos, mensagens, retornos, portas e conectores.

### Limites da API

Na edição Astah UML usada pelo servidor, a API não cria nativamente diagramas de comunicação, componentes, implantação, fluxograma, fluxo de dados, entidade-relacionamento, requisitos ou CRUD. Alguns elementos isolados, como `Component` e `Node`, existem na API de modelo, mas isso não habilita a criação do respectivo diagrama nativo.

Quando um desses tipos for solicitado, o MCP retorna uma explicação clara da limitação. Ele não troca silenciosamente o tipo pedido por outro. A matriz oficial de suporte pode variar entre produtos e versões do Astah: [Astah API Support](https://astah.net/support/astah-api/).

## Layout automático

O servidor:

- calcula a menor largura segura considerando nomes, atributos, operações e parâmetros;
- respeita o tamanho mínimo obrigatório de cada apresentação nativa do Astah;
- alinha elementos equivalentes em uma grade compacta e simétrica;
- centraliza superclasses acima das subclasses;
- organiza atividades e estados em fluxo vertical;
- distribui linhas de vida uniformemente;
- prioriza relações retas e usa segmentos ortogonais quando é necessário desviar;
- reserva corredores para rótulos, multiplicidades, portas e conectores;
- não divide um diagrama apenas para obter mais espaço;
- aceita posições explícitas quando o agente identifica que o enunciado exige um arranjo específico.

As regras completas estão em [`docs/LAYOUT_GUIDE.md`](docs/LAYOUT_GUIDE.md).

## Requisitos

- Windows;
- [Astah UML](https://astah.net/products/astah-uml/) instalado;
- Node.js 18 ou superior;
- JDK com `java` e `javac` no `PATH`.

Não há dependências npm externas. O servidor usa módulos nativos do Node.js e os arquivos JAR instalados com o Astah.

Por padrão, o Astah é procurado em `C:\Program Files\astah-UML`. Para usar outra instalação, defina `ASTAH_HOME` e reabra o cliente MCP:

```powershell
[Environment]::SetEnvironmentVariable(
  "ASTAH_HOME",
  "D:\Aplicativos\astah-UML",
  "User"
)
```

## Instalação

Clone o repositório:

```powershell
git clone https://github.com/g0mz/astah-mcp.git
cd astah-mcp
```

Confira o ambiente:

```powershell
node --version
java -version
javac -version
node astah-mcp-server.js
```

O último comando inicia o servidor via `stdio` e fica aguardando um cliente MCP. Use `Ctrl+C` para encerrá-lo.

## Configuração do cliente MCP

Adicione o servidor à configuração do cliente, substituindo o caminho pelo local do clone:

```json
{
  "mcpServers": {
    "astah": {
      "command": "node",
      "args": [
        "C:\\caminho\\para\\astah-mcp\\astah-mcp-server.js"
      ]
    }
  }
}
```

### Antigravity IDE

Abra o painel do agente e selecione `...` → **MCP Servers** → **Manage MCP Servers** → **View raw config**. Adicione o objeto acima ao arquivo global `~/.gemini/config/mcp_config.json` ou ao arquivo local `.agents/mcp_config.json` do projeto. Reinicie ou recarregue os servidores MCP.

### Outros clientes

Claude Desktop, VS Code com GitHub Copilot, Cline, Goose e outros clientes compatíveis com MCP podem usar a mesma configuração `stdio`: comando `node` e caminho absoluto de `astah-mcp-server.js`.

O cliente precisa ter um agente/modelo capaz de interpretar o enunciado e usar ferramentas MCP. Para enunciados em PDF, ele também precisa conseguir ler o anexo.

## Como pedir um modelo

Depois de configurar o servidor, escreva ao agente em linguagem natural. Exemplos:

```text
Crie no Astah um diagrama de classes para este enunciado e salve em
C:\Projetos\biblioteca.asta. Inclua atributos, operações, relações e multiplicidades.
```

```text
Leia o PDF anexado, resolva o exercício no Astah e crie somente o diagrama pedido.
Mantenha tudo compacto, reto e sem cortar textos.
```

```text
Modele o ciclo de vida de um pedido com uma máquina de estados e salve em
C:\Projetos\estados-pedido.asta.
```

Se o arquivo de saída já existir, o MCP não o substitui por padrão. O agente só deve enviar `overwrite: true` quando o usuário autorizar a substituição explicitamente.

## Ferramentas MCP

### `create_astah_model`

Ferramenta principal. Recebe do agente a interpretação estruturada do enunciado, cria um ou mais diagramas nativos e retorna as imagens temporárias para revisão visual.

Ela aceita:

- caminho absoluto do `.asta`;
- contexto original do exercício;
- tipo, nome, elementos, membros e relações de cada diagrama;
- coordenadas opcionais — quando omitidas, o layout é automático;
- autorização explícita para múltiplos diagramas e para sobrescrita.

O esquema completo é fornecido ao cliente automaticamente por `tools/list`; normalmente ninguém precisa montá-lo manualmente.

### `get_astah_capabilities`

Lista os tipos, elementos e relações criáveis na instalação atual e explica os tipos indisponíveis.

### `verify_astah_visual_layout`

Exporta e revisa um projeto `.asta` existente sem modificá-lo. Os PNGs e o relatório são temporários e apagados após serem carregados na resposta MCP.

### `get_astah_layout_guidelines`

Retorna as regras visuais usadas pelo gerador e pela inspeção final.

### `validate_astah_environment`

Confirma a presença do Astah, da API, do Java, do exportador e dos geradores, sem alterar projetos.

### Compatibilidade

`create_meteorological_station_model` continua disponível somente para clientes antigos que já dependiam dessa ferramenta. Novos exercícios devem usar `create_astah_model`.

## Testes

Teste genérico mínimo:

```powershell
node tests\smoke-client.mjs "C:\Temp\astah-mcp-smoke.asta"
```

Teste explícito de todos os sete tipos criáveis:

```powershell
node tests\all-diagrams-client.mjs "C:\Temp\astah-mcp-all.asta"
```

Use caminhos novos ou remova os projetos de teste antes de repetir, pois a proteção contra sobrescrita também vale nos testes.

## Estrutura

```text
astah-mcp/
├── astah-mcp-server.js
├── java/
│   ├── UniversalAstahModel.java
│   └── MeteorologicalStationModel.java
├── tests/
│   ├── smoke-client.mjs
│   └── all-diagrams-client.mjs
├── docs/
│   └── LAYOUT_GUIDE.md
├── package.json
└── README.md
```

## Segurança e arquivos temporários

O servidor inicia processos locais do Node.js, Java e Astah. Instale somente uma cópia confiável. Projetos existentes são protegidos contra substituição acidental. Especificações intermediárias, PNGs e relatórios de revisão são criados na pasta temporária do sistema e removidos automaticamente; o `.asta` solicitado é o único artefato permanente.

TDQS

A3.9/5.0

Scored across 6 tools

Disambiguation3/5

Most tools are clearly distinct, but 'create_astah_model' and 'create_meteorological_station_model' overlap in purpose; the latter appears to be a specialized version of the former, yet the descriptions don't clarify when to use one over the other. The remaining tools (verify, get, validate) are unambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (create_*, verify_*, get_*, validate_*). The naming is uniform and predictable, making it easy to infer tool behavior from the name alone.

Tool Count5/5

With 6 tools, the server is well-scoped for its purpose of creating, verifying, and validating Astah models. Each tool has a clear role, and the count is neither too thin nor excessively large.

Completeness4/5

The server covers the core lifecycle: creating models (generic and specific), validating layout, and checking environment. Minor gaps exist, such as no explicit update/delete tools, but the generic creation tool likely handles most needs, and the verification workflow is well-supported.

Maintenance

ActivitySlowing
ResponsivenessNo issues