Sqemo MCP

Servidor MCP para Sqemo. Los agentes de IA consultan y editan ERDs, generan nombres físicos a partir de la lista de palabras y reglas de nomenclatura de tu equipo, importan/exportan SQL (7 dialectos) y DBML, verifican desviaciones de nomenclatura y comparan el modelo contra una base de datos en vivo. El archivo local .erd.json funciona sin cuenta.

Documentación

sqemo-mcp

npm version npm downloads MCP Registry Node License: MIT

Servidor MCP para Sqemo — agentes de IA que siguen el estándar de nombres de base de datos de tu equipo.

Tu agente modela en términos de negocio ("Customer Number"); la columna resulta ser cust_no porque tu lista de palabras dice customer → cust, number → no (mayúsculas/minúsculas y delimitadores también son reglas, así que CUST_NO está a un ajuste de distancia). Misma entrada, mismo nombre, en cada tabla, en cada agente. Las excepciones están permitidas pero marcadas, y un lint CLI detecta desviaciones en CI.

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

Funciona con Claude Code, Claude Desktop, Cursor y cualquier cliente MCP. Los archivos .erd.json locales no requieren cuenta; los ERD en la nube y las herramientas Pro requieren npx sqemo-mcp login.

Cómo se ve

Modela un foro de discusión donde los miembros publican artículos, una publicación puede ser una respuesta a otra publicación, y los miembros comentan en las publicaciones.

El agente llama a las herramientas con nombres lógicos y nunca escribe un nombre de columna:

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 y YN no son el gusto del agente. Son las abreviaturas de tu lista de palabras, aplicadas de la misma manera en que se aplicaron en cada otra tabla que tu equipo ha modelado. Los dominios llevan el tipo de dato, así que Content es varchar(1000) en todos lados donde aparece.

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

Recorrido completo con cada llamada a herramienta: Describe el trabajo, obtén un esquema gobernado.

Resumen

Los agentes de IA pueden consultar y editar entidades, relaciones y dominios; generar nombres físicos a partir de un glosario compartido del equipo; importar/exportar SQL (7 dialectos) y DBML; y comparar el modelo contra una base de datos en vivo. Funciona tanto con archivos .erd.json locales como con ERD almacenados en la nube de Sqemo.

Requiere Node.js >= 22. Las herramientas de archivos locales funcionan sin cuenta ni configuración. Se necesita iniciar sesión para las herramientas de ERD en la nube y para las herramientas marcadas como (Pro) a continuación.

Instalación

Claude Code (.mcp.json)

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

Claude Desktop

Agrega la misma entrada mcpServers a tu archivo de configuración:

  • 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"] }
  }
}

Inicio de sesión (ERD en la nube y herramientas Pro)

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

login pregunta cómo quieres iniciar sesión. Google y GitHub abren una pestaña del navegador, completan un flujo OAuth PKCE y devuelven la sesión a través de un servidor de bucle local de una sola vez en 127.0.0.1; la tercera opción toma un correo electrónico y una contraseña en la terminal. Solo se almacena un token de actualización.

  • Las credenciales se guardan en ~/.erdmaker/credentials.json (modo 0600 en POSIX); tu contraseña nunca se persiste.
  • Atajos no interactivos: --password fuerza la ruta de correo electrónico + contraseña, --provider google|github fuerza una ruta de navegador.
  • La entrada canalizada omite el menú y va directamente a correo electrónico + contraseña, así que la automatización existente sigue funcionando: printf 'email\npassword\n' | npx sqemo-mcp login
  • Las rutas de navegador necesitan un navegador en la misma máquina (la devolución de llamada regresa a 127.0.0.1). Por SSH o en CI, usa --password o las variables de entorno SQEMO_EMAIL / SQEMO_PASSWORD.

Lo que puedes hacer

36 herramientas en total.

Lectura (17 herramientas)

