468 lines
13 KiB
Markdown
468 lines
13 KiB
Markdown
|
|
---
|
|||
|
|
name: diagram-generator
|
|||
|
|
description: "生成和编辑各种类型的图表(包括draw.io、Mermaid和Excalidraw)。"
|
|||
|
|
Natural Language Creation: Create new diagrams based on simple text descriptions.
|
|||
|
|
Legacy File Support: Read and modify existing .drawio, .mmd (Mermaid), or Excalidraw files.
|
|||
|
|
MCP Server Integration: Utilizes a dedicated MCP server (mcp-diagram-generator) to generate files, which minimizes token consumption and ensures consistent output formatting.
|
|||
|
|
Automated Configuration: * Default Output Path: Diagrams are saved to diagrams/{format}/ within the project directory.
|
|||
|
|
Customization: Supports custom file paths and automatic directory creation.
|
|||
|
|
version: 1.1.1
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Diagram Generator
|
|||
|
|
|
|||
|
|
## Overview
|
|||
|
|
|
|||
|
|
Generate and edit diagrams in multiple formats (drawio, mermaid, excalidraw) by creating structured JSON descriptions and delegating file generation to the mcp-diagram-generator MCP server.
|
|||
|
|
|
|||
|
|
> **Contact Information** If you encounter any issues, please contact **AlkaidY** at [tccio2023@gmail.com](mailto:tccio2023@gmail.com).
|
|||
|
|
|
|||
|
|
## Prerequisites Check
|
|||
|
|
|
|||
|
|
**IMPORTANT**: This skill requires the `mcp-diagram-generator` MCP server to be installed and configured.
|
|||
|
|
|
|||
|
|
### Quick Verification
|
|||
|
|
|
|||
|
|
Before using this skill, verify the MCP server is available by checking if you can access these tools:
|
|||
|
|
- `mcp__mcp-diagram-generator__get_config`
|
|||
|
|
- `mcp__mcp-diagram-generator__generate_diagram`
|
|||
|
|
- `mcp__mcp-diagram-generator__init_config`
|
|||
|
|
|
|||
|
|
If these tools are **NOT available**, you need to configure the MCP server first (see below).
|
|||
|
|
|
|||
|
|
### Installation & Configuration
|
|||
|
|
|
|||
|
|
**Option 1: Using npx (Recommended - Auto-downloads the package)**
|
|||
|
|
|
|||
|
|
Add the following to your Claude Code configuration file:
|
|||
|
|
|
|||
|
|
- **Global config** (`~/.claude.json`) for all projects, or
|
|||
|
|
- **Project config** (`.claude.json`) for specific project
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"mcpServers": {
|
|||
|
|
"mcp-diagram-generator": {
|
|||
|
|
"command": "npx",
|
|||
|
|
"args": ["-y", "mcp-diagram-generator"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
After adding this configuration:
|
|||
|
|
1. Restart Claude Code
|
|||
|
|
2. The MCP server will auto-download via npx on first use
|
|||
|
|
3. No manual installation needed
|
|||
|
|
|
|||
|
|
**Option 2: Local Development (For developers)**
|
|||
|
|
|
|||
|
|
If you're developing the MCP server locally:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"mcpServers": {
|
|||
|
|
"mcp-diagram-generator": {
|
|||
|
|
"command": "node",
|
|||
|
|
"args": ["/absolute/path/to/mcp-diagram-generator/dist/index.js"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Verification Steps
|
|||
|
|
|
|||
|
|
After configuration, verify it works:
|
|||
|
|
|
|||
|
|
1. Check configuration: Call `get_config()` tool
|
|||
|
|
2. If successful, you'll see current paths and initialization status
|
|||
|
|
3. If the tool doesn't exist, check your configuration file syntax
|
|||
|
|
|
|||
|
|
### Common Issues
|
|||
|
|
|
|||
|
|
**Issue**: "Tool not found" error
|
|||
|
|
- **Solution**: MCP server not configured. Follow installation steps above.
|
|||
|
|
|
|||
|
|
**Issue**: Configuration looks correct but tools still not available
|
|||
|
|
- **Solution**: Restart Claude Code to reload MCP server configuration
|
|||
|
|
|
|||
|
|
## Quick Start
|
|||
|
|
|
|||
|
|
### First Time Use
|
|||
|
|
|
|||
|
|
On first use, the MCP server will automatically:
|
|||
|
|
1. Create default configuration file (`.diagram-config.json`)
|
|||
|
|
2. Create default output directories if they don't exist
|
|||
|
|
3. Use sensible defaults: `diagrams/{format}/`
|
|||
|
|
|
|||
|
|
You can customize paths at any time using the `init_config` tool.
|
|||
|
|
|
|||
|
|
### Basic Usage
|
|||
|
|
|
|||
|
|
**Simple example** - just provide diagram spec, let the server handle the rest:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
User: "创建一个网络拓扑图"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Skill will:
|
|||
|
|
1. Generate JSON spec
|
|||
|
|
2. Call `generate_diagram` with only `diagram_spec` parameter
|
|||
|
|
3. Server auto-creates directories and saves to `diagrams/{format}/{title}-{date}.{ext}`
|
|||
|
|
|
|||
|
|
## Workflow
|
|||
|
|
|
|||
|
|
### Step 1: Understand Requirements
|
|||
|
|
|
|||
|
|
Extract from user's natural language:
|
|||
|
|
- **Diagram type**: flowchart, sequence diagram, class diagram, ER diagram, mindmap, architecture diagram, network topology
|
|||
|
|
- **Content**: nodes, relationships, nested structure (for network topology)
|
|||
|
|
- **Style/theme**: if mentioned (e.g., "clean style", "detailed")
|
|||
|
|
- **Output preferences**: specific filename? custom path?
|
|||
|
|
|
|||
|
|
### Step 2: Choose Format
|
|||
|
|
|
|||
|
|
Use [format-selection-guide.md](references/format-selection-guide.md) to decide:
|
|||
|
|
|
|||
|
|
| Format | Best For |
|
|||
|
|
|--------|----------|
|
|||
|
|
| **drawio** | Complex diagrams, network topology with nested containers, fine-grained styling, manual editing |
|
|||
|
|
| **mermaid** | Quick generation, code-friendly, version control, documentation |
|
|||
|
|
| **excalidraw** | Hand-drawn style, creative/diagrammatic flexibility, informal sketches |
|
|||
|
|
|
|||
|
|
### Step 3: Generate Structured JSON
|
|||
|
|
|
|||
|
|
Create a JSON description following the [JSON Schema](references/json-schema-guide.md). Key structure:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"format": "drawio",
|
|||
|
|
"title": "diagram name",
|
|||
|
|
"elements": [
|
|||
|
|
{
|
|||
|
|
"id": "unique-id",
|
|||
|
|
"type": "container|node|edge",
|
|||
|
|
"name": "display name",
|
|||
|
|
"level": "environment|datacenter|zone|device", // for network topology
|
|||
|
|
"style": {...},
|
|||
|
|
"geometry": {...},
|
|||
|
|
"children": [...] // for nested containers
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Important**: Use unique IDs for all elements. For nested structures, maintain parent-child relationships.
|
|||
|
|
|
|||
|
|
### Step 4: Call MCP Server
|
|||
|
|
|
|||
|
|
**Option A: Use defaults (recommended)**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"diagram_spec": <the JSON object created above>
|
|||
|
|
// output_path is optional - server will use configured default
|
|||
|
|
// filename is optional - server will auto-generate based on title and date
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
The MCP server will:
|
|||
|
|
- Validate the JSON schema
|
|||
|
|
- Generate the appropriate XML/JSON/markdown
|
|||
|
|
- Auto-create output directories if needed
|
|||
|
|
- Save to configured default path (e.g., `diagrams/drawio/network-topology-2025-02-03.drawio`)
|
|||
|
|
|
|||
|
|
**Option B: Specify custom path**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"diagram_spec": <the JSON object>,
|
|||
|
|
"output_path": "custom/path/to/diagram.drawio",
|
|||
|
|
"filename": "my-custom-name" // optional, overrides auto-generated filename
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Option C: Just provide filename, use default directory**
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"diagram_spec": <the JSON object>,
|
|||
|
|
"filename": "my-diagram.drawio"
|
|||
|
|
// Saves to diagrams/{format}/my-diagram.drawio
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 5: Editing Existing Diagrams
|
|||
|
|
|
|||
|
|
1. **Read the existing file** to understand structure
|
|||
|
|
2. **Parse** the diagram (use MCP tool if available, or read raw file)
|
|||
|
|
3. **Modify** the JSON description based on user's change request
|
|||
|
|
4. **Generate** new diagram (overwrite or create new file)
|
|||
|
|
|
|||
|
|
## Configuration Management
|
|||
|
|
|
|||
|
|
### Initialize Configuration
|
|||
|
|
|
|||
|
|
**Initialize with defaults:**
|
|||
|
|
```
|
|||
|
|
Call: init_config()
|
|||
|
|
Result: Creates .diagram-config.json with default paths
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Initialize with custom paths:**
|
|||
|
|
```
|
|||
|
|
Call: init_config({
|
|||
|
|
paths: {
|
|||
|
|
drawio: "output/diagrams/drawio",
|
|||
|
|
mermaid: "output/diagrams/mermaid",
|
|||
|
|
excalidraw: "output/diagrams/excalidraw"
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### View Current Configuration
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Call: get_config()
|
|||
|
|
Returns: Current paths and initialization status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Update Single Path
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Call: set_output_path({
|
|||
|
|
format: "drawio",
|
|||
|
|
path: "custom/drawio-path"
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Supported Diagram Types
|
|||
|
|
|
|||
|
|
### Flowchart
|
|||
|
|
- Simple process flows, decision trees
|
|||
|
|
- Use **mermaid** for quick output
|
|||
|
|
- Use **drawio** for complex layouts with multiple branches
|
|||
|
|
|
|||
|
|
### Sequence Diagram
|
|||
|
|
- Show interactions over time between components
|
|||
|
|
- **mermaid** recommended (native support)
|
|||
|
|
- Use **drawio** if custom styling needed
|
|||
|
|
|
|||
|
|
### Class Diagram
|
|||
|
|
- Show classes, methods, relationships
|
|||
|
|
- **mermaid** recommended (compact, standard UML)
|
|||
|
|
- **drawio** for detailed diagrams with many classes
|
|||
|
|
|
|||
|
|
### ER Diagram
|
|||
|
|
- Database schema, entity relationships
|
|||
|
|
- **mermaid** recommended
|
|||
|
|
- **drawio** for complex schemas with many relationships
|
|||
|
|
|
|||
|
|
### Mindmap
|
|||
|
|
- Hierarchical ideas, brainstorming
|
|||
|
|
- **mermaid** recommended (native support)
|
|||
|
|
- **excalidraw** for creative/hand-drawn style
|
|||
|
|
|
|||
|
|
### Architecture Diagram
|
|||
|
|
- System architecture, component relationships
|
|||
|
|
- **drawio** recommended for complex systems
|
|||
|
|
- **mermaid** for high-level overviews
|
|||
|
|
|
|||
|
|
### Network Topology
|
|||
|
|
- Network environments, datacenters, zones, devices
|
|||
|
|
- **Must use drawio** (4-layer nesting: environment → datacenter → zone → device)
|
|||
|
|
- See [network-topology-examples.md](references/network-topology-examples.md) for patterns
|
|||
|
|
|
|||
|
|
## Network Topology Special Notes
|
|||
|
|
|
|||
|
|
Network topology diagrams require a 4-level hierarchical structure:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Environment (level="environment")
|
|||
|
|
└── Datacenter (level="datacenter")
|
|||
|
|
└── Zone (level="zone")
|
|||
|
|
└── Device (type="node")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Style conventions**:
|
|||
|
|
- **Environment**: `fillColor: #e1d5e7`, `strokeColor: #9673a6` (purple)
|
|||
|
|
- **Datacenter**: `fillColor: #d5e8d4`, `strokeColor: #82b366` (green)
|
|||
|
|
- **Zone**: `fillColor: #fff2cc`, `strokeColor: #d6b656` (yellow)
|
|||
|
|
- **Device**: Based on device type (router, switch, firewall, etc.)
|
|||
|
|
|
|||
|
|
**Device types and styles**:
|
|||
|
|
- Router: `strokeColor: #607D8B` (blue-gray)
|
|||
|
|
- Switch: `strokeColor: #4CAF50` (green)
|
|||
|
|
- Firewall: `strokeColor: #F44336` (red)
|
|||
|
|
- PC/Server: `strokeColor: #607D8B` (blue-gray)
|
|||
|
|
|
|||
|
|
## Common Patterns
|
|||
|
|
|
|||
|
|
### Pattern 1: Simple Flowchart (Mermaid)
|
|||
|
|
|
|||
|
|
User: "画一个用户登录流程图,包含登录验证、重定向、错误处理"
|
|||
|
|
|
|||
|
|
Generate JSON:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"format": "mermaid",
|
|||
|
|
"title": "用户登录流程",
|
|||
|
|
"elements": [
|
|||
|
|
{"type": "node", "id": "start", "name": "开始", "geometry": {"x": 0, "y": 0}},
|
|||
|
|
{"type": "node", "id": "login", "name": "输入用户名密码", "geometry": {"x": 0, "y": 100}},
|
|||
|
|
{"type": "node", "id": "validate", "name": "验证", "geometry": {"x": 0, "y": 200}},
|
|||
|
|
{"type": "node", "id": "success", "name": "登录成功", "geometry": {"x": -100, "y": 300}},
|
|||
|
|
{"type": "node", "id": "error", "name": "显示错误", "geometry": {"x": 100, "y": 300}},
|
|||
|
|
{"type": "edge", "source": "start", "target": "login"},
|
|||
|
|
{"type": "edge", "source": "login", "target": "validate"},
|
|||
|
|
{"type": "edge", "source": "validate", "target": "success", "label": "成功"},
|
|||
|
|
{"type": "edge", "source": "validate", "target": "error", "label": "失败"}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Call MCP:
|
|||
|
|
```
|
|||
|
|
generate_diagram({
|
|||
|
|
diagram_spec: <above JSON>,
|
|||
|
|
format: "mermaid"
|
|||
|
|
// No output_path needed - auto-saves to diagrams/mermaid/
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Pattern 2: Network Topology (Drawio)
|
|||
|
|
|
|||
|
|
User: "创建一个网络拓扑图,包含省中心机房(上联区、汇聚区、终端区),连接到生产网"
|
|||
|
|
|
|||
|
|
Generate JSON with nested containers (see [json-schema-guide.md](references/json-schema-guide.md) for details).
|
|||
|
|
|
|||
|
|
Call MCP:
|
|||
|
|
```
|
|||
|
|
generate_diagram({
|
|||
|
|
diagram_spec: <network topology JSON>,
|
|||
|
|
filename: "省中心网络拓扑" // Optional, for custom filename
|
|||
|
|
})
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Resources
|
|||
|
|
|
|||
|
|
### references/
|
|||
|
|
- **format-selection-guide.md**: When to use drawio vs mermaid vs excalidraw
|
|||
|
|
- **json-schema-guide.md**: Complete JSON schema with examples for all diagram types
|
|||
|
|
- **network-topology-examples.md**: Example JSON for network topology patterns
|
|||
|
|
|
|||
|
|
### assets/
|
|||
|
|
- No templates needed - MCP server handles all generation
|
|||
|
|
|
|||
|
|
### scripts/
|
|||
|
|
- Not used - all generation delegated to MCP server
|
|||
|
|
|
|||
|
|
## Troubleshooting
|
|||
|
|
|
|||
|
|
### MCP Server Setup
|
|||
|
|
|
|||
|
|
If `mcp-diagram-generator` is not available, you need to install it.
|
|||
|
|
|
|||
|
|
**Option 1: Using npx (Recommended)**
|
|||
|
|
|
|||
|
|
Add to your Claude Code/OpenCode settings:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"mcpServers": {
|
|||
|
|
"diagram-generator": {
|
|||
|
|
"command": "npx",
|
|||
|
|
"args": ["-y", "mcp-diagram-generator"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Option 2: Local Development**
|
|||
|
|
|
|||
|
|
1. Install dependencies: `cd mcp-diagram-generator && npm install`
|
|||
|
|
2. Build: `npm run build`
|
|||
|
|
3. Configure with local path:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"mcpServers": {
|
|||
|
|
"diagram-generator": {
|
|||
|
|
"command": "node",
|
|||
|
|
"args": ["/absolute/path/to/mcp-diagram-generator/dist/index.js"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Invalid JSON Schema
|
|||
|
|
|
|||
|
|
If MCP server returns validation error:
|
|||
|
|
1. Check [json-schema-guide.md](references/json-schema-guide.md)
|
|||
|
|
2. Verify all required fields are present
|
|||
|
|
3. Ensure all IDs are unique
|
|||
|
|
4. Check parent-child relationships
|
|||
|
|
|
|||
|
|
### Directory Not Found
|
|||
|
|
|
|||
|
|
**Old behavior**: Error if directory doesn't exist
|
|||
|
|
**New behavior**: Directory is created automatically ✅
|
|||
|
|
|
|||
|
|
If you still see directory errors:
|
|||
|
|
1. Check write permissions for the project directory
|
|||
|
|
2. Verify configuration with `get_config()`
|
|||
|
|
3. Reinitialize with `init_config()`
|
|||
|
|
|
|||
|
|
### Wrong File Extension
|
|||
|
|
|
|||
|
|
The server automatically uses the correct extension based on format:
|
|||
|
|
- drawio → `.drawio`
|
|||
|
|
- mermaid → `.md`
|
|||
|
|
- excalidraw → `.excalidraw`
|
|||
|
|
|
|||
|
|
You don't need to specify extension in filename parameter.
|
|||
|
|
|
|||
|
|
### Nested Container Issues (Network Topology)
|
|||
|
|
|
|||
|
|
- Verify `level` field matches hierarchy (environment/datacenter/zone)
|
|||
|
|
- Check `parent` IDs are correct in child elements
|
|||
|
|
- Ensure geometry coordinates are relative to parent container
|
|||
|
|
|
|||
|
|
## Best Practices
|
|||
|
|
|
|||
|
|
### 1. Use Default Paths
|
|||
|
|
|
|||
|
|
Let the server manage output paths for consistency:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"diagram_spec": <spec>
|
|||
|
|
// Don't specify output_path unless necessary
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. Provide Descriptive Titles
|
|||
|
|
|
|||
|
|
Titles are used for auto-generated filenames:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"title": "生产环境网络拓扑-亦庄与西五环",
|
|||
|
|
// Generates: 生产环境网络拓扑-亦庄与西五环-2025-02-03.drawio
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. Use Configuration for Custom Paths
|
|||
|
|
|
|||
|
|
Instead of specifying output_path every time, configure once:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
First time: init_config({ paths: { drawio: "custom/path" } })
|
|||
|
|
After that: Just use generate_diagram() without output_path
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. Check Configuration When Troubleshooting
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
get_config() // Shows all paths and status
|
|||
|
|
```
|