{"name":"io.github.sqemo/sqemo","slug":"sqemo","title":null,"description":"Design ERDs with your team's naming standards: query/edit entities and relationships, SQL/DBML","url":"https://mcp.market/server/sqemo","rating":null,"grade":"A","score":91,"certified":false,"status":"active","category":"data","tags":["data","media"],"presence":{"score":29,"stars":0,"forks":0,"downloads_week":137,"last_push_at":"2026-08-23T09:56:23.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/sqemo/sqemo-mcp","website":"https://sqemo.com","version":"2.8.2","remotes":[],"packages":[{"registryType":"npm","identifier":"sqemo-mcp","version":"2.8.2","transport":{"type":"stdio"}}],"tools":[{"name":"auto_layout","description":"Auto-arranges entities by relationships (dagre LR). Entities with no relationship are placed in a grid below the connected ones instead of a single vertical column (2.8.2+). v5 has a single shared layout (no separate logical/physical placement \\u2014 the removed `view` parameter had no other effect). Reference copies, notes, and relationship waypoints are not moved.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_db_drift","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_naming","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_erd","description":"Creates a new ERD \\u2014 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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_attribute","description":"Deletes an attribute.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_dictionary_word","description":"Deletes a glossary entry. Standard-linked (glossaryLink) dictionaries are rejected with dictionary_is_linked.","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_domain","description":"Deletes a domain (attributes referencing it are unlinked).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_entity","description":"Deletes an entity (including its relationships).","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_relationship","description":"Deletes a relationship (including derived FKs).","write_action":true,"price_micros":0,"input_schema":null},{"name":"diff_erds","description":"Compares two ERD sources (entities/attributes/domains/relationships \\u2014 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 \\u2014 matching the actual import behavior (full replace). summary aggregates entities only; see the arrays for domain/relationship changes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_alter_sql","description":"Generates a migration (ALTER) script from the physical diff between a baseline and the current model \\u2014 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; re","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_dbml","description":"Exports the project as DBML text.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_sql","description":"Exports the physical model as CREATE TABLE SQL. Without dialect, uses the project dialect.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_physical_name","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_entity","description":"Entity detail (attributes and physical mapping). Prefers entityId; otherwise exact logicalName match (first hit on duplicates).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_erd_overview","description":"Returns an ERD summary (entity/relationship/domain/word-list stats, standard link status).","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_dbml","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_sql","description":"Fully replaces an existing ERD with the SQL parse result (project id preserved). Rejected as invalid_source when no tables are found.","write_action":false,"price_micros":0,"input_schema":null},{"name":"introspect_db","description":"Imports the schema of a live PostgreSQL/MySQL database into an existing ERD (full replace, project id preserved). Read-only \\u2014 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"lint_erd","description":"Lints the whole project \\u2014 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","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_domains","description":"Lists domain definitions (name, data type). With a {workspaceId} source, reads the latest workspace-standard master.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_entities","description":"Lists entities (logical name, physical name, attribute count).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_erds","description":"Lists server ERDs (owned/shared). Owner and shared editors can both write. Requires login \\u2014 `npx sqemo-mcp login`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_proposals","description":"Lists the workspace-standard proposal queue (word/domain, newest first, mine = my proposals). Filterable by status. Requires login.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_relationships","description":"Lists relationships (endpoint entity names, cardinality, identifying flag).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_workspaces","description":"Lists my workspaces (owner first) and whether a standard (word list + naming rules) exists. Requires login.","write_action":false,"price_micros":0,"input_schema":null},{"name":"propose_dictionary_word","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_dictionary","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_naming_rules","description":"Partially updates the naming rules (delimiter, case, unknown-word handling, self-reference role prefix). Existing physical names are not regenerated retroactively (noted in warnings) \\u2014 set the rules before modelling.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upsert_attribute","description":"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 \\u2014 exported as AUTO_INCREMENT (mysql/cubrid/h2), IDENTITY(1,1) (sqlserver), or GENERATED BY DEFAULT AS IDENTITY (po","write_action":true,"price_micros":0,"input_schema":null},{"name":"upsert_attributes","description":"Bulk form of upsert_attribute: creates/updates many attributes \\u2014 across any number of entities \\u2014 in ONE load/save (use this instead of calling upsert_attribute in a loop; each single call costs several server requests and counts against the per-minute cap). Same per-item semantics, applied in order (primaryKey propagates child FKs; a domain decides the data type); all-or-nothing; results","write_action":false,"price_micros":0,"input_schema":null},{"name":"upsert_dictionary_word","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"upsert_dictionary_words","description":"Bulk form of upsert_dictionary_word: adds or updates many glossary entries in ONE load/save (use this instead of calling upsert_dictionary_word in a loop \\u2014 each single call costs several server requests and counts against the per-minute cap). Same per-item semantics (upsert by logicalWord, physical words uppercased); later duplicates in the batch win; all-or-nothing; standard-linked dictionar","write_action":false,"price_micros":0,"input_schema":null},{"name":"upsert_domain","description":"Creates a domain (upsert by name) or updates one (domainId given). Existing description preserved when omitted.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upsert_domains","description":"Bulk form of upsert_domain: creates or updates many domains in ONE load/save (use this instead of calling upsert_domain in a loop \\u2014 each single call costs several server requests and counts against the per-minute cap). Same per-item semantics; later duplicates in the batch win; all-or-nothing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"upsert_entity","description":"Creates an entity (no entityId, logicalName required) or updates one (entityId given, only provided fields change). The physical name is derived automatically.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upsert_relationship","description":"Creates a relationship (no relationshipId, source/targetEntityId required \\u2014 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 ","write_action":true,"price_micros":0,"input_schema":null},{"name":"validate_erd","description":"Validates project structure and referential integrity ({ valid, errors }).","write_action":false,"price_micros":0,"input_schema":null},{"name":"withdraw_proposal","description":"Withdraws your own pending proposal. Proposals by others or already processed return not_found. Requires login.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":91,"grade":"A","scanned_at":"2026-09-20T00:24:40.861Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:24:40.854Z","components":{"code":{"score":25,"max":25,"notes":["10 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 28 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"sqemo-mcp","version":"2.8.2","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":6,"publishedAt":"2026-09-08T08:49:26.586Z","repositoryUrl":"git+https://github.com/sqemo/sqemo-mcp.git","weeklyDownloads":137}],"repo":{"found":true,"owner":"sqemo","repo":"sqemo-mcp","archived":false,"pushedAt":"2026-08-23T09:56:23Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/304886163?v=4","ownerCreatedAt":"2026-07-14T11:18:23Z","license":"MIT"},"icon":{"url":"https://sqemo.com/favicon.svg?v=2","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":137,"license":"MIT","lastPushAt":"2026-08-23T09:56:23.000Z","score":29}}}},"grade_history":[],"reviews":[]}