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., "@C++ UML Class Diagram Generatorgenerate a UML diagram from my C++ project in /home/user/projects/game-engine"
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.
C++ UML Class Diagram Generator
A powerful Model Context Protocol (MCP) server that recursively analyzes C++ source and header files, extracts class definitions, inheritance relationships, and member information, then generates comprehensive UML class diagrams in PlantUML format.
Features
π Multi-format C++ file support: .cpp, .hpp, .h, .cc, .cxx files
ποΈ Class & struct extraction: Automatically detects class/struct definitions
π Inheritance mapping: Captures inheritance relationships and generates proper UML arrows
ποΈ Member visibility: Handles public, private, and protected member access levels
π Directory scanning: Recursively processes entire project folders
π Content-based processing: Generate UML from provided file contents directly
π‘οΈ Error handling: Robust error handling with diagnostic UML output
π MCP server support: Works as both HTTP and stdio MCP server
π³ Docker ready: Containerized deployment support
β¨ PlantUML output: Clean, valid PlantUML format for easy rendering
Installation
Quick Start
# Clone the repository
git clone https://github.com/hydavinci/uml-diagram.git
cd uml-diagram
# Install dependencies
pip install -r requirements.txt
# or using uv
uv syncDocker Deployment
# Build the container
docker build -t uml-diagram-mcp .
# Run as HTTP server
docker run -p 8081:8081 -e TRANSPORT=http uml-diagram-mcp
# Run as stdio server
docker run -e TRANSPORT=stdio uml-diagram-mcpUsage
As a Standalone Script
# Navigate to the src directory
cd src
# Generate UML from a C++ project directory
python uml_generate.py /path/to/your/cpp/project
# The UML diagram will be written to 'uml_output.puml' in the current directoryExample:
python uml_generate.py "C:\Projects\MyProject\src"
# Output: uml_output.pumlAs a Python Module
Directory-based Generation
from src.uml_generate import generate_cpp_uml_from_path
# Generate UML from a directory
uml_diagram = generate_cpp_uml_from_path('/path/to/cpp/project')
print(uml_diagram)
# Save to file
with open('my_diagram.puml', 'w') as f:
f.write(uml_diagram)Content-based Generation
from src.uml_generate import generate_cpp_uml_from_content
# Dictionary where keys are file names and values are file contents
file_contents = {
"animal.h": """
class Animal {
public:
virtual void makeSound() = 0;
virtual ~Animal() = default;
protected:
std::string name_;
private:
int age_;
};
""",
"dog.h": """
#include "animal.h"
class Dog : public Animal {
public:
void makeSound() override;
void bark();
private:
std::string breed_;
bool isTrained_;
};
""",
"cat.h": """
#include "animal.h"
class Cat : public Animal {
public:
void makeSound() override;
void purr();
private:
bool isIndoor_;
};
"""
}
uml_diagram = generate_cpp_uml_from_content(file_contents)
print(uml_diagram)As an MCP Server
This tool provides a complete Model Context Protocol (MCP) server implementation with two available tools:
Available MCP Tools
generate_cpp_uml- Directory-based UML generationParameter:
path(string) - Path to directory containing C++ filesReturns: PlantUML diagram as string
Example: Analyze entire C++ project directory
generate_cpp_uml_from_content- Content-based UML generationParameter:
file_contents(Dict[str, str]) - Dictionary mapping file names to their contentsReturns: PlantUML diagram as string
Example: Generate UML from provided source code snippets
Starting the MCP Server
HTTP Mode (recommended for web clients):
# Set transport mode and start server
export TRANSPORT=http
python src/server.py
# Server will start on port 8081 by default
# Access at: http://localhost:8081Stdio Mode (for command-line clients):
# Default mode - no environment variable needed
python src/server.py
# Or explicitly set stdio mode
export TRANSPORT=stdio
python src/server.pyMCP Client Integration Example
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def use_uml_generator():
server_params = StdioServerParameters(
command="python",
args=["src/server.py"],
cwd="/path/to/uml-diagram"
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the session
await session.initialize()
# Generate UML from directory
result = await session.call_tool(
"generate_cpp_uml",
{"path": "/path/to/cpp/project"}
)
print("Generated UML:")
print(result.content[0].text)
# Run the example
asyncio.run(use_uml_generator())Requirements
System Requirements
Python: 3.10 or higher
Operating System: Windows, Linux, macOS
Memory: Minimum 512MB RAM (more for large codebases)
Dependencies
Core Dependencies (included in pyproject.toml)
fastmcp>=0.2.0- For MCP server functionality
Python Standard Library (no installation needed)
os- File system operationsre- Regular expression parsingtyping- Type hintsjson- JSON handling (middleware)base64- Encoding (middleware)urllib.parse- URL parsing (middleware)
Development Dependencies (optional)
# For development and testing
pip install pytest black flake8PlantUML Rendering (optional)
To view the generated .puml files:
VS Code: Install PlantUML extension
Online: Use PlantUML Online Server
Local: Install PlantUML with Java runtime
Output Examples
Generated PlantUML Structure
The tool generates clean, well-formatted PlantUML diagrams:
@startuml
class Animal {
+ virtual makeSound() = 0
+ virtual ~Animal() = default
# std::string name_
- int age_
}
class Dog {
+ makeSound() override
+ bark()
- std::string breed_
- bool isTrained_
}
class Cat {
+ makeSound() override
+ purr()
- bool isIndoor_
}
Animal <|-- Dog
Animal <|-- Cat
@endumlSymbol Meanings
+Public members-Private members#Protected members<|--Inheritance relationship (base <|-- derived)
File Output
Script mode: Creates
uml_output.pumlin current directoryModule mode: Returns PlantUML string for programmatic use
MCP mode: Returns PlantUML string via MCP protocol
Project Structure
uml-diagram/
βββ src/
β βββ server.py # MCP server implementation
β βββ uml_generate.py # Core UML generation logic
β βββ middleware.py # HTTP request middleware
βββ Dockerfile # Container configuration
βββ pyproject.toml # Project dependencies and metadata
βββ smithery.yaml # Smithery platform configuration
βββ README.md # This file
βββ LICENSE # MIT licenseSupported C++ Features
Class Detection
β Class definitions
β Struct definitions
β Template classes (generics stripped for PlantUML compatibility)
β Nested classes (basic support)
Inheritance
β Single inheritance
β Multiple inheritance
β Public inheritance
β Protected inheritance
β Private inheritance
Member Detection
β Public, private, protected members
β Methods and functions
β Variables and fields
β Virtual and pure virtual methods
β Constructors and destructors
β Static members (basic support)
Limitations
β οΈ Complex template specializations may not be fully captured
β οΈ Preprocessor macros are not expanded
β οΈ Forward declarations without definitions are skipped
β οΈ Some complex C++ syntax may require manual review
Configuration
Environment Variables
TRANSPORT: Set to "http" for HTTP mode, "stdio" for stdio mode (default)PORT: HTTP server port (default: 8081)SERVER_TOKEN: Optional authentication token for stdio mode
Smithery Platform
This project includes smithery.yaml for deployment on the Smithery platform:
Containerized runtime
HTTP transport mode
Auto-scaling support
Troubleshooting
Common Issues
"No C++ classes found" message:
Verify the path contains .cpp, .hpp, .h, .cc, or .cxx files
Check file encoding (UTF-8 recommended)
Ensure class definitions use standard C++ syntax
Empty or malformed UML output:
Review C++ syntax for unsupported constructs
Check for balanced braces in class definitions
Verify inheritance syntax follows standard format
MCP server connection issues:
Ensure correct transport mode (http vs stdio)
Check port availability (8081 by default)
Verify dependencies are installed (
fastmcp)
Debug Mode
Enable verbose logging by modifying server.py:
# Add debug logging
import logging
logging.basicConfig(level=logging.DEBUG)Contributing
Fork the repository
Create a feature branch:
git checkout -b feature-nameMake your changes and add tests
Commit:
git commit -am 'Add feature-name'Push:
git push origin feature-nameCreate a Pull Request
Development Setup
# Clone and setup development environment
git clone https://github.com/hydavinci/uml-diagram.git
cd uml-diagram
# Install in development mode
pip install -e .
# Run tests (if available)
python -m pytest
# Format code
black src/License
This project is licensed under the MIT License - see the LICENSE file for details.
Changelog
v0.1.0
Initial release
Directory-based UML generation
Content-based UML generation
MCP server with HTTP and stdio transport
Docker containerization support
PlantUML output format
Class, inheritance, and member detection
Author: hydavinci
Repository: https://github.com/hydavinci/uml-diagram
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.