Skip to main content
Glama

mermaid_save

Save a rendered Mermaid diagram to a file after previewing and tuning it. Specify the file path, preview ID, and output format (PNG, SVG, or PDF).

Instructions

Save the current live Mermaid diagram to a file path. This copies the already-rendered diagram from the live preview to the specified location. Use this after tuning your diagram with mermaid_preview.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
save_pathYesPath to save the diagram file (e.g., './docs/diagram.svg')
preview_idYesID of the preview to save. Must match the preview_id used in mermaid_preview.
formatNoOutput format (default: svg). Must match the format used in mermaid_preview.svg

Implementation Reference

  • The handler function that executes the mermaid_save tool: validates inputs, ensures the diagram is rendered, copies the file to the target path, and returns success/error messages.
    export async function handleMermaidSave(args: any) {
      const savePath = args.save_path as string;
      const previewId = args.preview_id as string;
      const format = (args.format as string) || "svg";
    
      if (!savePath) {
        throw new Error("save_path parameter is required");
      }
      if (!previewId) {
        throw new Error("preview_id parameter is required");
      }
    
      // Validate save path to prevent path traversal attacks
      try {
        validateSavePath(savePath);
      } catch (error) {
        mcpLogger.error("Save path validation failed", {
          savePath,
          error: error instanceof Error ? error.message : String(error),
        });
        return {
          content: [
            {
              type: "text",
              text: `Invalid save path: ${error instanceof Error ? error.message : String(error)}`,
            },
          ],
          isError: true,
        };
      }
    
      try {
        const liveFilePath = getDiagramFilePath(previewId, format);
    
        try {
          await access(liveFilePath);
        } catch {
          const diagram = await loadDiagramSource(previewId);
          const options = await loadDiagramOptions(previewId);
          await renderDiagram(
            {
              diagram,
              previewId,
              format,
              ...options,
            },
            liveFilePath
          );
        }
    
        const saveDir = dirname(savePath);
        await mkdir(saveDir, { recursive: true });
        await copyFile(liveFilePath, savePath);
    
        return {
          content: [
            {
              type: "text",
              text: `Diagram saved to: ${savePath} (${format.toUpperCase()})`,
            },
          ],
        };
      } catch (error) {
        return {
          content: [
            {
              type: "text",
              text: `Error saving diagram: ${error instanceof Error ? error.message : String(error)}`,
            },
          ],
          isError: true,
        };
      }
    }
  • Input schema defining parameters for the mermaid_save tool: save_path (required), preview_id (required), format (optional, defaults to svg).
    inputSchema: {
      type: "object",
      properties: {
        save_path: {
          type: "string",
          description: "Path to save the diagram file (e.g., './docs/diagram.svg')",
        },
        preview_id: {
          type: "string",
          description:
            "ID of the preview to save. Must match the preview_id used in mermaid_preview.",
        },
        format: {
          type: "string",
          enum: ["png", "svg", "pdf"],
          description:
            "Output format (default: svg). Must match the format used in mermaid_preview.",
          default: "svg",
        },
      },
      required: ["save_path", "preview_id"],
    },
  • src/index.ts:86-114 (registration)
    Tool definition in TOOL_DEFINITIONS array used for ListTools, including name, description, and schema.
    {
      name: "mermaid_save",
      description:
        "Save the current live Mermaid diagram to a file path. " +
        "This copies the already-rendered diagram from the live preview to the specified location. " +
        "Use this after tuning your diagram with mermaid_preview.",
      inputSchema: {
        type: "object",
        properties: {
          save_path: {
            type: "string",
            description: "Path to save the diagram file (e.g., './docs/diagram.svg')",
          },
          preview_id: {
            type: "string",
            description:
              "ID of the preview to save. Must match the preview_id used in mermaid_preview.",
          },
          format: {
            type: "string",
            enum: ["png", "svg", "pdf"],
            description:
              "Output format (default: svg). Must match the format used in mermaid_preview.",
            default: "svg",
          },
        },
        required: ["save_path", "preview_id"],
      },
    },
  • src/index.ts:147-150 (registration)
    Dispatches to the handleMermaidSave handler in the CallTool request handler switch statement.
    case "mermaid_save":
      result = await handleMermaidSave(args);
      mcpLogger.info(`CallTool completed: ${toolName}`);
      return result;
Install Server

Other Tools

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/veelenga/claude-mermaid'

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