Zovo Class Diagram MCP
Generates UML class diagrams from plain text descriptions, supporting fields, methods, and six relation kinds. Outputs include PDF, SVG, CSV, and JSON models, with grammar validation and geometry checks for overlaps.
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://class-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
- Generate UML class diagrams from text
- Check text for inheritance cycles
- Draw domain models as PDF
- Export model to JSON or CSV
Source and maintenance
Protocol and capabilities
- Server
- class-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_class_diagram — Make class diagram
Use this when the user wants a UML class diagram drawn, for example "draw a class diagram of these classes" or "make a PDF of my domain model with inheritance and composition". Takes the diagram text in a strict grammar, a page size and an optional title. Grammar: One item per line. Classes: "class Name {", "interface Name {", "abstract class Name {" or "enum Name {", then one member per line, then "}" on its own line ("class Name" alone declares an empty class; a stereotype may follow the name, e.g. "class Name <<entity>> {"). Fields: "+name: Type". Methods: "+name(arg: Type, other: Type): ReturnType". Visibility + public, - private, # protected, ~ package (optional). "{static}" or "{abstract}" before the name marks static or abstract members. Enum constants: one NAME per line. Relations: "Animal <|-- Dog" (inheritance), "Shape <|.. Circle" (realization), "Car *-- Wheel" (composition), "Team o-- Player" (aggregation), "Customer --> Order" (association), "Report ..> Printer" (dependency), "A -- B" (link); arrows may point either way (Dog --|> Animal). Optional multiplicities in quotes next to each class and a label after a colon: Customer "1" --> "0..*" Order : places. "%%" starts a comment line. Returns counts, the relations in words, model warnings, a geometry check (overlapping classes, lines crossing a class, end markers by relation kind), the PDF page count and smallest text size, an interactive diagram, and PDF, SVG, CSV and JSON downloads. Refuses text that does not fit the grammar, naming the line; refuses relations to classes that are not declared, duplicate members and inheritance cycles; refuses a class whose relation line ends do not fit across one page (each end has its own place on the box edge; about 50 ends on one edge on Letter, more on Tabloid), naming the class. Up to 60 classes and 200 relations. Does not read source code files. Download links of large diagrams expire after about 1 hour.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"source"
],
"properties": {
"title": {
"type": "string",
"maxLength": 400,
"description": "Title printed on the diagram and used in file names, up to 80 characters, e.g. \"Shop domain model\"."
},
"source": {
"type": "string",
"maxLength": 400000,
"description": "The class diagram text in this grammar, up to 100,000 characters. One item per line. Classes: \"class Name {\", \"interface Name {\", \"abstract class Name {\" or \"enum Name {\", then one member per line, then \"}\" on its own line (\"class Name\" alone declares an empty class; a stereotype may follow the name, e.g. \"class Name <<entity>> {\"). Fields: \"+name: Type\". Methods: \"+name(arg: Type, other: Type): ReturnType\". Visibility + public, - private, # protected, ~ package (optional). \"{static}\" or \"{abstract}\" before the name marks static or abstract members. Enum constants: one NAME per line. Relations: \"Animal <|-- Dog\" (inheritance), \"Shape <|.. Circle\" (realization), \"Car *-- Wheel\" (composition), \"Team o-- Player\" (aggregation), \"Customer --> Order\" (association), \"Report ..> Printer\" (dependency), \"A -- B\" (link); arrows may point either way (Dog --|> Animal). Optional multiplicities in quotes next to each class and a label after a colon: Customer \"1\" --> \"0..*\" Order : places. \"%%\" starts a comment line. Example: \"class Customer {\\n+name: String\\n+orders(): List<Order>\\n}\\nclass Order {\\n-total: Decimal\\n}\\nCustomer \\\"1\\\" --> \\\"*\\\" Order : places\"."
},
"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",
"counts",
"relations_by_kind",
"classes",
"relations",
"warnings_found",
"pdf",
"layout_check",
"notation",
"notes",
"downloads"
],
"properties": {
"pdf": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"shown": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"title": {
"type": "string"
},
"counts": {
"type": "object",
"required": [
"classes",
"interfaces",
"abstract_classes",
"enums",
"members",
"fields",
"methods",
"constants",
"relations",
"errors",
"warnings"
],
"properties": {
"enums": {
"type": "number"
},
"errors": {
"type": "number"
},
"fields": {
"type": "number"
},
"classes": {
"type": "number"
},
"members": {
"type": "number"
},
"methods": {
"type": "number"
},
"warnings": {
"type": "number"
},
"constants": {
"type": "number"
},
"relations": {
"type": "number"
},
"interfaces": {
"type": "number"
},
"abstract_classes": {
"type": "number"
}
},
"additionalProperties": false
},
"classes": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"notation": {
"type": "string"
},
"downloads": {
"type": "object",
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
},
"svg": {
"type": "string"
},
"json": {
"type": "string"
}
},
"additionalProperties": false
},
"relations": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"layout_check": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"warnings_found": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"relations_by_kind": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"additionalProperties": false
}{
"title": "Make class diagram",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_class_diagram — Check class diagram text
Use this when the user wants class diagram text checked without a drawing, for example "check my class diagram for errors" or "are there inheritance cycles in this model". Takes the same text as make_class_diagram. Returns the syntax problems with their line numbers, relations to classes that are not declared, duplicate classes and members, inheritance cycles named class by class, and model warnings (abstract members in a concrete class, a class that inherits from an interface, realization of a class that is not an interface, repeated relations). Draws nothing and makes no files. Does not read source code files.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"source"
],
"properties": {
"source": {
"type": "string",
"maxLength": 400000,
"description": "The class diagram text in this grammar, up to 100,000 characters. One item per line. Classes: \"class Name {\", \"interface Name {\", \"abstract class Name {\" or \"enum Name {\", then one member per line, then \"}\" on its own line (\"class Name\" alone declares an empty class; a stereotype may follow the name, e.g. \"class Name <<entity>> {\"). Fields: \"+name: Type\". Methods: \"+name(arg: Type, other: Type): ReturnType\". Visibility + public, - private, # protected, ~ package (optional). \"{static}\" or \"{abstract}\" before the name marks static or abstract members. Enum constants: one NAME per line. Relations: \"Animal <|-- Dog\" (inheritance), \"Shape <|.. Circle\" (realization), \"Car *-- Wheel\" (composition), \"Team o-- Player\" (aggregation), \"Customer --> Order\" (association), \"Report ..> Printer\" (dependency), \"A -- B\" (link); arrows may point either way (Dog --|> Animal). Optional multiplicities in quotes next to each class and a label after a colon: Customer \"1\" --> \"0..*\" Order : places. \"%%\" starts a comment line. Example: \"class Customer {\\n+name: String\\n+orders(): List<Order>\\n}\\nclass Order {\\n-total: Decimal\\n}\\nCustomer \\\"1\\\" --> \\\"*\\\" Order : places\"."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"ready",
"counts",
"relations_by_kind",
"errors",
"warnings_found",
"inheritance_cycles",
"unknown_classes",
"duplicate_members",
"limits",
"relation_lines"
],
"properties": {
"ready": {
"type": "boolean"
},
"shown": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"counts": {
"type": "object",
"required": [
"classes",
"interfaces",
"abstract_classes",
"enums",
"members",
"fields",
"methods",
"constants",
"relations",
"errors",
"warnings"
],
"properties": {
"enums": {
"type": "number"
},
"errors": {
"type": "number"
},
"fields": {
"type": "number"
},
"classes": {
"type": "number"
},
"members": {
"type": "number"
},
"methods": {
"type": "number"
},
"warnings": {
"type": "number"
},
"constants": {
"type": "number"
},
"relations": {
"type": "number"
},
"interfaces": {
"type": "number"
},
"abstract_classes": {
"type": "number"
}
},
"additionalProperties": false
},
"errors": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"limits": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"relation_lines": {
"type": "object",
"required": [
"written",
"read",
"refused",
"refused_lines"
],
"properties": {
"read": {
"type": "number"
},
"refused": {
"type": "number"
},
"written": {
"type": "number"
},
"refused_lines": {
"type": "array",
"items": {
"type": "number"
}
}
},
"additionalProperties": false
},
"warnings_found": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"unknown_classes": {
"type": "array",
"items": {
"type": "string"
}
},
"duplicate_members": {
"type": "array",
"items": {
"type": "string"
}
},
"relations_by_kind": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"inheritance_cycles": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}{
"title": "Check class diagram text",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
class-diagram-widget — Zovo Class Diagram view
Interactive view for Zovo Class Diagram.
ui://widget/class-diagram-v1-1.0.0-0a78ba06033c1db0ebb53944f84ed3e8df8c01effdca6b6c8c4f56b05e6052fc.htmlclass-diagram-widget-legacy — Zovo Class Diagram view (previous versions)
ui://widget/class-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
- 615 ms
- 95th percentile latency
- 615 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 615 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-class-diagram-mcp https://class-diagram.zovo.one/mcpCodex
codex mcp add zovo-class-diagram-mcp --url https://class-diagram.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-class-diagram-mcp": {
"url": "https://class-diagram.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-class-diagram-mcp": {
"type": "streamableHttp",
"url": "https://class-diagram.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-class-diagram-mcp": {
"type": "http",
"url": "https://class-diagram.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-class-diagram-mcp https://class-diagram.zovo.one/mcpClaude Desktop
https://class-diagram.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-class-diagram-mcp": {
"serverUrl": "https://class-diagram.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Class Diagram MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.