Skip to main content
Glama
visualization.ts4.34 kB
import { z } from "zod"; /** * Visualization Tools - Generate visual representations of code and systems */ // ============================================ // Generate Diagram Tool // ============================================ export const generateDiagramSchema = { name: "generate_diagram", description: "Generates Mermaid.js diagrams to visualize code, systems, or flows", inputSchema: z.object({ type: z .enum([ "flowchart", "sequence", "class", "state", "erd", "gantt", "mindmap", "pie", ]) .describe("Type of diagram to generate"), description: z .string() .describe("Description of the system or flow to visualize"), direction: z .enum(["TB", "LR", "RL", "BT"]) .optional() .default("TB") .describe("Direction (Top-Bottom, Left-Right)"), }), }; export function generateDiagramHandler(args: { type: string; description: string; direction?: string; }) { const { type, description, direction = "TB" } = args; // In a real implementation, this would use the LLM to process the description into Mermaid syntax. // Since we are simulating the *tool* response that guides the AI, we return instructions or a template. // However, since the AI *calling* this tool is the one generating the content, // we should return a prompt that helps the AI generate specific Mermaid syntax. // BUT, if this tool is meant to *produce* the diagram for the user, // the handler itself should ideally do the work or return the structure. // Let's return a structured response that acts as a "Diagram Builder" const templates: Record<string, string> = { flowchart: `graph ${direction} Start([Start]) --> Process[Process] Process --> Decision{Decision?} Decision -- Yes --> End([End]) Decision -- No --> Process`, sequence: `sequenceDiagram participant User participant System User->>System: Request System-->>User: Response`, class: `classDiagram class Animal { +String name +eat() } class Dog { +bark() } Animal <|-- Dog`, state: `stateDiagram-v2 [*] --> Idle Idle --> Processing : Event Processing --> [*]`, erd: `erDiagram USER ||--o{ POST : writes USER { string name string email } POST { string title string content }`, gantt: `gantt title Project Schedule dateFormat YYYY-MM-DD section Section Task :a1, 2024-01-01, 30d`, mindmap: `mindmap root((Central Idea)) Topic 1 Subtopic A Topic 2`, }; return { content: [ { type: "text", text: `# Mermaid Diagram: ${type}\n\nUse this syntax in your markdown files:\n\n\`\`\`mermaid\n${templates[type] || "graph TD; A-->B;"}\n\`\`\`\n\n**Instructions for AI**: Replace the placeholder content above with the specific logic described in: "${description}".`, }, ], }; } // ============================================ // Visualize System Tool // ============================================ export const visualizeSystemSchema = { name: "visualize_system", description: "Visualizes the high-level architecture of the current project", inputSchema: z.object({ components: z.array(z.string()).describe("List of system components"), relationships: z .array(z.string()) .describe("List of connections (e.g. 'Web -> API')"), style: z.enum(["simple", "detailed", "c4"]).optional().default("simple"), }), }; export function visualizeSystemHandler(args: { components: string[]; relationships: string[]; style?: string; }) { const { components, relationships, style } = args; const graph = `graph ${style === "simple" ? "LR" : "TB"} %% Components ${components.map((c) => ` ${c.replace(/\s+/g, "")}[${c}]`).join("\n")} %% Relationships ${relationships .map((r) => { const [from, to] = r.split("->").map((s) => s.trim().replace(/\s+/g, "")); return ` ${from} --> ${to}`; }) .join("\n")}`; return { content: [ { type: "text", text: `# System Architecture (${style})\n\n\`\`\`mermaid\n${graph}\n\`\`\``, }, ], }; } // Export all export const visualizationTools = { generateDiagramSchema, generateDiagramHandler, visualizeSystemSchema, visualizeSystemHandler, };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/millsydotdev/Code-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server