Sqemo MCP

Servidor MCP para Sqemo. Agentes de IA consultam e editam ERDs, geram nomes físicos a partir da lista de palavras e regras de nomenclatura da sua equipe, importam/exportam SQL (7 dialetos) e DBML, verificam desvios de nomenclatura e comparam o modelo com um banco de dados ativo. O arquivo local .erd.json funciona sem conta.

Documentação

sqemo-mcp

npm version npm downloads MCP Registry Node License: MIT

Servidor MCP para Sqemo — agentes de IA que seguem o padrão de nomenclatura de banco de dados da sua equipe.

Seu agente modela em termos de negócio ("Customer Number"); a coluna sai como cust_no porque sua lista de palavras diz customer → cust, number → no (maiúsculas/minúsculas e delimitadores também são regras, então CUST_NO está a uma configuração de distância). Mesma entrada, mesmo nome, em cada tabela, em cada agente. Substituições são permitidas, mas sinalizadas, e um lint via CLI detecta desvios na CI.

{ "mcpServers": { "sqemo": { "command": "npx", "args": ["-y", "sqemo-mcp"] } } }

Funciona com Claude Code, Claude Desktop, Cursor e qualquer cliente MCP. Arquivos .erd.json locais não exigem conta; ERDs na nuvem e ferramentas Pro exigem npx sqemo-mcp login.

Como funciona

Modele um fórum de discussão onde membros publicam artigos, uma publicação pode ser uma resposta a outra publicação, e membros comentam nas publicações.

O agente chama as ferramentas com nomes lógicos e nunca digita um nome de coluna:

upsert_entity    { logicalName: "Post" }
// → { physicalName: "POST" }

upsert_attribute { logicalName: "Post Content", domain: "Content" }
// → { physicalName: "POST_CNTS" }          // Content → CNTS: from the team word list

upsert_attribute { logicalName: "Delete Flag", domain: "Flag" }
// → { physicalName: "DELETE_YN" }          // Flag → YN: same rule in every table

lint_erd
// → naming drift, missing words, referential integrity — before any DDL is written

CNTS e YN não são escolha do agente. São abreviações da sua lista de palavras, aplicadas da mesma forma que foram aplicadas em todas as outras tabelas que sua equipe modelou. Domínios carregam o tipo de dado, então Content é varchar(1000) em todos os lugares em que aparece.

Building a database schema with an AI agent — without naming a single column (3:25)

Passo a passo completo com cada chamada de ferramenta: Descreva o trabalho, obtenha um esquema governado.

Visão geral

Agentes de IA podem consultar e editar entidades, relacionamentos e domínios; gerar nomes físicos a partir de um glossário compartilhado da equipe; importar/exportar SQL (7 dialetos) e DBML; e comparar o modelo com um banco de dados ativo. Funciona com arquivos .erd.json locais e ERDs armazenados na nuvem Sqemo.

Requer Node.js >= 22. Ferramentas de arquivos locais funcionam sem conta ou configuração. Login é necessário para ferramentas de ERD na nuvem e para as ferramentas marcadas como (Pro) abaixo.

Instalação

Claude Code (.mcp.json)

{
  "mcpServers": {
    "sqemo": { "command": "npx", "args": ["-y", "sqemo-mcp"] }
  }
}

Claude Desktop

Adicione a mesma entrada mcpServers ao seu arquivo de configuração:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "sqemo": { "command": "npx", "args": ["-y", "sqemo-mcp"] }
  }
}

Login (ERDs na nuvem e ferramentas Pro)

npx sqemo-mcp login    # pick Google, GitHub, or email + password
npx sqemo-mcp logout   # removes stored credentials

login pergunta como você deseja entrar. Google e GitHub abrem uma aba no navegador, completam um fluxo OAuth PKCE e devolvem a sessão por meio de um servidor loopback de uso único em 127.0.0.1; a terceira opção aceita e-mail e senha no terminal. Apenas um token de atualização é armazenado.

  • As credenciais são armazenadas em ~/.erdmaker/credentials.json (modo 0600 em POSIX); sua senha nunca é persistida.
  • Atalhos não interativos: --password força o caminho de e-mail + senha, --provider google|github força um caminho via navegador.
  • Entrada via pipe pula o menu e vai direto para e-mail + senha, então a automação existente continua funcionando: printf 'email\npassword\n' | npx sqemo-mcp login
  • Os caminhos via navegador precisam de um navegador na mesma máquina (o callback retorna para 127.0.0.1). Via SSH ou em CI, use --password ou as variáveis de ambiente SQEMO_EMAIL / SQEMO_PASSWORD.

O que você pode fazer

36 ferramentas no total.

Leitura (17 ferramentas)

