Skip to main content
Glama

create_from_mermaid

Convert Mermaid diagrams to Excalidraw elements for collaborative diagramming and visualization.

Instructions

Convert a Mermaid diagram to Excalidraw elements

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mermaidDiagramYes
configNo

Implementation Reference

  • Tool registration and inline handler implementation for create_from_mermaid. This is the actual executing code that parses mermaidDiagram and config, calls client.convertMermaid(), and returns success/error messages.
    // --- Tool: create_from_mermaid ---
    server.tool(
      'create_from_mermaid',
      'Convert a Mermaid diagram to Excalidraw elements',
      {
        mermaidDiagram: z.string().min(1).max(LIMITS.MAX_MERMAID_LENGTH),
        config: z.object({
          startOnLoad: z.boolean().optional(),
          flowchart: z.object({ curve: z.enum(['linear', 'basis']).optional() }).optional(),
          themeVariables: z.object({ fontSize: z.string().max(10).optional() }).optional(),
          maxEdges: z.number().int().min(1).max(1000).optional(),
          maxTextSize: z.number().int().min(1).max(100000).optional(),
        }).optional(),
      },
      async ({ mermaidDiagram, config }) => {
        try {
          await client.convertMermaid(mermaidDiagram, config as Record<string, unknown>);
          return {
            content: [{
              type: 'text',
              text: 'Mermaid conversion broadcast to canvas. Elements will appear when a frontend client is connected.',
            }],
          };
        } catch (err) {
          return { content: [{ type: 'text', text: `Error: ${(err as Error).message}` }], isError: true };
        }
      }
    );
  • Zod schema definition for Mermaid diagram conversion input validation. Defines the structure for mermaidDiagram string and optional config object.
    export const MermaidSchema = z
      .object({
        mermaidDiagram: z.string().min(1).max(LIMITS.MAX_MERMAID_LENGTH),
        config: z
          .object({
            startOnLoad: z.boolean().optional(),
            flowchart: z
              .object({})
              .strict()
              .optional(),
            themeVariables: z
              .object({})
              .strict()
              .optional(),
            maxEdges: z.number().int().min(1).max(1000).optional(),
            maxTextSize: z.number().int().min(1).max(100_000).optional(),
          })
          .strict()
          .optional(),
      })
      .strict();
  • CanvasClient method that performs the actual HTTP POST request to /api/elements/from-mermaid endpoint with the mermaid diagram and config.
    async convertMermaid(
      mermaidDiagram: string,
      config?: Record<string, unknown>
    ): Promise<void> {
      const res = await fetch(`${this.baseUrl}/api/elements/from-mermaid`, {
        method: 'POST',
        headers: this.headers(),
        body: JSON.stringify({ mermaidDiagram, config }),
      });
    
      if (!res.ok) {
        const body = await res.json().catch(() => ({})) as ApiResponse;
        throw new Error(body.error ?? `Canvas error: ${res.status}`);
      }
    }
  • Alternative exported handler function that uses MermaidSchema for validation and calls client.convertMermaid(). Note: This function is exported but not currently used by the MCP server registration.
    import type { CanvasClient } from '../canvas-client.js';
    import { MermaidSchema } from '../schemas/element.js';
    
    export async function createFromMermaidTool(
      args: unknown,
      client: CanvasClient
    ) {
      const { mermaidDiagram, config } = MermaidSchema.parse(args);
      await client.convertMermaid(
        mermaidDiagram,
        config as Record<string, unknown> | undefined
      );
      return { success: true, message: 'Mermaid conversion sent to canvas' };
    }
  • Sandbox server registration for capability scanning. This is a noop registration used for Smithery capability detection.
    server.tool('create_from_mermaid', 'Convert a Mermaid diagram to Excalidraw elements', { mermaidDiagram: z.string().min(1).max(LIMITS.MAX_MERMAID_LENGTH) }, noop);

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/debu-sinha/excalidraw-mcp-server'

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