Zovo ER Diagram MCP
Turns SQL CREATE TABLE statements from PostgreSQL, MySQL, or SQLite into entity relationship diagrams. It generates PDFs, SVGs, CSVs, and JSON summaries, and includes a schema check for broken foreign keys or missing tables without connecting to a live database.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://er-diagram.zovo.one/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Draw an ER diagram from SQL CREATE TABLE statements
- Check schema for broken foreign keys before migration
- Generate a Tabloid PDF ER diagram of a MySQL dump
- Export diagram data as SVG, CSV, or JSON
Source and maintenance
Protocol and capabilities
- Server
- er-diagram 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
make_er_diagram — Make ER diagram
Use this when the user wants an ER diagram, entity relationship diagram or database schema diagram drawn from SQL CREATE TABLE statements, for example "draw an ER diagram of this schema" or "make a PDF of my database tables". Takes the DDL text, a dialect (auto, postgres, mysql, sqlite), a page size and an optional title. Reads CREATE TABLE with columns, types, NOT NULL, PRIMARY KEY, UNIQUE and REFERENCES / FOREIGN KEY, including composite keys; lists every other statement as skipped with its line number. Returns counts, relationships with crow's foot cardinality taken from the DDL, schema problems, a geometry check (overlapping tables, lines crossing a table), the PDF page count and smallest text size, an interactive diagram, and PDF, SVG, CSV and JSON downloads. Refuses a CREATE TABLE that does not parse, naming the line. Up to 50 tables. Does not connect to a database or run SQL. Download links of large diagrams expire after about 1 hour.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ddl"
],
"properties": {
"ddl": {
"type": "string",
"maxLength": 400000,
"description": "The SQL DDL text: CREATE TABLE statements with columns, types, NOT NULL, PRIMARY KEY, UNIQUE and REFERENCES / FOREIGN KEY, up to 200,000 characters, e.g. \"CREATE TABLE users (id int PRIMARY KEY, email text NOT NULL UNIQUE); CREATE TABLE orders (id int PRIMARY KEY, user_id int NOT NULL REFERENCES users(id));\". Other statements are listed as skipped."
},
"title": {
"type": "string",
"maxLength": 400,
"description": "Title printed on the diagram and used in file names, up to 80 characters, e.g. \"Shop database\"."
},
"dialect": {
"enum": [
"auto",
"postgres",
"mysql",
"sqlite"
],
"type": "string",
"description": "Which SQL quoting and type names to read: auto (default; accepts \"x\", `x` and [x]), postgres, mysql or sqlite. It also sets how names are matched: postgres folds unquoted names to lower case and keeps quoted names exact; the others ignore case. Example: postgres."
},
"page_size": {
"enum": [
"letter",
"a4",
"tabloid"
],
"type": "string",
"description": "PDF page: letter (default), a4 or tabloid (11 x 17 in). Landscape unless portrait needs fewer pages."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"dialect",
"name_rule",
"counts",
"tables",
"relationships",
"issues",
"skipped",
"pdf",
"layout_check",
"cardinality_rules",
"warnings",
"downloads"
],
"properties": {
"pdf": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"shown": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"title": {
"type": "string"
},
"counts": {
"type": "object",
"required": [
"tables",
"columns",
"foreign_keys",
"relationships_drawn",
"skipped_statements",
"errors",
"warnings"
],
"properties": {
"errors": {
"type": "number"
},
"tables": {
"type": "number"
},
"columns": {
"type": "number"
},
"warnings": {
"type": "number"
},
"foreign_keys": {
"type": "number"
},
"skipped_statements": {
"type": "number"
},
"relationships_drawn": {
"type": "number"
}
},
"additionalProperties": false
},
"issues": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"tables": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"dialect": {
"type": "string"
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
},
"svg": {
"type": "string"
},
"json": {
"type": "string"
}
},
"additionalProperties": false
},
"name_rule": {
"type": "string"
},
"layout_check": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"relationships": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"cardinality_rules": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Make ER diagram",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_schema — Check database schema
Use this when the user wants SQL CREATE TABLE statements checked without a drawing, for example "check my schema for broken foreign keys" or "which tables have no primary key". Takes the same DDL text and dialect as make_er_diagram. Returns foreign keys that point to a missing table or column, foreign keys whose referenced columns are not a primary key or UNIQUE, type differences between a foreign key column and the column it references, tables without a primary key, duplicate table and column names (with the name rule used), and the statements it skipped with line numbers. Draws nothing and makes no files. Does not connect to a database or check data.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ddl"
],
"properties": {
"ddl": {
"type": "string",
"maxLength": 400000,
"description": "The SQL DDL text: CREATE TABLE statements with columns, types, NOT NULL, PRIMARY KEY, UNIQUE and REFERENCES / FOREIGN KEY, up to 200,000 characters, e.g. \"CREATE TABLE users (id int PRIMARY KEY, email text NOT NULL UNIQUE); CREATE TABLE orders (id int PRIMARY KEY, user_id int NOT NULL REFERENCES users(id));\". Other statements are listed as skipped."
},
"dialect": {
"enum": [
"auto",
"postgres",
"mysql",
"sqlite"
],
"type": "string",
"description": "Which SQL quoting and type names to read: auto (default; accepts \"x\", `x` and [x]), postgres, mysql or sqlite. It also sets how names are matched: postgres folds unquoted names to lower case and keeps quoted names exact; the others ignore case. Example: postgres."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"dialect",
"name_rule",
"ready",
"counts",
"tables_without_primary_key",
"issues",
"skipped",
"notes",
"limits"
],
"properties": {
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"ready": {
"type": "boolean"
},
"shown": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"counts": {
"type": "object",
"required": [
"tables",
"columns",
"foreign_keys",
"relationships_drawn",
"skipped_statements",
"errors",
"warnings"
],
"properties": {
"errors": {
"type": "number"
},
"tables": {
"type": "number"
},
"columns": {
"type": "number"
},
"warnings": {
"type": "number"
},
"foreign_keys": {
"type": "number"
},
"skipped_statements": {
"type": "number"
},
"relationships_drawn": {
"type": "number"
}
},
"additionalProperties": false
},
"issues": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"limits": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"dialect": {
"type": "string"
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"name_rule": {
"type": "string"
},
"tables_without_primary_key": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"title": "Check database schema",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
er-diagram-widget — Zovo ER Diagram view
Interactive view for Zovo ER Diagram.
ui://widget/er-diagram-v1-1.0.0-46b6114bdb0e38bf25fd3dad5e248670214d783e360555dfa0a076051be59b45.htmler-diagram-widget-legacy — Zovo ER Diagram view (previous versions)
ui://widget/er-diagram-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 930 ms
- 95th percentile latency
- 930 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 930 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-er-diagram-mcp https://er-diagram.zovo.one/mcpCodex
codex mcp add zovo-er-diagram-mcp --url https://er-diagram.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-er-diagram-mcp": {
"url": "https://er-diagram.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-er-diagram-mcp": {
"type": "streamableHttp",
"url": "https://er-diagram.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-er-diagram-mcp": {
"type": "http",
"url": "https://er-diagram.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-er-diagram-mcp https://er-diagram.zovo.one/mcpClaude Desktop
https://er-diagram.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-er-diagram-mcp": {
"serverUrl": "https://er-diagram.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo ER Diagram MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.