HerramientaDescripción
list_erds / list_workspacesERD en la nube y espacios de trabajo a los que perteneces (requiere inicio de sesión)
get_erd_overviewNombre, dialecto, estadísticas de entidad/relación/dominio/glosario
list_entities / get_entityLista de entidades y detalle completo (atributos, claves, mapeo lógico/físico)
list_relationshipsRelaciones con extremos y cardinalidad
list_domainsDefiniciones de dominio (también de glosarios estándar del espacio de trabajo)
search_dictionaryBusca en el glosario del equipo (palabras lógicas/físicas, abreviaturas, sinónimos)
check_namingVerifica un nombre lógico contra el estándar de nombres del equipo
generate_physical_nameNombre lógico → nombre físico mediante glosario + reglas de nombres
export_sqlSQL CREATE TABLE — mysql, postgres, cubrid, oracle, sqlserver, sqlite, h2
export_dbmlTexto DBML
validate_erd / lint_erdValidación estructural y lint completo (desviación de nombres, integridad referencial, duplicados)
diff_erdsDiferencia dos fuentes (archivos, ERD en la nube o texto SQL/DBML sin procesar) — prueba en seco antes de importar
export_alter_sqlScript de migración (ALTER) a partir de la diferencia física contra una línea base — los cambios de nombre siguen siendo cambios de nombre mediante IDs estables, los cambios destructivos vienen comentados (Pro)
list_proposalsEstado de la cola de propuestas de glosario (requiere inicio de sesión)

Base de datos en vivo (2 herramientas)

Solo lectura contra tu propia base de datos. Ambas consultan únicamente el esquema de información — nunca datos de tablas — y la URL de conexión la usa solo este proceso local, nunca se envía a los servidores de Sqemo.

HerramientaDescripción
introspect_dbImporta un esquema PostgreSQL/MySQL en vivo a un ERD existente (Pro)
check_db_driftVerifica una base de datos en vivo o un volcado de esquema contra el modelo físico del ERD — tablas/columnas faltantes o adicionales, discrepancias de PK/FK/NOT NULL (Pro)

Escritura (17 herramientas)

HerramientaDescripción
create_erdNuevo ERD desde cero o desde texto SQL/DBML — a un archivo o a la nube
upsert_entity / delete_entityEdición de entidades con derivación automática de nombres físicos
upsert_attribute / delete_attributeEdición de atributos — reglas de PK y propagación de FK manejadas automáticamente
upsert_relationship / delete_relationshipEdición de relaciones con derivación automática de FK
upsert_domain / delete_domainEdición de definiciones de dominio
upsert_dictionary_word / delete_dictionary_wordEdición de glosario (los glosarios vinculados a estándares están protegidos)
update_naming_rulesEdición de reglas de nombres (delimitador, mayúsculas/minúsculas, manejo de palabras desconocidas)
import_sql / import_dbmlReemplaza un ERD desde SQL/DBML analizado (los IDs se conservan)
auto_layoutDiseño automático de entidades/tablas (dagre)
propose_dictionary_word / withdraw_proposalPropone nuevas palabras de glosario para aprobación del propietario

Las escrituras en la nube requieren permiso de propietario o editor compartido y están protegidas por CAS de versión con fusión automática de 3 vías para ediciones concurrentes.

CLI para pipelines de CI

Subcomandos sin conexión, basados en archivos (sin necesidad de inicio de sesión):

# 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

El modo de desviación compara el modelo contra una base de datos real o un volcado, y sale con 1 cuando no coinciden (Pro, requiere inicio de sesión):

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_*'

Ejemplo de GitHub Actions:

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

Variables de entorno

VariablePropósito
SQEMO_EMAIL / SQEMO_PASSWORDInicio de sesión no interactivo para CI y sesiones SSH (sin necesidad de navegador)
ERDMAKER_HOMESobrescribe el directorio de credenciales (predeterminado ~/.erdmaker)
ERDMAKER_SUPABASE_URLSobrescribe la URL de la API (predeterminado la nube de Sqemo)
ERDMAKER_SUPABASE_ANON_KEYSobrescribe la clave publicable de la API
ERDMAKER_MAX_REQUESTS_PER_MINUTELímite de solicitudes por minuto (predeterminado 120, 0 lo desactiva)
ERDMAKER_MAX_REQUESTS_PER_DAYLímite de solicitudes diarias (predeterminado 10000, 0 lo desactiva)

Los límites de solicitudes son una red de seguridad contra agentes atrapados en bucles; excederlos devuelve un error rate_limited que le dice al agente que se detenga y notifique al usuario.

Errores

Todos los errores de herramientas devuelven { code, message } — p. ej. not_authenticated, no_permission, save_conflict (reintentar después de volver a leer), validation_failed, rate_limited.

Enlaces

Licencia

MIT