mcp-drawio-server
Enables loading a database schema from a MariaDB server using SQLAlchemy reflection, with support for include/exclude table filters.
Enables loading a database schema from a MySQL server using SQLAlchemy reflection, with support for include/exclude table filters.
Enables loading a database schema from a PostgreSQL server using SQLAlchemy reflection, with support for a named schema and include/exclude table filters.
Enables loading a database schema from a SQLite database file using SQLAlchemy reflection, with support for include/exclude table filters.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-drawio-serverReflect the schema from my MySQL database into a draw.io diagram"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP draw.io server
mcp-drawio-server is a local MCP server that turns a relational schema into
an editable entity-relationship diagram in draw.io. It can reflect a live
database, parse SQL DDL, read a YAML or JSON schema specification, or reopen an
existing uncompressed .drawio file. It also exposes granular tools for
changing tables, columns, relations, and layout before saving the diagram.
The schema model is the source of truth. Every save regenerates the complete mxGraph document instead of patching XML cells in place.
Relations use deterministic, obstacle-aware orthogonal routing. Each endpoint
gets a private port, crowded hubs fan out into separate lanes, recursive
relations loop outside their table, and persistent waypoints keep the route
stable when the file is reopened. Adjacent hub ports keep a visible pitch,
terminal stubs cannot backtrack over themselves, and arc jumps make the
remaining crossings explicit. Crow's-foot markers include nullable-FK
optionality (0..1, 0..N, 1, and N).
Requirements and installation
Python 3.14 or newer
draw.io Desktop is optional for generation, but required for interactive viewing and the final compatibility check
Install the locked environment:
git clone https://github.com/marcelovillanuevam-code/MCP-Draw.IO.git
cd MCP-Draw.IO
uv sync --lockedRun the stdio server directly while developing:
uv run --locked --no-sync mcp-drawio-serverThe server communicates over standard input and output, so it normally appears to wait silently when started by hand.
Related MCP server: drawio-mcp-server
Register with Claude Code
Register it as a user-scoped utility so it is available in every project. Use absolute paths because Claude starts the command directly rather than through an interactive shell.
claude mcp add --transport stdio --scope user drawio -- \
/absolute/path/to/uv run \
--project /absolute/path/to/MCP-Draw.IO \
--locked --no-sync \
mcp-drawio-serveruv run --project selects this project's environment without changing the
server process's working directory. This matters because relative output paths
normally resolve from the Claude project that launched the server. Do not
replace it with uv --directory, which changes the working directory to this
repository.
Confirm the registration, then start a new Claude Code session:
claude mcp get drawio
claude mcp listUse --scope local instead if the server should be available only in the
current Claude project.
Configuration and output paths
The only server setting is optional:
MCP_DRAWIO_OUTPUT_DIR=/absolute/path/to/diagramsIt is the base directory for relative .drawio save and open paths. If it is
unset, the process working directory is used. Absolute paths always take
precedence, and a missing .drawio extension is added automatically. The
server creates missing parent directories when it saves.
The project does not load .env files itself; .env.example documents the
variable for shells, process managers, or MCP client configuration. To pin a
single output directory in Claude Code, add the environment setting when
registering the server:
claude mcp add --transport stdio \
-e MCP_DRAWIO_OUTPUT_DIR=/absolute/path/to/diagrams \
--scope user drawio -- \
/absolute/path/to/uv run \
--project /absolute/path/to/MCP-Draw.IO \
--locked --no-sync \
mcp-drawio-serverNamed diagrams live only in the server process. Save important work before the
session ends, and use open_diagram to restore it in a later session.
Input formats
Live database
load_database_schema uses SQLAlchemy reflection. It supports a named schema
and include/exclude table filters. SQLite works without an extra package; other
engines require a DBAPI driver.
Database | Example URL | Driver command |
SQLite |
| Built in |
PostgreSQL |
|
|
MySQL/MariaDB |
|
|
Other SQLAlchemy dialects may work after their driver is installed, but are not
part of the base environment. Run driver installation commands from the
project root so pyproject.toml and uv.lock stay in sync.
SQL DDL
load_ddl_schema accepts SQL text or a file path. Pass a sqlglot dialect such
as postgres, mysql, sqlite, or tsql when the syntax is dialect-specific.
Only CREATE TABLE statements contribute to the diagram; unrelated statements
are skipped. Foreign keys to tables outside a partial DDL input are omitted.
Constraints must appear inside CREATE TABLE; dump-style ALTER TABLE ... ADD CONSTRAINT statements and standalone CREATE UNIQUE INDEX statements are not
currently imported by the DDL parser.
YAML or JSON specification
load_spec_schema accepts text or a file path. JSON is parsed as a subset of
YAML. Both expanded objects and concise column/relation forms are supported:
name: shop
tables:
customer:
columns:
- "customer_id: INTEGER pk"
- "email: VARCHAR(255) not null unique"
orders:
columns:
- "order_id: INTEGER pk"
- "customer_id: INTEGER required"
relations:
- orders.customer_id -> customer.customer_idColumn shorthand recognizes pk/primary key, unique/uq, not null/
not_null/notnull/required, and null/nullable. A <table>_id column
may infer a relation to a matching table with a single-column primary key when
no explicit relation exists.
Composite unique keys use the expanded table form and participate in cardinality inference:
tables:
enrollment:
columns:
- "student_id: INTEGER"
- "course_id: INTEGER"
unique_keys:
- [student_id, course_id]draw.io XML
open_diagram reads uncompressed .drawio or .xml mxGraph documents.
Generated files use draw.io's native table, table-row, and ERD edge shapes.
MCP tools
The server exposes 16 tools. A loader creates a named diagram or replaces the schema of an existing diagram with that name.
Tool | Purpose |
| Reflect selected tables from a live database. |
| Load |
| Load an inline YAML/JSON specification or one file. |
| Open an existing uncompressed draw.io document. |
| List the diagrams currently held in memory. |
| Summarize tables, primary keys, and relations. |
| Add a table; |
| Remove a table and relations that touch it. |
| Add one column from shorthand. |
| Remove a column and invalidated relations. |
| Add a relation between endpoints such as |
| Remove the relation matching the two endpoints. |
| Set a table's draw.io coordinates. |
| Recompute the complete automatic layout. |
| Regenerate and save |
| Return the current schema as YAML or JSON. |
Composite endpoints use parentheses, for example
order_line.(order_id,line_no). Explicit cardinalities are one-to-one,
one-to-many, and many-to-many; when omitted, the server infers cardinality
from keys where possible.
The MCP server produces .drawio/.xml and YAML/JSON text. It does not export
PNG, SVG, or PDF itself; use draw.io Desktop or its CLI for those formats.
Security
Treat a database URL as a secret. Do not commit it, paste it into issue reports, or store it in
.env.example; MCP tool calls and client logs may retain arguments.Percent-encode reserved characters in usernames and passwords, and quote a URL when passing it through a shell. Prefer short-lived credentials so an accidentally retained URL has limited value.
Use a dedicated, least-privilege, read-only database account and encrypted transport for remote databases. Reflection reads metadata, but the database still receives a real connection from this process.
Schema names, table names, column names, and comments returned by reflection become available to the MCP client and model. Do not introspect sensitive production metadata unless that disclosure is acceptable.
File tools can read or write any path permitted to the server process. There is no built-in path allowlist, so use a restricted OS account or container when processing untrusted requests.
DDL and YAML/JSON inputs are parsed locally and are not executed against a database.
Round-trip limitations
Compressed draw.io documents cannot be opened. In draw.io Desktop, use File > Properties, clear Compressed, and save again.
Multi-page files are rejected rather than silently dropping pages. Save the ERD page as a separate uncompressed file before calling
open_diagram.Generated files contain a hidden
mcp-schema-metadataJSON cell. The server prefers its canonical schema on reopen, while current visible table geometry wins over stale coordinates in the hidden payload.Manual edits to visible table shapes do not update the hidden metadata. Moves and resizes are recovered from visible geometry, but manually renamed columns, added rows, or new relations can be ignored the next time the MCP server opens the file. Make structural changes through the MCP tools.
Manually edited edge ports and waypoints are intentionally regenerated from the schema and current table positions on the next save. Table geometry is preserved; route geometry is deterministic rather than a round-trip input.
A foreign or metadata-free draw.io document is parsed from its visible native table shapes on a best-effort basis. Names, types, common key markers, and row-anchored relations can be recovered. A table-to-table edge without MCP endpoint attributes is skipped because its columns cannot be inferred safely. Comments, arbitrary styling, some constraint details, and complex edge semantics may be lost. The next save regenerates the document in the server's standard style.
The router separates shared lanes and avoids table interiors, but a dense ERD can still contain line crossings. Crossings use arc jumps, and relation labels have opaque backgrounds. Labels can be dragged in draw.io when final presentation polish matters.
Tests
Run the full suite from any directory:
uv run --project /absolute/path/to/MCP-Draw.IO \
--locked --no-sync pytestThe suite should cover all input sources, composite-primary-key cardinality, granular tools, save/open behavior, and draw.io round-trips both with and without embedded metadata.
The real stdio subprocess test is opt-in because restricted sandboxes can block AnyIO worker threads used by the SDK transport:
MCP_STDIO_INTEGRATION=1 uv run --locked --no-sync \
pytest tests/test_stdio.pyDesktop validation
XML parsing and server round-trip tests do not prove that draw.io Desktop lays
out and edits every native shape correctly. Before a release, generate a
representative ERD containing PK, FK, combined PF, unique, nullable,
one-to-one, one-to-many, and composite-key cases.
First exercise the real Desktop renderer non-interactively:
drawio --export --format png --border 20 \
--output validation.png validation.drawioOn Windows PowerShell, replace drawio with the full path to draw.io.exe.
Then open validation.drawio in the desktop application and confirm:
table headers and rows render without clipping or overlap;
PK,FK,PF, andUmarkers are visible;ERD endpoints and cardinality markers are correct;
single-column relations attach to their column rows;
every relationship can be traced independently from endpoint to endpoint;
parallel relationships use separate ports and lanes rather than sharing a segment;
recursive relationships loop outside the table;
crossings have visible arc jumps and no route crosses a table interior;
tables can be selected, moved, resized, collapsed, and expanded;
the hidden metadata cell is not visible; and
saving with compression disabled produces a file
open_diagramcan reopen.
Available Tools
16 toolsadd_columnB
Add one column using shorthand such as email: VARCHAR(255) unique.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| column | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a write operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds useful context about the shorthand format, but does not disclose side effects, prerequisites, or behavior on existing columns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the core action and includes a concrete example. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool, the description is adequate but lacks context about prerequisites (e.g., table must exist) and the effects of the operation on the diagram. The output schema exists but the description doesn't mention what happens after adding a column.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It explains the 'column' parameter via the shorthand example, but provides no meaning for 'diagram' or 'table'. Only one of three parameters is clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Add one column') and provides a syntax example, distinguishing it from sibling tools like add_table and remove_column. The scope is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as add_table or remove_column. The description only states what it does, leaving the agent to infer appropriate usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_relationB
Add a validated relation from child columns to parent columns.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| source | Yes | ||
| target | Yes | ||
| diagram | Yes | ||
| cardinality | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The word 'validated' adds a behavioral trait beyond the annotations, implying that the relation is checked before being added. However, it doesn't disclose what validation entails, failure behavior, or whether the operation is reversible. Annotations indicate a write operation (readOnlyHint=false), so no contradiction, but the description adds minimal context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the action and resource. Every word earns its place, with no extraneous detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters (3 required) and no schema coverage, the description is incomplete. It lacks usage context, details on optional parameters like cardinality or name, and any behavioral information about validation. The output schema exists but the description does not hint at it. Sibling tools and annotations provide some context, but the description itself leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden. It adds meaning to 'source' and 'target' as 'child columns' and 'parent columns', but provides no semantics for 'name', 'diagram', or 'cardinality'. The directionality helps, but other parameters remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add') and resource ('relation') with a clear direction ('from child columns to parent columns'). It distinguishes itself from sibling tools like add_table and add_column by focusing on relations, though it doesn't explicitly contrast with remove_relation or other relation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The context signals list many sibling tools (add_table, add_column, remove_relation), but the description does not mention any when/when-not scenarios or alternatives. Usage is only implied by the action of adding a relation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_tableA
Add a table using columns such as id: INTEGER pk.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| columns | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the column syntax example, which is useful behavioral context. Annotations already indicate a non-read-only, non-idempotent, non-destructive mutation, but the description doesn't explain what happens on duplicate tables or validate column formats. It doesn't contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one efficient sentence that front-loads the action. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter tool, the description is adequate, and the output schema reduces the need to explain return values. However, it lacks explicit guidance on parameter semantics for all fields and doesn't mention edge cases like duplicate table names or column format constraints beyond one example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With no parameter descriptions in the schema, the description adds meaning to the `columns` parameter via the `id: INTEGER pk` example, clarifying the expected string format. The `diagram` and `table` parameters are left to their self-explanatory names, but the example still provides real value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies a concrete action ('Add a table') and identifies the target resource. It distinguishes itself from sibling tools like add_column or remove_table by focusing on table creation, and even provides a column format example.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies use when adding a table to a diagram but gives no explicit when-to-use/when-not-to-use guidance or alternatives. There's no mention of using add_column instead for modifying existing tables, so the guidance is merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_diagramBRead-onlyIdempotent
Describe the tables, keys, and relations in an open diagram.
| Name | Required | Description | Default |
|---|---|---|---|
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds the context that it operates on an open diagram, but does not disclose failure modes or what happens if no diagram is open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence that front-loads the action and content. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with an output schema, the description is adequate but misses usage guidelines and parameter semantics, leaving some gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'diagram' parameter is not explained beyond its name. With 0% schema coverage, the description should clarify what identifies the diagram (ID, name, etc.), but it doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool describes tables, keys, and relations in an open diagram. This distinguishes it from sibling tools like load_database_schema or open_diagram, using a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The only hint is 'open diagram,' but it doesn't explicitly say to call open_diagram first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_specARead-onlyIdempotent
Export an open diagram's canonical schema as YAML or JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | yaml | |
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds the 'open diagram' state dependency and 'canonical schema' nuance, but does not disclose behavior such as error handling for missing/invalid diagram references or whether the export returns a string vs. triggers a file download. Since annotations cover the main safety aspects, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-constructed sentence that packs the essential information (verb, resource, output formats) with no filler. It is immediately understandable and front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple with only two parameters and an output schema, so the description covers the core purpose and the main prerequisite. The presence of an output schema means return values are structured, reducing the need for format details. Missing is a brief note on how to identify an 'open diagram' or error behavior, but overall the description is complete enough for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 0% of parameters, so the description must compensate. It indirectly explains the 'format' parameter by mentioning 'YAML or JSON', and 'diagram' by referencing 'an open diagram'. However, it doesn't specify how to reference the diagram (name, ID), what the default format is, or any value constraints beyond the enum. The compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Export' and the resource 'an open diagram's canonical schema', with output formats 'YAML or JSON'. This distinguishes it well from siblings like save_diagram (which saves diagram state) or describe_diagram (which likely returns a human-readable summary).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'an open diagram' implies the prerequisite that a diagram must be currently open, providing clear context for when this tool is applicable. It doesn't explicitly mention alternatives or when not to use it, but the description's clarity makes the use case obvious compared to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_diagramsARead-onlyIdempotent
List every diagram currently open in this server process.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe, read-only nature is covered. The description adds valuable behavioral context: it lists only 'currently open' diagrams within 'this server process', clarifying the scope and timing of the result beyond the annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. Every phrase ('every diagram', 'currently open', 'in this server process') contributes meaning and is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, an output schema is present (so return format need not be described), and annotations cover safety/idempotency, the description is fully sufficient. It clearly states what is listed and the context of 'open in this server process'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing to document; baseline for 0 parameters is 4. The description mentions the scope of the listing (open diagrams) but adds no parameter-level details since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource 'diagrams' and scoping phrase 'currently open in this server process.' It immediately distinguishes from sibling tools like open_diagram, describe_diagram, or save_diagram, which involve different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the use case (to see all open diagrams) but provides no explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools. The context is clear but without exclusions or alternatives, it remains merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_database_schemaC
Load a live relational database schema into a named diagram.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| schema | No | ||
| diagram | Yes | ||
| exclude_tables | No | ||
| include_tables | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not explain what happens when the diagram already exists or whether tables are merged or replaced. The openWorldHint and idempotentHint are not addressed, leaving behavioral expectations unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no unnecessary words. It front-loads the action and target, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema and annotations, the description is too sparse for a tool with five parameters and filtering options. It omits critical context about how tables are selected, whether the diagram is overwritten, and what the output represents, making it incomplete for reliable tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries full responsibility for explaining parameters, but it only hints at 'live relational database schema' and 'named diagram'. No detail is given for url, schema, exclude_tables, or include_tables, leaving the agent without guidance on how to fill these fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: loading a live relational database schema into a named diagram. The phrase 'live relational database schema' distinguishes it from sibling tools like load_ddl_schema and load_spec_schema, which import from static files or specifications.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as needing a database URL or credentials, nor any indication of when load_ddl_schema or load_spec_schema would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_ddl_schemaB
Load CREATE TABLE statements supplied inline or from a UTF-8 file.
| Name | Required | Description | Default |
|---|---|---|---|
| ddl | No | ||
| path | No | ||
| diagram | Yes | ||
| dialect | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, non-destructive operation, and the description adds the UTF-8 file constraint and inline source. However, it does not disclose whether loading appends, replaces, or merges with the target diagram, nor does it explain the dialect parameter's effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. The key verb and resource are front-loaded, making it easy to scan and immediately understand the core operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and 0% schema description coverage, a one-sentence description is insufficient. It omits the role of diagram, how dialect affects parsing, and the overall effect on the target diagram, leaving important usage details ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for undocumented parameters. It implicitly covers ddl and path via 'inline or from a UTF-8 file', but leaves the required diagram parameter and dialect parameter unexplained, relying on the schema alone for their meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: loading CREATE TABLE statements from inline text (ddl) or a UTF-8 file (path). It distinguishes this tool from siblings like load_database_schema and load_spec_schema by naming DDL-specific input and source options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool over alternatives such as load_database_schema or load_spec_schema. The description only states what the tool does, not in which scenario it should be selected, and provides no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_spec_schemaC
Load a YAML or JSON schema spec supplied inline or from a UTF-8 file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| spec | No | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false (readOnlyHint=false, etc.), providing no useful safety or behavioral cues. The description adds no details about side effects, permissions, error behavior, or whether loading writes to storage. 'Load' is ambiguous and could imply a read or a mutation, so the description fails to disclose expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It clearly communicates the core action and format, but the brevity sacrifices necessary detail. It is appropriately concise for a simple description, though under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has three parameters (with one required) and an output schema, the description is incomplete. It fails to explain the purpose of the 'diagram' parameter, how the schema relates to the diagram, or the return format. The output schema exists but doesn't help because no parameter semantics are explained. The description alone is insufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It hints at 'inline' (spec) and 'file' (path) but does not explicitly name or explain these parameters, and it entirely omits the required 'diagram' parameter. This leaves a significant gap in understanding what each parameter does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool loads a YAML or JSON schema spec, either inline or from a file. This distinguishes it from sibling tools like load_database_schema and load_ddl_schema by format and source. However, the relationship to the required 'diagram' parameter is not mentioned, so it's not fully clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating the supported formats (YAML/JSON) and sources (inline/file), which hints at when to use this tool over alternatives. However, it does not explicitly say 'use when you have a YAML/JSON spec' or contrast with sibling tools, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_tableA
Move a table to finite x/y coordinates without changing its size.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| table | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only and non-destructive behavior. The description adds a key behavioral trait: size is preserved. It does not disclose other traits like coordinate interpretation (absolute vs relative) or effects on relationships, but this extra piece is useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and object, and includes a meaningful qualifier. No wasted words; every part adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is mostly complete for a move operation. It could mention coordinate system or error conditions, but these are not critical. Overall, it provides enough context for a straightforward mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning to x and y as 'finite coordinates' and clarifies size is unchanged. However, it does not explicitly define the 'diagram' or 'table' parameters beyond their names, relying on context. This is adequate but not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (move), the resource (table), and the target (finite x/y coordinates), with an explicit scope qualifier (without changing its size). This distinguishes it from sibling tools like add_table, remove_table, and relayout_diagram.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you want to manually position a table. However, it does not provide explicit when-to-use vs alternatives, nor does it mention exclusions or prerequisites (e.g., table must exist). Context is clear but not fully elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_diagramC
Open an existing uncompressed .drawio or XML diagram.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| diagram | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false (readOnlyHint=false, idempotentHint=false, destructiveHint=false), providing no safety profile. The description adds no behavioral context: it does not state whether opening a diagram loads it into a working session, replaces the current diagram, validates the XML, or has side effects. The agent is left guessing about state changes and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence with no wasted words, which is praiseworthy. However, it is under-specified given the tool's relevance to diagram editing workflows, and the lack of detail makes it feel more like a minimal definition than a helpful guide.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, but the description fails to explain important contextual aspects: what 'open' does to the current workspace, how the 'diagram' parameter is used, and how this tool fits among list_diagrams, describe_diagram, and the editing tools. The minimal description is insufficient for an agent to invoke it correctly without additional assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain any parameters. While 'path' is somewhat self-explanatory by name, the optional 'diagram' parameter is completely undefined and its purpose (e.g., inline XML content) is unclear. The description adds no meaning beyond the bare schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens an existing uncompressed .drawio or XML diagram, specifying the resource and action. However, it does not differentiate 'open' from sibling tools like describe_diagram, which may also read a diagram, so the purpose is clear but not fully distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use open_diagram versus alternatives such as describe_diagram or load_database_schema. The description only mentions 'existing' diagrams, implying the file must already exist, but gives no context about prerequisites, workflow position, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relayout_diagramB
Replace all table positions with a fresh automatic layout.
| Name | Required | Description | Default |
|---|---|---|---|
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that the operation affects all table positions, which is useful beyond the annotations. However, it does not disclose whether the new layout is reversible, whether manual adjustments are lost, or any other side effects. Annotations indicate it is a write operation (readOnlyHint=false) and not destructive (destructiveHint=false), but the text could be more explicit about impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core action without wasted words. It is appropriately sized for the simplicity of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too brief to be fully self-contained. It fails to explain the 'diagram' parameter, lacks usage context, and does not describe what a 'fresh automatic layout' entails. Although an output schema exists, the description does not compensate for the missing parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single parameter 'diagram' with no description, and the description provides no explanation of what this parameter represents or how to specify a diagram. With 0% schema description coverage, the description should compensate, but it does not, leaving the agent to guess the expected value (e.g., ID, name, object).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: replacing all table positions with a fresh automatic layout. The verb 'replace' and resource 'table positions' are specific, and it is distinct from siblings like move_table.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as move_table for manual positioning. There is no mention of prerequisites, side effects, or scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_columnADestructive
Remove a column and cascade removal to relations that use it.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| column | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral transparency by disclosing the cascade removal to relations, which is not already captured by the destructiveHint annotation. This informs the agent of broader side effects beyond just deleting the column.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action and immediately followed by the important cascade detail. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential behavior (removal + cascade) and is complemented by destructiveHint and the presence of an output schema. It is mostly complete for a simple removal tool, though it could mention irreversibility, but the annotation already implies destructive nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has three required parameters (table, column, diagram) with zero description coverage. The tool description does not explain or map these parameters, leaving the agent to rely solely on names. Since schema coverage is 0%, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove a column') and adds the distinctive cascade behavior to relations. It distinguishes itself from sibling tools like remove_table and remove_relation by specifying the resource type (column) and the cascading side effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when removing a column and needing relations cleaned up automatically. It provides clear context but does not explicitly name alternatives or excluded scenarios, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_relationADestructive
Remove the relation matching validated source and target endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| target | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description doesn't need to restate destructiveness. It adds the 'matching validated source and target endpoints' specificity, which clarifies what gets removed, but it does not disclose side effects, error conditions, or whether the operation is reversible. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the primary verb and object. No redundant information or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple 3-parameter schema, the presence of an output schema, and annotations covering safety, the description carries enough information to understand the core operation and its matching logic. It could be improved by specifying what happens if no matching relation exists or whether multiple matches are possible, but the current level is adequate for a straightforward removal tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero descriptions for the three required parameters, and the description only indirectly indicates that source and target are endpoints. 'Diagram' is not explained at all. The description provides minimal semantic value beyond the schema, leaving the agent to guess parameter formats and roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Remove' targeting a 'relation', clearly distinguishing it from sibling tools like add_relation, remove_table, and remove_column. It also names the key matching criteria (validated source and target endpoints), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a relation matching the given source and target endpoints needs to be removed, but it provides no explicit guidance on when to use this tool versus alternatives, nor does it mention any preconditions or exclusions. It is minimal but not misleading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_tableADestructive
Remove a table and every relation connected to it.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds a meaningful behavioral detail: the tool also removes every relation connected to the table, which goes beyond the destructive annotation. It does not discuss reversibility or prerequisites, but the annotation covers the core destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the action and scope, containing no fluff. It is appropriately sized for a simple delegation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with strong annotations and an output schema, the description adequately conveys the essential effect (cascade removal of relations). It omits details like confirmation prompts or diagram references, but these are not critical given the annotations and schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides two parameters (table, diagram) with zero description coverage. The description implicitly clarifies 'table' as the entity to remove, but says nothing about 'diagram' or how the parameters relate. This leaves ambiguity about the required context for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Remove' with the resource 'table', and clarifies the scope by adding 'every relation connected to it'. This directly distinguishes it from sibling tools like remove_relation and remove_column, making the tool's purpose unequivocal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for complete removal of a table along with its relations, but it does not explicitly state when to use this tool over alternatives or mention any exclusions. An agent must infer the discriminator from the phrase 'every relation connected to it'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_diagramCDestructive
Regenerate and save a diagram to a .drawio or XML file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| diagram | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior. The description adds the file type context (.drawio/XML) but does not disclose whether existing files are overwritten, what 'regenerate' implies, or side effects of saving. This adds some value beyond annotations but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence and is appropriately brief, but it is vague and could include more details without losing conciseness. It does not fully exploit its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present but no description of it, and only a terse description of the tool's behavior, the agent is left with unanswered questions: what does the output contain, what happens if 'path' is null, and what does 'regenerate' mean? Not complete for a destructive save operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description provides no explanation of the 'path' or 'diagram' parameters. It only mentions output file formats, which is weak compensation for the lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('save') and the resource ('diagram'), and specifies the output formats (.drawio or XML). It distinguishes from most siblings by focusing on saving to a file, though it does not explicitly differentiate from 'export_spec'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'export_spec' or 'open_diagram'. The description only states what it does, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v0.1.0- First observed
add_column - First observed
add_relation - First observed
add_table - First observed
describe_diagram - First observed
export_spec - First observed
list_diagrams - First observed
load_database_schema - First observed
load_ddl_schema - First observed
load_spec_schema - First observed
move_table - First observed
open_diagram - First observed
relayout_diagram - First observed
remove_column - First observed
remove_relation - First observed
remove_table - First observed
save_diagram
TDQS
Each tool targets a distinct action and resource: loading schemas from different sources, opening/listing/describing diagrams, and CRUD operations for tables, columns, and relations. Manual positioning and automatic relayout are clearly separated, so there is no ambiguity between tools.
All tool names follow a consistent verb_noun pattern in lowercase snake_case (e.g., load_database_schema, add_table, remove_relation). Minor pluralization in list_diagrams is the only deviation, and it does not affect the predictable pattern.
At 16 tools, the set is slightly above the typical 3-15 range, but each tool serves a distinct and necessary purpose in the schema-diagram workflow. The count feels well-scoped without redundant tools, though it could be tightened slightly.
The server covers the full lifecycle: loading/opening diagrams, listing/describing them, adding/removing tables/columns/relations, positioning, saving, and exporting. Minor gaps exist, such as no update/rename operations for tables or columns and no explicit close-diagram tool, but these are workable around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI-powered ERD design tool. Create and manage database schemas using DBML with real-time canvas.
Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.
Create diagrams in chat, rendered as live interactive draw.io diagrams. 10,000+ searchable shapes.
Generate, edit, and manage Eraser diagrams and docs with AI.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to create and edit draw.io diagrams programmatically, supporting a wide range of diagram types and styles.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables creating and editing draw.io diagrams from structured descriptions, rendering them as interactive inline SVGs, and providing access to the full draw.io editor for further modification and export.734MIT
- AlicenseAqualityDmaintenanceParses Mermaid ER diagrams to create PostgreSQL tables and automatically generates REST and GraphQL CRUD APIs.12MIT
- AlicenseNot gradedqualityCmaintenanceEnables creating and editing Draw.io diagrams via natural language, supporting shapes, connectors, and multi-line text.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcelovillanuevam-code/MCP-Draw.IO'
If you have feedback or need assistance with the MCP directory API, please join our Discord server