Turns a short text description of classes into a UML class diagram you can print.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
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".
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http class-diagram https://class-diagram.zovo.one/mcp
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.
| Argument | Type | Description |
|---|---|---|
| source* | string | 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": [
"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\"."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| title | string | Title printed on the diagram and used in file names, up to 80 characters, e.g. "Shop domain model". |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| source* | string | 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 | string | 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": [
"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."
}
}
}