Skip to main content
Glama

generate_flow_diagram

Create flow diagrams to visualize process steps and decision points. Input nodes and edges to define sequences, customize themes, and adjust styles for clarity and presentation.

Instructions

Generate a flow diagram chart to show the steps and decision points of a process or system, such as, scenarios requiring linear process presentation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYesData for flow diagram chart, such as, { nodes: [{ name: 'node1' }, { name: 'node2' }], edges: [{ source: 'node1', target: 'node2', name: 'edge1' }] }.
heightNoSet the height of chart, default is 400.
styleNoCustom style configuration for the chart.
themeNoSet the theme for the chart, optional, default is 'default'.default
widthNoSet the width of chart, default is 600.

Implementation Reference

  • The callTool function is the core handler for executing the generate_flow_diagram tool. It maps 'generate_flow_diagram' to chart type 'flow-diagram' (via CHART_TYPE_MAP), validates arguments against the tool's schema, generates the chart URL using generateChartUrl, and returns the result in MCP format.
    export async function callTool(tool: string, args: object = {}) { logger.info(`Calling tool: ${tool}`); const chartType = CHART_TYPE_MAP[tool as keyof typeof CHART_TYPE_MAP]; if (!chartType) { logger.error(`Unknown tool: ${tool}`); throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${tool}.`); } try { // Validate input using Zod before sending to API. // Select the appropriate schema based on the chart type. const schema = Charts[chartType].schema; if (schema) { // Use safeParse instead of parse and try-catch. const result = z.object(schema).safeParse(args); if (!result.success) { logger.error(`Invalid parameters: ${result.error.message}`); throw new McpError( ErrorCode.InvalidParams, `Invalid parameters: ${result.error.message}`, ); } } const isMapChartTool = [ "generate_district_map", "generate_path_map", "generate_pin_map", ].includes(tool); if (isMapChartTool) { // For map charts, we use the generateMap function, and return the mcp result. const { metadata, ...result } = await generateMap(tool, args); return result; } const url = await generateChartUrl(chartType, args); logger.info(`Generated chart URL: ${url}`); return { content: [ { type: "text", text: url, }, ], _meta: { description: "This is the chart's spec and configuration, which can be renderred to corresponding chart by AntV GPT-Vis chart components.", spec: { type: chartType, ...args }, }, }; // biome-ignore lint/suspicious/noExplicitAny: <explanation> } catch (error: any) { logger.error( `Failed to generate chart: ${error.message || "Unknown error"}.`, ); if (error instanceof McpError) throw error; if (error instanceof ValidateError) throw new McpError(ErrorCode.InvalidParams, error.message); throw new McpError( ErrorCode.InternalError, `Failed to generate chart: ${error?.message || "Unknown error."}`, ); } }
  • Defines the Zod input schema for the generate_flow_diagram tool, specifying required data structure (nodes and edges), optional style, theme, width, and height.
    const schema = { data: z .object({ nodes: z .array(NodeSchema) .nonempty({ message: "At least one node is required." }), edges: z.array(EdgeSchema), }) .describe( "Data for flow diagram chart, such as, { nodes: [{ name: 'node1' }, { name: 'node2' }], edges: [{ source: 'node1', target: 'node2', name: 'edge1' }] }.", ) .refine(validatedNodeEdgeDataSchema, { message: "Invalid parameters", path: ["data", "edges"], }), style: z .object({ texture: TextureSchema, }) .optional() .describe( "Style configuration for the chart with a JSON object, optional.", ), theme: ThemeSchema, width: WidthSchema, height: HeightSchema, };
  • Tool descriptor object defining the name 'generate_flow_diagram', description, and JSON schema for input, used in MCP tool listing.
    const tool = { name: "generate_flow_diagram", description: "Generate a flow diagram chart to show the steps and decision points of a process or system, such as, scenarios requiring linear process presentation.", inputSchema: zodToJsonSchema(schema), };
  • src/server.ts:64-77 (registration)
    Registers the MCP ListTools and CallTool request handlers. ListTools returns all enabled chart tools (including generate_flow_diagram via Charts exports), and CallTool delegates to callTool function.
    function setupToolHandlers(server: Server): void { logger.info("setting up tool handlers..."); server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: getEnabledTools().map((chart) => chart.tool), })); // biome-ignore lint/suspicious/noExplicitAny: <explanation> server.setRequestHandler(CallToolRequestSchema, async (request: any) => { logger.info("calling tool", request.params.name, request.params.arguments); return await callTool(request.params.name, request.params.arguments); }); logger.info("tool handlers set up"); }
  • Helper function called by the handler to generate the actual flow diagram chart by sending the spec (type: 'flow-diagram', options) to the visualization server API and returning the rendered chart URL.
    export async function generateChartUrl( type: string, // biome-ignore lint/suspicious/noExplicitAny: <explanation> options: Record<string, any>, ): Promise<string> { const url = getVisRequestServer(); const response = await axios.post( url, { type, ...options, source: "mcp-server-chart", }, { headers: { "Content-Type": "application/json", }, }, ); const { success, errorMessage, resultObj } = response.data; if (!success) { throw new Error(errorMessage); } return resultObj; }

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/antvis/mcp-server-chart'

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