Koskamo

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.

Zovo Class Diagram MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://class-diagram.zovo.one/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

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

Community listingRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Zovo Class Diagram draws a UML class diagram from a short text grammar (classes, interfaces, abstract classes, enums, fields, methods and six relation kinds with multiplicities and labels), with PDF, SVG, CSV and JSON downloads. Use make_class_diagram to draw it and check_class_diagram to review the text without drawing (syntax problems with line numbers, relations to classes that are not declared, duplicate members, inheritance cycles). A line that does not fit the grammar is refused with its line number. It does not read source code files or run code. Files of large diagrams are kept for 1 hour so the download links work, then deleted.

Tools

2 advertised

make_class_diagram — Make class diagram
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

make_class_diagram input schema
{
  "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."
    }
  }
}
make_class_diagram output schema
{
  "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
}
make_class_diagram annotations
{
  "title": "Make class diagram",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_class_diagram — Check class diagram text
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_class_diagram input schema
{
  "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\"."
    }
  }
}
check_class_diagram output schema
{
  "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
}
check_class_diagram annotations
{
  "title": "Check class diagram text",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

class-diagram-widget — Zovo Class Diagram view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo Class Diagram.

class-diagram-widget URI
ui://widget/class-diagram-v1-1.0.0-0a78ba06033c1db0ebb53944f84ed3e8df8c01effdca6b6c8c4f56b05e6052fc.html

MIME type: text/html;profile=mcp-app

class-diagram-widget-legacy — Zovo Class Diagram view (previous versions)

Advertised by the server during the last successful anonymous check.

class-diagram-widget-legacy URI template
ui://widget/class-diagram-{version}.html

MIME type: text/html;profile=mcp-app

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-class-diagram-mcp https://class-diagram.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-class-diagram-mcp --url https://class-diagram.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-class-diagram-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-class-diagram-mcp": {
      "url": "https://class-diagram.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-class-diagram-mcp": {
      "type": "streamableHttp",
      "url": "https://class-diagram.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-class-diagram-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-class-diagram-mcp": {
      "type": "http",
      "url": "https://class-diagram.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-class-diagram-mcp https://class-diagram.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://class-diagram.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.