sqemo-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_erd_overviewA | Returns an ERD summary (entity/relationship/domain/word-list stats, standard link status). |
| list_entitiesB | Lists entities (logical name, physical name, attribute count). |
| get_entityA | Entity detail (attributes and physical mapping). Prefers entityId; otherwise exact logicalName match (first hit on duplicates). |
| list_relationshipsA | Lists relationships (endpoint entity names, cardinality, identifying flag). |
| list_domainsA | Lists domain definitions (name, data type). With a {workspaceId} source, reads the latest workspace-standard master. |
| search_dictionaryA | Partial-match word-list search across logical/physical/abbreviation/English/synonyms (case-insensitive, max 50). With a {workspaceId} source, reads the latest workspace-standard master. |
| check_namingA | Checks a logical name against the team naming standard (word list + rules). With physicalName, compares it to the generated name (providedMatches). With a {workspaceId} source, reads the latest workspace-standard master. |
| generate_physical_nameA | Generates a physical name from a logical name via the word list and naming rules (unregistered words go to warnings). With a {workspaceId} source, reads the latest workspace-standard master. |
| export_sqlA | Exports the physical model as CREATE TABLE SQL. Without dialect, uses the project dialect. |
| export_dbmlB | Exports the project as DBML text. |
| validate_erdB | Validates project structure and referential integrity ({ valid, errors }). |
| lint_erdA | Lints the whole project — structure (PKs, attributes, descriptions, domains), referential integrity, duplicate physical names (including names that differ only by case, which collide on case-insensitive databases), duplicate logical entity names, identifier length limits (dialect-aware, tables/columns/indexes/FK constraints), auto-increment on non-integer column types (dialect-aware), and the naming standard (unregistered words, physical-name drift) in one pass. Quality/standards oriented, unlike validate_erd (structural validity). |
| diff_erdsA | Compares two ERD sources (entities/attributes/domains/relationships — unchanged omitted). A dry run before full-replace import_sql/import_dbml. A side freshly parsed from text has different ids, so most items appear as added/removed — matching the actual import behavior (full replace). summary aggregates entities only; see the arrays for domain/relationship changes. |
| export_alter_sqlA | Generates a migration (ALTER) script from the physical diff between a baseline and the current model — renames stay renames (stable-id matching), destructive changes come commented out, unsupported changes are flagged as [WARNING] comments. Baselines from the same project lineage ({file}/{erdId}) preserve renames; freshly parsed SQL/DBML text falls back to name matching. Pro plan required; requires login. |
| list_erdsA | Lists server ERDs (owned/shared). Owner and shared editors can both write. Requires login — |
| list_workspacesA | Lists my workspaces (owner first) and whether a standard (word list + naming rules) exists. Requires login. |
| propose_dictionary_wordA | Proposes a new word for the workspace standard's word list (the owner approves/rejects in the web app). source is {workspaceId} or a standard-linked ERD ({file}/{erdId}, resolved via glossaryLink). Registered words return already_exists; a pending duplicate returns already_proposed. Requires login. |
| list_proposalsA | Lists the workspace-standard proposal queue (word/domain, newest first, mine = my proposals). Filterable by status. Requires login. |
| withdraw_proposalA | Withdraws your own pending proposal. Proposals by others or already processed return not_found. Requires login. |
| create_erdA | Creates a new ERD — empty or from SQL/DBML text. With a {file} target it saves locally; with {server:true} it saves to the server (login required). Pass workspaceId to bind it to that workspace's naming standard from the start. |
| import_sqlA | Fully replaces an existing ERD with the SQL parse result (project id preserved). Rejected as invalid_source when no tables are found. |
| import_dbmlA | Fully replaces an existing ERD with the DBML parse result (project id preserved, dialect fixed to mysql). Rejected as invalid_source when no tables are found. |
| introspect_dbA | Imports the schema of a live PostgreSQL/MySQL database into an existing ERD (full replace, project id preserved). Read-only — queries only the information schema/catalog; never reads table data. The database URL is used by this local process only and is never sent to Sqemo servers. Pro plan required; requires login. |
| check_db_driftA | Checks whether a live database (url) or a schema dump (schemaSql) has drifted from the ERD's physical model. Errors: missing/extra tables and columns, PK/FK/NOT NULL mismatches. Warnings (strict promotes to errors): type/unique/auto-increment representation differences. Read-only; the database URL never leaves this process. Pro plan required; requires login. |
| upsert_entityA | Creates an entity (no entityId, logicalName required) or updates one (entityId given, only provided fields change). The physical name is derived automatically. |
| delete_entityB | Deletes an entity (including its relationships). |
| upsert_attributeA | Creates an attribute (no attributeId, logicalName required) or updates one (attributeId given, only provided fields change). primaryKey=true forces nullable=false and propagates child FKs. With a domain, the domain decides the data type. autoIncrement marks the column as identity — exported as AUTO_INCREMENT (mysql/cubrid/h2), IDENTITY(1,1) (sqlserver), or GENERATED BY DEFAULT AS IDENTITY (postgres/oracle); it applies to primary keys only. |
| delete_attributeC | Deletes an attribute. |
| upsert_relationshipA | Creates a relationship (no relationshipId, source/targetEntityId required — FKs derived automatically) or updates one (relationshipId given). On update, sourceEnd/targetEnd take precedence; otherwise ends are re-derived from cardinality. onDelete/onUpdate set the FK referential actions ('noAction' reverts to the DB default); constraintName sets the FK constraint name (empty string reverts to auto-generation). |
| delete_relationshipB | Deletes a relationship (including derived FKs). |
| upsert_domainA | Creates a domain (upsert by name) or updates one (domainId given). Existing description preserved when omitted. |
| delete_domainA | Deletes a domain (attributes referencing it are unlinked). |
| upsert_dictionary_wordA | Adds a glossary entry (upsert by logicalWord) or updates one (entryId given). Physical words are normalized to uppercase. Standard-linked (glossaryLink) dictionaries are rejected with dictionary_is_linked. |
| delete_dictionary_wordA | Deletes a glossary entry. Standard-linked (glossaryLink) dictionaries are rejected with dictionary_is_linked. |
| update_naming_rulesA | Partially updates the naming rules (delimiter, case, unknown-word handling, self-reference role prefix). Existing physical names are not regenerated retroactively (noted in warnings) — set the rules before modelling. |
| auto_layoutA | Auto-arranges entities by relationships (dagre LR). v5 has a single shared layout (no separate logical/physical placement — the removed |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
All 36 tools target distinct resource-action pairs: list/get/upsert/delete for specific entity types, plus specialized operations like validate, lint, diff, import, and export. Related tools like validate_erd and lint_erd are clearly differentiated by structural vs quality focus, so there is no confusion.
Every tool name follows a consistent lowercase_snake_case verb_noun pattern (e.g., list_entities, upsert_attribute, export_sql, check_naming). The only slight deviation is 'auto_layout', but it still fits the overall convention, so naming is highly predictable.
With 36 tools, this server is well above the 25-tool threshold that typically indicates an excessive number for an MCP server. Although each tool has a clear role, the breadth makes the surface heavy and potentially overwhelming for agents.
The core lifecycle is well covered for entities, attributes, relationships, domains, and dictionary words, including create, read, update, and delete. However, there is no tool to delete an ERD itself, and ERD-level metadata updates are missing, which are notable gaps in a modeling tool.