FerramentaDescrição
list_erds / list_workspacesERDs na nuvem e workspaces aos quais você pertence (requer login)
get_erd_overviewNome, dialeto, estatísticas de entidade/relacionamento/domínio/glossário
list_entities / get_entityLista de entidades e detalhes completos (atributos, chaves, mapeamento lógico/físico)
list_relationshipsRelacionamentos com endpoints e cardinalidade
list_domainsDefinições de domínio (também de glossários padrão do workspace)
search_dictionaryPesquisa no glossário da equipe (palavras lógicas/físicas, abreviações, sinônimos)
check_namingVerifica um nome lógico contra o padrão de nomenclatura da equipe
generate_physical_nameNome lógico → nome físico via glossário + regras de nomenclatura
export_sqlSQL CREATE TABLE — mysql, postgres, cubrid, oracle, sqlserver, sqlite, h2
export_dbmlTexto DBML
validate_erd / lint_erdValidação estrutural e lint completo (desvios de nomenclatura, integridade referencial, duplicatas)
diff_erdsDiff entre duas fontes (arquivos, ERDs na nuvem ou texto SQL/DBML bruto) — simulação antes de importações
export_alter_sqlScript de migração (ALTER) a partir do diff físico contra uma linha de base — renomeações permanecem renomeações via IDs estáveis, alterações destrutivas vêm comentadas (Pro)
list_proposalsStatus da fila de propostas de glossário (requer login)

Banco de dados ativo (2 ferramentas)

Somente leitura no seu próprio banco de dados. Ambas consultam apenas o information schema — nunca dados de tabela — e a URL de conexão é usada apenas por este processo local, nunca enviada aos servidores Sqemo.

FerramentaDescrição
introspect_dbImporta um esquema PostgreSQL/MySQL ativo para um ERD existente (Pro)
check_db_driftVerifica um banco de dados ativo ou um dump de esquema contra o modelo físico do ERD — tabelas/colunas ausentes ou extras, incompatibilidades de PK/FK/NOT NULL (Pro)

Escrita (17 ferramentas)

FerramentaDescrição
create_erdNovo ERD do zero ou a partir de texto SQL/DBML — para um arquivo ou para a nuvem
upsert_entity / delete_entityEdição de entidades com derivação automática de nome físico
upsert_attribute / delete_attributeEdição de atributos — regras de PK e propagação de FK tratadas automaticamente
upsert_relationship / delete_relationshipEdição de relacionamentos com derivação automática de FK
upsert_domain / delete_domainEdição de definições de domínio
upsert_dictionary_word / delete_dictionary_wordEdição de glossário (glossários vinculados a padrões são protegidos)
update_naming_rulesEdição de regras de nomenclatura (delimitador, maiúsculas/minúsculas, tratamento de palavras desconhecidas)
import_sql / import_dbmlSubstitui um ERD a partir de SQL/DBML analisado (IDs preservados)
auto_layoutLayout automático de entidades/tabelas (dagre)
propose_dictionary_word / withdraw_proposalPropõe novas palavras de glossário para aprovação do proprietário

Escritas na nuvem exigem permissão de proprietário ou editor compartilhado e são protegidas por CAS de versão com auto-merge de 3 vias para edições concorrentes.

CLI para pipelines de CI

Subcomandos offline baseados em arquivos (sem necessidade de login):

# Naming-standard check — exits 1 on violations, great as a CI gate
npx sqemo-mcp lint schema.erd.json

# Schema export to stdout
npx sqemo-mcp export schema.erd.json --format sql --dialect postgres > schema.sql
npx sqemo-mcp export schema.erd.json --format dbml > schema.dbml

O modo drift compara o modelo com um banco de dados real ou um dump e sai com código 1 quando eles divergem (Pro, requer login):

npx sqemo-mcp lint schema.erd.json --db "$DATABASE_URL" [--db-schema public] [--strict]
npx sqemo-mcp lint schema.erd.json --schema dump.sql --dialect postgres
npx sqemo-mcp lint --erd <cloud-erd-id> --db "$DATABASE_URL" --ignore 'tmp_*'

Exemplo de GitHub Actions:

- run: npx sqemo-mcp lint schema.erd.json
- run: npx sqemo-mcp lint schema.erd.json --db "${{ secrets.DATABASE_URL }}"

Variáveis de ambiente

VariávelFinalidade
SQEMO_EMAIL / SQEMO_PASSWORDLogin não interativo para CI e sessões SSH (sem necessidade de navegador)
ERDMAKER_HOMESubstitui o diretório de credenciais (padrão ~/.erdmaker)
ERDMAKER_SUPABASE_URLSubstitui a URL da API (padrão: nuvem Sqemo)
ERDMAKER_SUPABASE_ANON_KEYSubstitui a chave publicável da API
ERDMAKER_MAX_REQUESTS_PER_MINUTELimite de solicitações por minuto (padrão 120, 0 desativa)
ERDMAKER_MAX_REQUESTS_PER_DAYLimite diário de solicitações (padrão 10000, 0 desativa)

Os limites de solicitações são uma rede de segurança contra agentes presos em loops; excedê-los retorna um erro rate_limited que instrui o agente a parar e notificar o usuário.

Erros

Todos os erros de ferramenta retornam { code, message } — por exemplo, not_authenticated, no_permission, save_conflict (tente novamente após reler), validation_failed, rate_limited.

Links

Licença

MIT