generate_path_map
Create visual route maps for travel planning by converting points of interest into detailed maps with locations and photos.
Instructions
Generate a route map to display the user's planned route, such as travel guide routes.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The map title should not exceed 16 characters. The content should be consistent with the information the map wants to convey and should be accurate, rich, creative, and attractive. | |
| data | Yes | Routes, each group represents all POIs along a route. For example, [{ "data": ["西安钟楼", "西安大唐不夜城", "西安大雁塔"] }, { "data": ["西安曲江池公园", "西安回民街"] }] | |
| width | No | Set the width of map, default is 1600. | |
| height | No | Set the height of map, default is 1000. |
Implementation Reference
- src/utils/generate.ts:56-82 (handler)The core handler function for map tools like generate_path_map. It sends the tool name and input parameters to an external visualization server via HTTP POST to generate the path map.export async function generateMap( tool: string, input: unknown, ): Promise<ResponseResult> { const url = getVisRequestServer(); const response = await axios.post( url, { serviceId: getServiceIdentifier(), tool, input, source: "mcp-server-chart", }, { headers: { "Content-Type": "application/json", }, }, ); const { success, errorMessage, resultObj } = response.data; if (!success) { throw new Error(errorMessage); } return resultObj; }
- src/charts/path-map.ts:10-39 (schema)Defines the input schema (using Zod) and tool metadata for the generate_path_map tool, including name, description, and inputSchema.const schema = { title: MapTitleSchema, data: z .array( z.object({ data: POIsSchema }).describe("The route and places along it."), ) .nonempty("At least one route is required.") .describe( 'Routes, each group represents all POIs along a route. For example, [{ "data": ["西安钟楼", "西安大唐不夜城", "西安大雁塔"] }, { "data": ["西安曲江池公园", "西安回民街"] }]', ), width: MapWidthSchema, height: MapHeightSchema, }; // https://modelcontextprotocol.io/specification/2025-03-26/server/tools#listing-tools const tool = { name: "generate_path_map", description: "Generate a route map to display the user's planned route, such as travel guide routes.", inputSchema: zodToJsonSchema(schema), annotations: { title: "Generate Path Map", readOnlyHint: true, }, }; export const pathMap = { schema, tool, };
- src/server.ts:64-77 (registration)Sets up MCP tool handlers. The listTools handler includes generate_path_map from Charts.pathMap.tool, and callTool requests are routed to the callTool utility.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"); }
- src/utils/callTool.ts:9-36 (helper)Maps the generate_path_map tool name to the 'path-map' chart type for dispatch.const CHART_TYPE_MAP = { generate_area_chart: "area", generate_bar_chart: "bar", generate_boxplot_chart: "boxplot", generate_column_chart: "column", generate_district_map: "district-map", generate_dual_axes_chart: "dual-axes", generate_fishbone_diagram: "fishbone-diagram", generate_flow_diagram: "flow-diagram", generate_funnel_chart: "funnel", generate_histogram_chart: "histogram", generate_line_chart: "line", generate_liquid_chart: "liquid", generate_mind_map: "mind-map", generate_network_graph: "network-graph", generate_organization_chart: "organization-chart", generate_path_map: "path-map", generate_pie_chart: "pie", generate_pin_map: "pin-map", generate_radar_chart: "radar", generate_sankey_chart: "sankey", generate_scatter_chart: "scatter", generate_treemap_chart: "treemap", generate_venn_chart: "venn", generate_violin_chart: "violin", generate_waterfall_chart: "waterfall", generate_word_cloud_chart: "word-cloud", } as const;
- src/utils/callTool.ts:70-80 (helper)Identifies generate_path_map as a map chart tool and delegates execution to generateMap.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; }